Нужна ваша помощь...

Discussion in 'PHP' started by asis, 23 Aug 2018.

  1. asis

    asis New Member

    Joined:
    12 Apr 2018
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    Подскажите пожалуйста что не так. php только учу и многого не знаю. Пишет вот такую ошибку: Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in N:\home\localhost\www\phpsite\admin\edit_lesson.php on line 48

    Как ее исправить?(

    <?php include("blocks/bd.php");?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>


    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

    <title>Страница изменения урока.</title>
    <link href="style.css" rel="stylesheet" type="text/css">
    </head>

    <body><table width="690" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#ffffff" class="main_border">


    <?php include("blocks/header.php"); ?>

    <tr>
    <td bgcolor="#FFFFFF"><table width="690" border="0">
    <tr>


    <?php include("blocks/lefttd.php"); ?>

    <td valign="top">


    <?php

    if(!isset($_GET['id']))
    {
    $result = mysql_query ("SELECT title,id FROM lessons");
    $myrow = mysql_fetch_array ($result);

    do
    {
    printf ("<p><a href='edit_lesson.php?id=%s'>%s</a></p>",$myrow["id"],$myrow["title"]);
    }

    while ($myrow = mysql_fetch_array ($result));

    }

    else
    {

    $result = mysql_query ("SELECT * FROM lessons WHERE id=$id");
    $myrow = mysql_fetch_array ($result); Вот эта строчка. Тут ошибка.

    print
    <<<HERE


    <form name="form1" method="post" action="update_lesson.php">
    <p>
    <label for="title">Введите название урока<br>
    </label>
    <input value="$myrow[title]" type="text" name="title" id="title">
    <br>
    <label for="meta_d">Введите краткое описание урока<br>
    </label>
    <input value="$myrow[meta_d]" type="text" name="meta_d" id="meta_d">
    <br>
    <label for="meta_k">Введите ключевые слова</label>
    <br>
    <input value="$myrow[meta_k]" type="text" name="meta_k" id="meta_k">
    <br>
    <label for="date">Введите дату добавления урока</label>
    <br>
    <input value="$myrow[date]" name="date" type="text" id="date" value="2018-08-20">
    <br>
    <label for="description">Введите краткое описание урока с тегами абзацев</label>
    <textarea name="description" id="description" cols="40" rows="5">$myrow[description]</textarea>
    <br>
    <label for="text">Введите полный текст урока с тегами</label>
    <textarea name="text" id="text" cols="40" rows="20">$myrow[text]</textarea>
    <br>
    <label for="author">Введите автора урока</label>
    <br>
    <input value="$myrow[author]" type="text" name="author" id="author">
    <br>

    <input name="id" type="hidden" value="$myrow[id]">

    <br>
    <input type="submit" name="submit" id="submit" value="Сохранить изменения">
    <br>
    </p>
    </form>


    HERE;

    }

    ?>


    </td>
    </tr>
    </table></td>
    </tr>


    <?php include ("blocks/footer.php"); ?>

    </table>

    </body>
    </html>
     
    #1 asis, 23 Aug 2018
    Last edited: 23 Aug 2018
  2. barnaki

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

    Joined:
    2 Nov 2008
    Messages:
    676
    Likes Received:
    140
    Reputations:
    4
    ошибка скорее всего говорит о том что функция mysql_fetch_array deprecated
    это значит что функция устарела . даже mysqli уже устарели.
    используй современные подключения
    http://php.net/manual/ru/book.mysql.php
    и на будущее пиши ошибку которую оно выдает. мы ж не экстрасенсы :).
    вот по твоей функции
    http://php.net/manual/ru/function.mysql-fetch-array.php
     
  3. crlf

    crlf Green member

    Joined:
    18 Mar 2016
    Messages:
    683
    Likes Received:
    1,513
    Reputations:
    460
    Запрос не отрабатывает, в итоге имеем булевое false, на что пых и ругается. Нужно проверить подключение и удостовериться, что выборка происходит из нужной базы.
     
  4. joelblack

    joelblack Reservists Of Antichat

    Joined:
    6 Jul 2015
    Messages:
    244
    Likes Received:
    450
    Reputations:
    145
    На дворе 2018, mysql_* еще с 5.5 объявили устаревшим, а из 7 вообще убрали.Пора бы перейти на mysqli
     
  5. crlf

    crlf Green member

    Joined:
    18 Mar 2016
    Messages:
    683
    Likes Received:
    1,513
    Reputations:
    460
    С чего вы решили, что он разработчик? По моему, ему просто код стартануть нужно. Вы предлагаете человеку который, пока ещё, не может разобраться в просты ситуациях, переписать чей-то там код на современный лад? Тогда уж и шаблонизатор прикрутить, а не эту кашу из пыховставок смотреть.

    На deprecated так и ругается.
     
  6. joelblack

    joelblack Reservists Of Antichat

    Joined:
    6 Jul 2015
    Messages:
    244
    Likes Received:
    450
    Reputations:
    145
    В том то и дело, что он изучает язык. Я считаю,что изучать все таки стоит с более актуальных вещей. Он сейчас привыкнет использовать mysql, а потом столкнется с 7 и у него вывалится целая куча ошибок. На данный момент если не ошибаюсь уже 5.6 поддерживается на уровне исправлений в безопасности. Переписывать код на стадии изучения конечно нет смысла, но вот найти что то актуальное и учится на нем я не вижу каких либо проблем.
     
  7. crlf

    crlf Green member

    Joined:
    18 Mar 2016
    Messages:
    683
    Likes Received:
    1,513
    Reputations:
    460
    По всей видимости, проблемы есть и стоит указать на какие материалы опираться давая подобные советы.

    Новичку вообще ни о чём не говорит.
     
  8. joelblack

    joelblack Reservists Of Antichat

    Joined:
    6 Jul 2015
    Messages:
    244
    Likes Received:
    450
    Reputations:
    145
    По поводу советов я согласен, я в принципе и дал один из таких советов на будущее, может не в особо информативной форме. Но опять же, если зайти на страницу той же функции:
    http://php.net/manual/ru/function.mysql-fetch-array.php
    А я считаю что на стадии изучения документация должна быть вторым домом, то там располагается именно в самом начале достаточно заметный варнинг,с предупреждениями,что это не просто устаревшая функция, а я ее уже вообще нет в php, и не просто не рекомендуется,а прямым текстом говорят "Используйте mysqli".
     
  9. miketomlin

    miketomlin New Member

    Joined:
    2 Dec 2013
    Messages:
    15
    Likes Received:
    3
    Reputations:
    0
    Выкиньте учебник на свалку. Цикл do-while – известно, чья школа; древнее расширение для работы с БД, запросы вперемешку с разметкой, отсутствие проверок результатов запросов и т.п. Последнее непосредственно связано с вашей проблемой. Гляньте на код из моих статей:
    http://gency.ru/list-articles
    http://gency.ru/pagination
     
    b3 likes this.
  10. SimpleC

    SimpleC New Member

    Joined:
    3 Sep 2018
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    У вас тут что ни на есть классическая SQL уязвимость. Советую прочитать доку
    http://php.net/manual/ru/security.database.sql-injection.php
    Так же, использование mysql/mysqli пригодно исключительно для обучения. Очень советую обратить внимание на PDO: http://php.net/manual/ru/book.pdo.php
    Хотя бы так. Не нужно приучиваться к плохому.
     
  11. miketomlin

    miketomlin New Member

    Joined:
    2 Dec 2013
    Messages:
    15
    Likes Received:
    3
    Reputations:
    0
    А ничего, что большинство наших сайтов и сервисов написано с использованием mysqli? Причем даже тех, в которых не преследовалась цель кого-то обучить программированию. Советую выбирать используемые библиотеки/расширения в соответствии с принципом целесообразности. А не привлекать монстров для охоты на воробьев.
     
  12. SimpleC

    SimpleC New Member

    Joined:
    3 Sep 2018
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    Дилетанты могут писать что угодно с использованием чего угодно. А прикрывать незнание - принципом целесообразности не надо.
     
  13. miketomlin

    miketomlin New Member

    Joined:
    2 Dec 2013
    Messages:
    15
    Likes Received:
    3
    Reputations:
    0
    Да уж, куда нам, дилетантам, до таких гуру, как вы. Может, просветите меня на предмет нескольких достоверных источников, подтверждающих вашу сакральную мысль «mysqli пригодно исключительно для обучения».
     
  14. miketomlin

    miketomlin New Member

    Joined:
    2 Dec 2013
    Messages:
    15
    Likes Received:
    3
    Reputations:
    0
    Или эта информация была получена вами напрямую из космоса?
     
  15. SimpleC

    SimpleC New Member

    Joined:
    3 Sep 2018
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    Дружище, тебя в гугле забанили? Найди различия PDO и Mysqli, и сразу все поймешь. Взаимодействовать с БД можно хоть через сокеты. Только зачем забивать гвозди микроскопом, когда есть молоток? Есть нормальный инструмент, с prepared statement и кучей драйверов баз данных помимо mysql из коробки. Нет, не хочу использовать этот инструмент. Хочу использовать дубину. А если я захочу использовать PostgreSQL, то перепишу весь код заново.
     
    #15 SimpleC, 5 Sep 2018
    Last edited: 5 Sep 2018
  16. miketomlin

    miketomlin New Member

    Joined:
    2 Dec 2013
    Messages:
    15
    Likes Received:
    3
    Reputations:
    0
    Дружище, мне незачем для этого использовать гугл, потому что все различия я прекрасно знаю и без него. А тебе походу не помешает им воспользоваться, чтобы узнать к примеру, что «prepared statement» поддерживаются и в mysqli. А если я знаю, что не «захочу использовать PostgreSQL»? А если даже захочу, то в чем трудность задействовать для этого собственную легкую обертку?
     
  17. SimpleC

    SimpleC New Member

    Joined:
    3 Sep 2018
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    Проблема, наверное в том, что пока дилетант пилит собственные обертки для оберток на обертки, нормальный программист не будет изобретать велосипеды и возьмет что-то готовое, протестированное и отлаженное до него, спасибо open source. Тот же PDO или какая-либо ORM. Ну а ты можешь пилить обертки, использовать mysqli, и вообще делать что тебе заблагорассудится, благо PHP изначально дает возможность прострелить себе ногу как угодно, и никоим образом прослойку между монитором и стулом не ограничивает в этом. И это - главная причина по которой в сети так много шуток про макак-пыха-кодеров. Потому-что PHP дает им существовать.
    На этом мой спор с тобой окончен.
     
  18. barnaki

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

    Joined:
    2 Nov 2008
    Messages:
    676
    Likes Received:
    140
    Reputations:
    4
    господа везде свои плюсы и минусы. и в pdo и и в mysqli тоже. pdo отупляет и большинство тех кто приходит на собес не могут после него на нативном sql запрос написать. и я уже не говорю о том что при слове триггер у них глаз дергаться начинает. mysqli плох тем что он хотя бы устарел. и не стоит развиваться привычки с ним работать потому что его скоро не будет. короче не стоит холиварить. на вкус и цвет фломастеры разные.
     
    crlf likes this.
  19. SimpleC

    SimpleC New Member

    Joined:
    3 Sep 2018
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    А чем так разительно синтаксис запросов к базе отличается у PDO, что потом на нативном sql не может никто запрос написать? И чем он отупляет то? Я бы более или менее согласился про то, что ORM отупляют, т.к. это относительно высокая абстракция над чистым sql, и без знания матчасти провоцирует писать неоптимизированное дерьмо. Сколько запросов с использованием того же юишного ActiveRecord встречается, где можно все ускорить в десятки раз банальным limit(1), потому-что findOne(), ВНЕЗАПНО, limit(1) под капотом не делает. Да и mysqli не устарел, там есть ООП интерфейс, все нормально. Просто его оправданно использовать под специфичные задачи.
    В общем, я вообще не понял, к чему ты это все.