[php] Новичкам: задаем вопросы

Discussion in 'PHP' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. kraken

    kraken Member

    Joined:
    2 Jan 2009
    Messages:
    74
    Likes Received:
    75
    Reputations:
    5
    Попробуй в запросах используй кавычки
    SELECT * FROM `news` order by id desc LIMIT 0,100000
     
  2. -m0rgan-

    -m0rgan- Elder - Старейшина

    Joined:
    29 Sep 2008
    Messages:
    514
    Likes Received:
    170
    Reputations:
    17
    Всем кто отписался спасибо!
    Код я пожалуй удалю...
     
  3. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    SVAROG
    PHP:
    curl_setopt($ch,CURLOPT_NOBODY,1);
    curl_setopt($ch,CURLOPT_HEADER,1);
    -m0rgan- При отладке хорошо бы проверять где именно ошибка, например:

    PHP:
        $link mysql_connect(DB_HOSTDB_USERDB_PASS) or die('Не возможно соединиться с базой ('.mysql_error().')');
        
    mysql_select_db(DB_NAME) or die('Нельзя выбрать базу ('.mysql_error().')');
        
    $result mysql_query($query) or die ('Ошибка запроса: '.mysql_error());
    Тогда вопросы будут отпадать сами собой
     
    _________________________
    2 people like this.
  4. -m0rgan-

    -m0rgan- Elder - Старейшина

    Joined:
    29 Sep 2008
    Messages:
    514
    Likes Received:
    170
    Reputations:
    17
    У меня конфиг был такой:
    PHP:
    <?
    Error_Reporting(E_ALL & ~E_NOTICE);
    Error_Reporting (ERROR|WARNING);

    @
    mysql_connect("host""login""pass") or die("нет коннекта с мускулом...");
    @
    mysql_select_db("database") or die("Нет коннекта с БД...");
    mysql_query('set character_set_results=cp1251') or die(mysql_error());
    $date=date("d.m.Y");

    $ip=$_SERVER['REMOTE_ADDR'];
    ?>
     
  5. Romantic1989

    Romantic1989 New Member

    Joined:
    19 Aug 2008
    Messages:
    10
    Likes Received:
    1
    Reputations:
    0
    Доброго Вам время суток! Где можно найти документацию, желательно на руском, по работе с Сокетами?? Зарание спасибо :)
     
  6. preda1or

    preda1or Member

    Joined:
    27 Oct 2008
    Messages:
    167
    Likes Received:
    96
    Reputations:
    6
    Romantic1989
    http://forum.creastar.ru/index.php?topic=57.0
     
  7. SVAROG

    SVAROG Elder - Старейшина

    Joined:
    13 Feb 2007
    Messages:
    424
    Likes Received:
    86
    Reputations:
    -1
    Romantic1989
    http://ru2.php.net/manual/ru/function.fsockopen.php
    не совсем на русском, но примеров хороших много ;)
     
  8. Mixon

    Mixon Elder - Старейшина

    Joined:
    12 Mar 2008
    Messages:
    394
    Likes Received:
    119
    Reputations:
    12
    Так никто ничё и не подскажет?((
     
  9. brasco2k

    brasco2k Elder - Старейшина

    Joined:
    23 Nov 2007
    Messages:
    258
    Likes Received:
    91
    Reputations:
    0
    PHP:
    <?php
    header
    ("Location: http://google.com");
    die();
    ?>
    или

    PHP:
    <script>document.location.href "http://google.com";</script>
     
    #7269 brasco2k, 5 Jan 2009
    Last edited: 5 Jan 2009
  10. #Wolf#

    #Wolf# Elder - Старейшина

    Joined:
    26 Mar 2008
    Messages:
    375
    Likes Received:
    166
    Reputations:
    16
    имеется
    PHP:
    <form action="dropnews.php" method="POST" >
    <?php
    $result
    =mysql_query("SELECT title,id FROM news");
    while (
    $myrow=mysql_fetch_array($result))
    { echo 
    "<table width='200' border='0' align='center'>
    <tr><td width='12'><input name='id' type='checkbox'  value='
    $myrow[id]'></td><td>$myrow[title]</td></tr></table>";
    }
    ?>
    <input type="submit" name="submit" value="Удалить">
    </form>
    dropnews.php
    PHP:
    <?php
    if(isset($_POST['id']))   {$id=$_POST['id'];}
    if(isset(
    $id))

    $result=mysql_query("DELETE FROM news WHERE id='$id'");
    if(
    $result == 'true')
    {echo 
    "<p>Новость  удалена  :-)</p><br><a href=\"delnews.php\">Назад</a>";}
    else
    {echo 
    "<p>Новость  не удалена :-(</p><br><a href=\"delnews.php\">Назад</a>";}
    }
    else
    {echo 
    "<p>Ошибка!</p><br><a href=\"delnews.php\">Назад</a>"; }
    ?>
    как можно осуществить удаление сразу нескольких новостей (чтобы их можно было выбрать checkbox'ом) :confused:
    заранее благодарен :rolleyes:
     
    1 person likes this.
  11. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    #Wolf# Почитайте на досуге статьи про анти-SQLinj
    PHP:
     <pre><form METHOD="POST">
    <INPUT TYPE=checkbox NAME="Comp[]" VALUE="1"> Процессоры
    <INPUT TYPE=checkbox NAME="Comp[]" VALUE="2" CHECKED> Видеоадаптеры
    <INPUT TYPE=checkbox NAME="Comp[]" VALUE="3"> Сканеры
    <INPUT TYPE=checkbox NAME="Comp[]" VALUE="4" CHECKED> Модемы
    <INPUT TYPE=submit VALUE="Отправить" name="asd">
    </form>

    <?
    if (isset($_POST['asd']))
    {
        $id=$_POST['Comp'];
        if (is_array($id)) 
        {array_walk($id,'intval'); $id=implode("' or id='",$id);} 
        else $id=intval($id); // не забываем об анти SQL
        echo "DELETE FROM news WHERE id='".$id."'";
        if (mysql_query("DELETE FROM news WHERE id='".$id."'")) 
        {
            echo "<p>Новость удалена  :-)</p><br><a href=\"delnews.php\">Назад</a>";
        }
        else
        {
            echo "<p>Новость не удалена :-(</p><br><a href=\"delnews.php\">Назад</a>";
        } 

    }
    ?>
    if ($result=='true') - эт конеш сильно
     
    _________________________
    #7271 Gifts, 5 Jan 2009
    Last edited: 5 Jan 2009
    2 people like this.
  12. .:EnoT:.

    .:EnoT:. Сексуальное чудовище

    Joined:
    29 May 2007
    Messages:
    803
    Likes Received:
    559
    Reputations:
    50
    не менее сильно)

    я б лучше вот так сделал:
    PHP:
    <form action="" method="post">
    <input type="checkbox" name="ids[]" value="1" />
    <input type="checkbox" name="ids[]" value="2" />
    <input type="checkbox" name="ids[]" value="3" />
    <input type="checkbox" name="ids[]" value="4" />
    <input type="submit" value="Удалить выбранные" />
    </form>

    <?php
    $ids 
    = isset($_POST['ids']) && is_array($_POST['ids']) ? array_map('intval'$_POST['ids']) : '';

    if(
    $ids){
        
        
    $sql mysql_query('DELETE FROM `table`
                            WHERE `id` = IN ('
    .join(','$ids).') ');
                            
        echo 
    $sql 'Успешно =)' :  'Неудачно =('
        
    }                             

    ?>
     
    #7272 .:EnoT:., 5 Jan 2009
    Last edited: 5 Jan 2009
    1 person likes this.
  13. -m0rgan-

    -m0rgan- Elder - Старейшина

    Joined:
    29 Sep 2008
    Messages:
    514
    Likes Received:
    170
    Reputations:
    17
    Доброе время суток!
    Подскажите , что означает эта ошибка:
    Ошибка запроса: Query was empty
    кусок кода:
    PHP:
    if($_GET['news']==add)
    {
    $query "SELECT * FROM news"$empty mysql_query($query);
    $n mysql_num_rows($empty);
    $num=$n+1;
    echo
    '<form method="POST" action="index.php?add=news">
    <table width="100%" border="0" cellpadding="3" style="border: 1px solid #324316"><tr><td bgcolor="#324316">
    Название: <input type="text" name="name" size="40" value="'
    .$name.'"></td></tr><tr><td>Первый текст: (выводится на главной странице)<br><br>
    <textarea rows="5" name="text" cols="70">'
    .$text.'</textarea><br><br>
    Второй текст: (выводится на странице подробнее о новости)<br><br>
    <textarea rows="10" name="text2" cols="70">'
    .$text2.'</textarea></td></tr>
    <tr><td bgcolor="#324316"><center>
    <input type=submit value="OK"></center></td></tr></table></form>'
    ;
    }
    if(
    $_GET['add']==news)
    {
    $form "INSERT INTO news VALUES ('$num', '$name', '$text', '$text2', '$ip')"
    mysql_query($form);
    if(
    $form){
    echo
    "<font color=red>Новость успешно добавлена!</font><meta http-equiv='refresh' content='2;URL=index.php?page=news'>";
    }
    }
    Зарание спасибо!
     
  14. .:EnoT:.

    .:EnoT:. Сексуальное чудовище

    Joined:
    29 May 2007
    Messages:
    803
    Likes Received:
    559
    Reputations:
    50
    По русски: Запрос был пуст)

    у тебя register_globals = ON ?
    Или где получение данных из массива POST?
    а защита от sql инфекций?)

    PHP:
    if($_GET['news']==add
    add ж у тебя не константа (как и news), кавычки какбэ надо

    PHP:
    $form "...."
    mysql_query($form);
    if(
    $form){ 
    Какбэ проверять надо результат запроса, а не строку запроса.
    PHP:
    $form "...."
    $a mysql_query($form);
    if(
    $a){ 
    я хз под чем ты писал такой скрипт, но явно новый год прошёл нормально))
     
    1 person likes this.
  15. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Значит в таблицу news нет записей. Должна быть хоть одна запись, чтобы запрос был успешным.

    Дальше

    PHP:
    $form "INSERT INTO news VALUES ('$num', '$name', '$text', '$text2', '$ip')";
    Так неправильно, правильно так:

    PHP:
    $form "INSERT INTO news (`num`, `name`, `text`,`text2`,`ip` ) VALUES ('$num', '$name', '$text', '$text2', '$ip')";
    т.е. надо указать поля, куда вставляешь данные, а не так вот просто.

    А если у тебя поле num просто id для какого-то текста, который просто увеличивается на единицу, так проще и сделать сразу такое поле с автоинкриментом, оно само будет автоматически увеличиваться при появлении новой записи, т.е. сначала сделай такую таблицу (один раз):

    PHP:
    $query "CREATE TABLE news (
      num int(10) NOT NULL auto_increment,
      name varchar(200) default NULL,
      text varchar(200) default NULL,
      text2 varchar(200) default NULL,
      ip varchar(200) default NULL,
      PRIMARY KEY  (num)
    );"
    ;
    $end=@mysql_query($query);
    И всё, забудь про num, обрабатывай только данные
     
    1 person likes this.
  16. -m0rgan-

    -m0rgan- Elder - Старейшина

    Joined:
    29 Sep 2008
    Messages:
    514
    Likes Received:
    170
    Reputations:
    17
    Поясню ситуацию:
    Начал я писать движок...
    Сначала все норм, потом перестали добавлятся новости(((
    Потом мне посоветовали поставить другой конфиг, вот код:
    PHP:
    <?
    $link mysql_connect(localhosttesttest) or die('Не возможно соединиться с базой ('.mysql_error().')'); 
    mysql_select_db(test) or die('Нельзя выбрать базу ('.mysql_error().')'); 
    $result mysql_query($query) or die ('Ошибка запроса: '.mysql_error()); 
    ?>
    Когда я прохожу по адресу localhost/admin
    появляется ошибка:
    полный код:
    PHP:
    <?
    $name=$_POST['name'];
    $text=$_POST['text'];
    $text2=$_POST['text2']; 
    if(
    $_GET['page']==news)
    {
    print
    "<center><a href=?news=add>Добавить новость</a></center><br><br>";
    $query "SELECT * FROM news order by id desc LIMIT 0,100000"$result mysql_query($query);
    while (
    $row mysql_fetch_array($result)) :
    print
    '<table width="100%" border="0" cellpadding="3" style="border: 1px solid #324316"><tr><td bgcolor="#324316">'.$row['name'].'</td></tr><tr><td>'.$row['text'].'<br>'.$row['text2'].'</td></tr>
    <tr><td bgcolor="#324316"><a href="?news=delete&id='
    .$row['id'].'">Удалить</a>
     <a href="?edit=news&id='
    .$row['id'].'">Редактировать</a></td></tr>
    </table><br>'
    ;
    endwhile;
    }
    if(
    $_GET['edit']==news)
    {
    $index=$_GET['id'];
    $query "SELECT * FROM news WHERE `id` = '".$index."'"$result mysql_query($query);
    while (
    $row mysql_fetch_array($result)) :
    print
    '
    <form method="POST" action="index.php?news=edit&id='
    .$row['id'].'">
    <table width="100%" border="0" cellpadding="3" style="border: 1px solid #324316"><tr><td bgcolor="#324316">
    Название новости: <input type="text" name="name" size="40" value="'
    .$row['name'].'"></td></tr><tr><td>Первый текст: (выводится на главной странице)<br><br>
    <textarea rows="5" name="text" cols="70">'
    .$row['text'].'</textarea><br><br>
    Второй текст: (выводится на странице подробнее о новости)<br><br>
    <textarea rows="10" name="text2" cols="70">'
    .$row['text2'].'</textarea></td></tr>
    <tr><td bgcolor="#324316"><center>
    <input type=submit value="OK"></center></td></tr></table></form>'
    ;
    endwhile;
    }
    if(
    $_GET['news']==edit)
    {
    $index=$_GET['id'];
    $edit "UPDATE `news` SET `name` = '$name', `text` = '$text', `text2` = '$text2' WHERE `id` = ".$index
    mysql_query($edit);
    if(
    $edit){
    echo
    "<font color=red>Новость успешно изменена!</font><meta http-equiv='refresh' content='2;URL=index.php?page=news'>";
    }
    }
    if(
    $_GET['news']==delete)
    {
    $da=$_GET['id'];
    $del "DELETE FROM `news` WHERE `id` = '".$da."'";
    mysql_query($del);
    if(
    $del){
    echo
    "<font color=red>Новость успешно удалена!</font><meta http-equiv='refresh' content='2;URL=index.php?page=news'>";
    }
    }
    if(
    $_GET['news']==add)
    {
    $query "SELECT * FROM news"$result mysql_query($query);
    $n mysql_num_rows($result);
    $num=$n+1;
    echo
    '<form method="POST" action="index.php?add=news">
    <table width="100%" border="0" cellpadding="3" style="border: 1px solid #324316"><tr><td bgcolor="#324316">
    Название: <input type="text" name="name" size="40" value="'
    .$name.'"></td></tr><tr><td>Первый текст: (выводится на главной странице)<br><br>
    <textarea rows="5" name="text" cols="70">'
    .$text.'</textarea><br><br>
    Второй текст: (выводится на странице подробнее о новости)<br><br>
    <textarea rows="10" name="text2" cols="70">'
    .$text2.'</textarea></td></tr>
    <tr><td bgcolor="#324316"><center>
    <input type=submit value="OK"></center></td></tr></table></form>'
    ;
    }
    if(
    $_GET['add']==news)
    {
    $form "INSERT INTO news VALUES ('$num', '$name', '$text', '$text2', '$ip');"
    mysql_query($form);
    if(
    $form){
    echo
    "<font color=red>Новость успешно добавлена!</font><meta http-equiv='refresh' content='2;URL=index.php?page=news'>";
    }
    }
    ?>
    Создаю таблицу невс с колонками:
    PHP:
    CREATE TABLE `news` (
    `
    idint(20unsigned NOT NULL auto_increment,
    `
    namevarchar(20NOT NULL default '',
    `
    textvarchar(20NOT NULL default '',
    `
    text2varchar(20NOT NULL default '',
    PRIMARY KEY (`id`),
    KEY `id` (`id`)
    ENGINE=MyISAM DEFAULT CHARSET=cp1251;
    Вроде все...
    Хочется услышать все замечания и предложения по решению проблемы, ну и заодно по безопасности...
    Зарание спасибо!
     
  17. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Проблема скорее всего здесь:

    $index=$_GET['id'];

    и, соотвественно, дальше здесь:

    $query = "SELECT * FROM news WHERE `id` = '".$index."'"; $result = mysql_query($query);

    попробуй подставить вместо $index просто реальную цифру той новости, которая реально существует

    Ну и можно посмотреть значение $index (кладется туда вообще что-нибудь или нет):

    PHP:
    $index=$_GET['id'];
    echo 
    $index;
     
  18. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    -m0rgan- Либо ты нас непонятно зачем обманываешь, либо крайне сильно заблуждаешься... Во-первых, это НЕ весь листинг, ты либо этот файл где-то инклудишь, либо случайно удалил инклуд конфига из начала поста

    PHP:
    <?
    $link mysql_connect(localhosttesttest) or die('Не возможно соединиться с базой ('.mysql_error().')'); 
    mysql_select_db(test) or die('Нельзя выбрать базу ('.mysql_error().')'); 
    >>>>>>>>>>>
    $result mysql_query($query) or die ('Ошибка запроса: '.mysql_error()); <<<<<<<<<<<<<<<<<< 
    ?> 
    Смотрим на выделенную строчку. Тебе что сказали? Для всех mysql_query сделать такую конструкцию, а не бездумно копировать ее зачем-то в конфиг оО. Естественно, что $query - пустая строка в конфиге, собственно отсюда и ошибка.

    Во-вторых if($_GET['edit']==news) - тебе парой постов выше сказали, что ты сравниваешь НЕ со строкой, а с константой, то есть эта проверка эквивалентна if($_GET['edit']==0)

    В третьих:
    PHP:
    $form "INSERT INTO news VALUES ('$num', '$name', '$text', '$text2', '$ip');"
    mysql_query($form);
    if(
    $form
    $form - это заданная строка и ты проверяешь задал ли ты ее, а не выполнил ли ты запрос с ней. И так же в других местах кода

    В-четвертых, Читать прикрепленную в этом разделе тему про анти-SQLinj
     
    _________________________
    #7278 Gifts, 6 Jan 2009
    Last edited: 6 Jan 2009
    1 person likes this.
  19. oRb

    oRb Elder - Старейшина

    Joined:
    9 May 2008
    Messages:
    294
    Likes Received:
    582
    Reputations:
    256
    Имя неопределенной константы преобразуется к строковому типу
    PHP:
    <?
    echo 
    news;
    ?>
    А так все остальное ты верно сказал.
     
    1 person likes this.
  20. -m0rgan-

    -m0rgan- Elder - Старейшина

    Joined:
    29 Sep 2008
    Messages:
    514
    Likes Received:
    170
    Reputations:
    17
    Во)
    Вснм спасибо!
    Это мну очень сильно проглючило(((
    P.S.:Нет, я не обнаную,это весь пхп код, а конфиг я вставлял в начале хтмл кода)
     
Thread Status:
Not open for further replies.