Подскажите пожалуйста что не так. 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>
ошибка скорее всего говорит о том что функция mysql_fetch_array deprecated это значит что функция устарела . даже mysqli уже устарели. используй современные подключения http://php.net/manual/ru/book.mysql.php и на будущее пиши ошибку которую оно выдает. мы ж не экстрасенсы . вот по твоей функции http://php.net/manual/ru/function.mysql-fetch-array.php
Запрос не отрабатывает, в итоге имеем булевое false, на что пых и ругается. Нужно проверить подключение и удостовериться, что выборка происходит из нужной базы.
С чего вы решили, что он разработчик? По моему, ему просто код стартануть нужно. Вы предлагаете человеку который, пока ещё, не может разобраться в просты ситуациях, переписать чей-то там код на современный лад? Тогда уж и шаблонизатор прикрутить, а не эту кашу из пыховставок смотреть. На deprecated так и ругается.
В том то и дело, что он изучает язык. Я считаю,что изучать все таки стоит с более актуальных вещей. Он сейчас привыкнет использовать mysql, а потом столкнется с 7 и у него вывалится целая куча ошибок. На данный момент если не ошибаюсь уже 5.6 поддерживается на уровне исправлений в безопасности. Переписывать код на стадии изучения конечно нет смысла, но вот найти что то актуальное и учится на нем я не вижу каких либо проблем.
По всей видимости, проблемы есть и стоит указать на какие материалы опираться давая подобные советы. Новичку вообще ни о чём не говорит.
По поводу советов я согласен, я в принципе и дал один из таких советов на будущее, может не в особо информативной форме. Но опять же, если зайти на страницу той же функции: http://php.net/manual/ru/function.mysql-fetch-array.php А я считаю что на стадии изучения документация должна быть вторым домом, то там располагается именно в самом начале достаточно заметный варнинг,с предупреждениями,что это не просто устаревшая функция, а я ее уже вообще нет в php, и не просто не рекомендуется,а прямым текстом говорят "Используйте mysqli".
Выкиньте учебник на свалку. Цикл do-while – известно, чья школа; древнее расширение для работы с БД, запросы вперемешку с разметкой, отсутствие проверок результатов запросов и т.п. Последнее непосредственно связано с вашей проблемой. Гляньте на код из моих статей: http://gency.ru/list-articles http://gency.ru/pagination
У вас тут что ни на есть классическая SQL уязвимость. Советую прочитать доку http://php.net/manual/ru/security.database.sql-injection.php Так же, использование mysql/mysqli пригодно исключительно для обучения. Очень советую обратить внимание на PDO: http://php.net/manual/ru/book.pdo.php Хотя бы так. Не нужно приучиваться к плохому.
А ничего, что большинство наших сайтов и сервисов написано с использованием mysqli? Причем даже тех, в которых не преследовалась цель кого-то обучить программированию. Советую выбирать используемые библиотеки/расширения в соответствии с принципом целесообразности. А не привлекать монстров для охоты на воробьев.
Дилетанты могут писать что угодно с использованием чего угодно. А прикрывать незнание - принципом целесообразности не надо.
Да уж, куда нам, дилетантам, до таких гуру, как вы. Может, просветите меня на предмет нескольких достоверных источников, подтверждающих вашу сакральную мысль «mysqli пригодно исключительно для обучения».
Дружище, тебя в гугле забанили? Найди различия PDO и Mysqli, и сразу все поймешь. Взаимодействовать с БД можно хоть через сокеты. Только зачем забивать гвозди микроскопом, когда есть молоток? Есть нормальный инструмент, с prepared statement и кучей драйверов баз данных помимо mysql из коробки. Нет, не хочу использовать этот инструмент. Хочу использовать дубину. А если я захочу использовать PostgreSQL, то перепишу весь код заново.
Дружище, мне незачем для этого использовать гугл, потому что все различия я прекрасно знаю и без него. А тебе походу не помешает им воспользоваться, чтобы узнать к примеру, что «prepared statement» поддерживаются и в mysqli. А если я знаю, что не «захочу использовать PostgreSQL»? А если даже захочу, то в чем трудность задействовать для этого собственную легкую обертку?
Проблема, наверное в том, что пока дилетант пилит собственные обертки для оберток на обертки, нормальный программист не будет изобретать велосипеды и возьмет что-то готовое, протестированное и отлаженное до него, спасибо open source. Тот же PDO или какая-либо ORM. Ну а ты можешь пилить обертки, использовать mysqli, и вообще делать что тебе заблагорассудится, благо PHP изначально дает возможность прострелить себе ногу как угодно, и никоим образом прослойку между монитором и стулом не ограничивает в этом. И это - главная причина по которой в сети так много шуток про макак-пыха-кодеров. Потому-что PHP дает им существовать. На этом мой спор с тобой окончен.
господа везде свои плюсы и минусы. и в pdo и и в mysqli тоже. pdo отупляет и большинство тех кто приходит на собес не могут после него на нативном sql запрос написать. и я уже не говорю о том что при слове триггер у них глаз дергаться начинает. mysqli плох тем что он хотя бы устарел. и не стоит развиваться привычки с ним работать потому что его скоро не будет. короче не стоит холиварить. на вкус и цвет фломастеры разные.
А чем так разительно синтаксис запросов к базе отличается у PDO, что потом на нативном sql не может никто запрос написать? И чем он отупляет то? Я бы более или менее согласился про то, что ORM отупляют, т.к. это относительно высокая абстракция над чистым sql, и без знания матчасти провоцирует писать неоптимизированное дерьмо. Сколько запросов с использованием того же юишного ActiveRecord встречается, где можно все ускорить в десятки раз банальным limit(1), потому-что findOne(), ВНЕЗАПНО, limit(1) под капотом не делает. Да и mysqli не устарел, там есть ООП интерфейс, все нормально. Просто его оправданно использовать под специфичные задачи. В общем, я вообще не понял, к чему ты это все.