X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

5 страниц V   1 2 3 4 5 >
Открыть тему
Тема закрыта
> Не выводится текст через оператор printf
Kuchuluk
Kuchuluk
Topic Starter сообщение 16.1.2012, 22:21; Ответить: Kuchuluk
Сообщение #1


[img]http://iho.kz/p/2af9598093555b218dbb4a145848fc50.jpeg[/img]

Люди посмотрите пожалуйста код. Вроде ошибок не выдает, но и текст, который должен выводиться, не выводится, а просто пусто.
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
matroskin8
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
Kuchuluk
Topic Starter сообщение 17.1.2012, 22:03; Ответить: 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
matroskin8
сообщение 17.1.2012, 23:53; Ответить: matroskin8
Сообщение #4


Пожалуйста. Только я же просил выкладывать код, а не скрин кода.
(Kuchuluk)
исправил и как вы писали и заработало

Неправда :blink: Опять-таки используете цикл 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
Kuchuluk
Topic Starter сообщение 18.1.2012, 17:05; Ответить: Kuchuluk
Сообщение #5


так если не использовать цикл do-while и функцию HEREDOC, чем их можно заменить?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
HapkomaH
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 назад среди начинающих программистов :blink: Вместо HEREDOC можете использовать внедренный html-код или обычный echo. Опять же тот же результат.


Поблагодарили: (0)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Kuchuluk
Kuchuluk
Topic Starter сообщение 22.1.2012, 22:12; Ответить: 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
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
Kuchuluk
Topic Starter сообщение 23.1.2012, 18:56; Ответить: Kuchuluk
Сообщение #9


matroskin8, спасибо большое за содействие) А можешь объяснить почему не нужно использовать команду $myrow2 = mysql_fetch_array($result2); ... она же выводит значения из базы в массив.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
yury_mw
yury_mw
сообщение 23.1.2012, 23:02; Ответить: yury_mw
Сообщение #10


(Kuchuluk @ 23.1.2012, 18:56) *
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)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
5 страниц V   1 2 3 4 5 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Горячая тема (нет новых ответов) Тема имеет прикрепленные файлыBropush - Твой бро в монетизации через Push-уведомления
30 bropush 11816 16.4.2024, 18:19
автор: bropush
Открытая тема (нет новых ответов) SEO-текст на главной странице сайта и в категориях
5 boltuk 1426 26.3.2024, 21:43
автор: c4p1t4l15t
Открытая тема (нет новых ответов) Через какой браузер и как можно найти в кэшэ браузера видео
10 Room 2312 23.3.2024, 7:41
автор: Room
Открытая тема (нет новых ответов) Можно ли в старый SEO текст вместо старого домена поставить новый?
3 Tutich 1215 22.3.2024, 14:47
автор: Tutich
Открытая тема (нет новых ответов) Продвижение сайта через краудинг с поддержкой
Полный комплекс мер по продвижению сайта
0 alexey 1011 22.8.2023, 16:33
автор: alexey


 



RSS Текстовая версия Сейчас: 20.4.2024, 16:59
Дизайн