LINUX.ORG.RU

Почему один и тот же алгоритм не работает?

 


0

1

Добрый вечер.

По немного изучаю ПХП, и тут столкнулся с непонятной проблемой. Есть два куска кода:

Код 1:

while ($row = $sql->fetch_assoc())
{
	echo "\t\t\t<h2>".$row["book_title"]."</h2>\n
	<p>".$row["book_descript"]."</p>\n
	<p>".$row["cat_name"]."</p>\n
	<p>".$row["book_year"]."</p>";
	$book_id = $row["id"];
}

Код 2:

$row = $sql->fetch_assoc();
$page_title = $row["book_title"];
include $_SERVER['DOCUMENT_ROOT'].'/theme/top.php';
do {
	echo "\t\t\t<h2>".$row["book_title"]."</h2>\n
	<p>".$row["book_descript"]."</p>\n
	<p>".$row["cat_name"]."</p>\n
	<p>".$row["book_year"]."</p>";
	$book_id = $row["id"];
} while ($row = $sql->fetch_assoc());

Вопрос? Почему первый отображает результат, в то время как второй выполняет только первый fetch_assoc, а из самого цикла результата нет?

Может в include где-то незаметно вылетает?

crowbar ()

потому что fetch_assoc нужно выполнять в цикле, так как один вызов - одна строка

r0ck3r ★★★★★ ()

По немного изучаю ПХП

Начни правильно и используй шаблоны ну и http://www.phptherightway.com/

include $_SERVER['DOCUMENT_ROOT'].'/theme/top.php';

Не используй $_SERVER['DOCUMENT_ROOT']
Только __DIR__ !!! Можно в начале скрипта обьявить константу и уже ее использовать.

kiotoze ★★★★ ()
Ответ на: комментарий от r0ck3r

То есть, в первом случае, пока row может присвоить fetch_assoc - продолжить цикл, иначе выход из цикла. Во втором варианте row получает значение первой строки и все

r0ck3r ★★★★★ ()
Ответ на: комментарий от r0ck3r

В втором варианте тоже цикл. Или его непременно нужно в while-цикле выполнять? Странный этот php.

crowbar ()
Ответ на: комментарий от r0ck3r

Код работает правильно, просто в include тоже был запрос к БД, с тем же именем переменной ($row). Во втором случае $row получает значение первой строки, обрабатывает её, и, если есть еще значение, получает следующее.

massive ()
Ответ на: комментарий от massive

в include тоже был запрос к БД, с тем же именем переменной ($row)

fcplm.jpg

А inсlude ты делаешь после fetch_assoc потому что используешь первую строку в top.php? Трындец.

А ещё можно функции использовать. И require вместо include.

Tanger ★★★★★ ()
Ответ на: комментарий от massive

Ну, дык. Учимся.

Совет: не учись программировать на php. Как там про perl говорилось?

1. Известно, что на perl можно писать хорошо.
2. Известно, что так никто не делает.

На php тоже.

Tanger ★★★★★ ()
Ответ на: комментарий от crowbar

нет, тип цикла не важен. Главное выполнить его столько же раз, сколько строк в выдаче.

r0ck3r ★★★★★ ()
Ответ на: комментарий от massive

Да, извини, не увидел

while ($row = $sql->fetch_assoc()); 
в конце

r0ck3r ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.