Помощник
|
Не выводится текст через оператор printf |
Kuchuluk
|
Сообщение
#1
|
||
|
|
||
|
|||
matroskin8 |
17.1.2012, 14:18;
Ответить: matroskin8
Сообщение
#2
|
|
Код можно было запостить, чтобы не писать его с нуля... хотя... такой код нужно действительно переписывать... Ошибок 2:
1) здесь: $myrow["$id"] - знака доллара в ключе быть не должно. Правильно так: $myrow['id']. Для title, соответственно, аналогично. 2) глобальная ошибка: if{код}... а условие куда делось? Так нужно: if(условие){код} Странно, что PHP ошибок не выдает с таким кодом... скорее всего, показ ошибок попросту отключен. Ну и сам запрос и цикл лучше организовать так: [php]$query = "SELECT title, id FROM lessons"; $res = mysql_query($query) or die(mysql_error()); while($row = mysql_fetch_assoc($res)){ echo "<p><a href='edit_lesson.php?id={$row['id']}'>{$row['title']}</a></p>"; }[/php] Цикл do{} while() здесь абсолютно не нужен, почитайте в книжках, ради интереса, когда он используется. Поблагодарили: (0) |
|
|
Kuchuluk
|
Сообщение
#3
|
|
спасибо вам большое! исправил и как вы писали и заработало. но теперь возникает другая ошибка Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in Z:\home\localhost\www\phpsite\admin\edit_lesson.php on line 41. Т. е. список с названием уроков выходит, но когда нажимаю по нужному уроку, чтобы вывести из таблицы БД информацию по этому уроку, но выводится эта ошибка и форма с пустыми полями.
[img]http://iho.kz/p/8f52bc2e33c8e8951259db6bddb9d6e3.jpeg[/img] |
|
|
matroskin8 |
17.1.2012, 23:53;
Ответить: matroskin8
Сообщение
#4
|
|
Пожалуйста. Только я же просил выкладывать код, а не скрин кода.
(Kuchuluk) исправил и как вы писали и заработало Неправда Опять-таки используете цикл do{}while()... забудьте про него и вспоминайте очень редко. Этот цикл может понадобится в 1 случае из 100. Ну и HEREDOC-синтаксис также рекомендовал бы использовать крайне редко. Теперь по самой ошибке. Ошибка говорит, что в функцию mysql_fetch_array() попадает что угодно, но только не ресурс. В Вашем случае туда вообще ничего не попадает. Почему? Потому что в запросе идет обращение к переменной $id напрямую. На самом деле к этой переменной нужно обращаться через массив $_GET. Так правильно: [php]<?php $id = (int)$_GET['id']; // вот где ошибка... сначала нужно получить переменную из массива $_GET... при этом обязательно привести ее к ожидаемому типу $query = "SELECT * FROM lessons WHERE id = $id"; $result = mysql_query($query) or die(mysql_error()); // не забываем проверять выполнен ли запрос $myrow = mysql_fetch_assoc($result); // вместо mysql_fetch_array() лучше использовать mysql_fetch_assoc()... для работы ведь достаточно только ассоциативного массива, так зачем получать 2 массива вместо одного? /* ну и дальше уже работайте с полученными данными*/ ?>[/php] |
|
|
Kuchuluk
|
Сообщение
#5
|
|
так если не использовать цикл do-while и функцию HEREDOC, чем их можно заменить?
|
|
|
HapkomaH |
18.1.2012, 18:13;
Ответить: HapkomaH
Сообщение
#6
|
|
Вместо
[php]$myrow=mysql_fetch_array($result); do{ // что-то } while ($myrow=mysql_fetch_array($result));[/php] используйте [php]while ($myrow=mysql_fetch_assoc($result)){ // что-то }[/php] Результат тот же, кода меньше. То, что вы использовали, было популярно лет 10 назад среди начинающих программистов Вместо HEREDOC можете использовать внедренный html-код или обычный echo. Опять же тот же результат. Поблагодарили: (0) |
|
|
Kuchuluk
|
Сообщение
#7
|
|
HapkomaH, matroskin8, посмотрите пожалуйста еще раз. теперь вроде все правильно написал, но опять не выводится нужный текст, а просто путое место там, где он должен выводиться.
CODE <?php
$id = (int)$_GET['id']; $result2 = mysql_query("SELECT * FROM categories",$db); if (!$result2) { echo "<p>Запрос на выборку из базы не прошел. Напишите об этом администратору admin@havebook.ru <br> <strong>Код ошибки:</strong></p>"; exit (mysql_error()); } if (mysql_num_rows($result2) > 0) { $myrow2 = mysql_fetch_array($result2); while ($myrow2 = mysql_fetch_array($result2)); { printf ("<p><a class='nav_link' href='view_cat.php?cat=%s'>%s</a></p>", $myrow2["id"], $myrow2["title"]);} } else { echo "<p>Информация по запросу не может быть извлечена, в таблице нет записей.</p>"; exit(); } ?> |
|
|
matroskin8 |
22.1.2012, 23:25;
Ответить: matroskin8
Сообщение
#8
|
|
Строка $myrow2 = mysql_fetch_array($result2); вне цикла не нужна. Мало того, она даже вредна в контексте Вашего кода.
После условия цикла точка с запятой не нужна: while ($myrow2 = mysql_fetch_array($result2)); - именно из-за нее ничего и не выводится. Где-то так должно быть: [php]if (mysql_num_rows($result2) > 0){ while ($myrow2 = mysql_fetch_assoc($result2)){ printf ("<p><a class='nav_link' href='view_cat.php?cat=%s'>%s</a></p>", $myrow2["id"], $myrow2["title"]); } }else{ echo "<p>Информация по запросу не может быть извлечена, в таблице нет записей.</p>"; exit(); }[/php] Поблагодарили: (0) |
|
|
Kuchuluk
|
Сообщение
#9
|
|
matroskin8, спасибо большое за содействие) А можешь объяснить почему не нужно использовать команду $myrow2 = mysql_fetch_array($result2); ... она же выводит значения из базы в массив.
|
|
|
yury_mw |
23.1.2012, 23:02;
Ответить: yury_mw
Сообщение
#10
|
|
matroskin8, спасибо большое за содействие) А можешь объяснить почему не нужно использовать команду $myrow2 = mysql_fetch_array($result2); ... она же выводит значения из базы в массив. Kuchuluk, команду $myrow2 = mysql_fetch_array($result2); использовать нужно, но в правильном месте. Она считывает _одну_строку_ из таблицы базы данных в переменную $myrow2 (ну в добавок команда mysql_fetch_array считанную строку еще и оформляет ввиде ассоциативного и численного массивов). Вообще цикл [php]while ($row = mysql_fetch_array($result)){ ... }[/php]означает примерно следующее (и, кстати, буквально так и переводится на русский язык с английского): Пока можно считать в переменную $row (по-русски "строка") строку из таблицы базы данных (т.е. выполнить команду $row = mysql_fetch_array($result)), делаем это в цикле и выполняем с прочитанными строками действия, указанные в теле цикла. А как только прочитать очередную строку не получится (т.е. попытка положить в очередной раз в переменную $row строку из БД завершится неудачей, что на практике означает, что мы добрались до конца таблицы) цикл пора завершать. Поэтому, чтобы обработать всю таблицу, при этом не забывая проверять не закончилась ли наша таблица, эту команду надо выполнять в цикле, а не за его пределами. Поблагодарили: (0) |
|
|
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
Bropush - Твой бро в монетизации через Push-уведомления | 30 | bropush | 11848 | 16.4.2024, 18:19 автор: bropush |
|
SEO-текст на главной странице сайта и в категориях | 5 | boltuk | 1429 | 26.3.2024, 21:43 автор: c4p1t4l15t |
|
Через какой браузер и как можно найти в кэшэ браузера видео | 10 | Room | 2370 | 23.3.2024, 7:41 автор: Room |
|
Можно ли в старый SEO текст вместо старого домена поставить новый? | 3 | Tutich | 1219 | 22.3.2024, 14:47 автор: Tutich |
|
Продвижение сайта через краудинг с поддержкой Полный комплекс мер по продвижению сайта |
0 | alexey | 1014 | 22.8.2023, 16:33 автор: alexey |
Текстовая версия | Сейчас: 24.4.2024, 8:43 |