Перейти к содержимому

Реферальная программа Мегаплана


Не выводится текст через оператор printf

#11 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143
0

Отправлено 23 Январь 2012 - 23:50

matroskin8, спасибо большое за содействие) А можешь объяснить почему не нужно использовать команду $myrow2 = mysql_fetch_array($result2); ... она же выводит значения из базы в массив.

Пожалуйста :blink:
Собственно, yury объяснил почему нужно использовать ее преимущественно в цикле. Попытаюсь объяснить еще от себя. Вне цикла эту функцию используют только, когда получают 1 ряд из БД. В принципе, логично, что для получения одного ряда цикл и не нужен. Теперь почему не нужно использовать эту функцию вне цикла. Функция, будучи вызванной, обрабатывает 1 ряд результата запроса. При этом курсор результата запроса передвигается на 1 позицию. На примере... Из БД запросом мы получили, к примеру, 3 ряда. Теперь вот что произойдет, если мы используем дважды функцию mysql_fetch_array() - вне цикла и внутри него:
$myrow2 = mysql_fetch_array($result2); // здесь обработался ряд 1 запроса и курсор перешел на второй ряд
while ($myrow2 = mysql_fetch_array($result2)){
// здесь функция вызывается оставшиеся 2 раза, обрабатывая оставшиеся ряды - 2-ой и 3-ий
}

Таким образом, мы "теряем" 1 строку результата запроса. Функция ее обработала вне цикла, но ведь Вы ее нигде не выводите. Присмотритесь внимательно - Вы заметите, что с изначальным Вашим кодом не выводится 1 строка из БД.
  • 0


#12 Kuchuluk

Kuchuluk
    Topic Starter
  • Пользователь
  • 315 сообщений
  • Репутация: 5

Отправлено 24 Январь 2012 - 16:03

yury, понятно, спасибо. какой справочник по php для начинающих лучше прочитать?
  • 0

#13 yury

yury
  • Пользователь
  • 629 сообщений
  • Репутация: 176

Отправлено 24 Январь 2012 - 18:44

Kuchuluk
Ну, например, php.su — хороший справочник.
Там и собственно справочник по php есть (где можно подсматривать правила языка и описания разных функций) и уроки для изучения а ля учебник.


  • 0

#14 Kuchuluk

Kuchuluk
    Topic Starter
  • Пользователь
  • 315 сообщений
  • Репутация: 5

Отправлено 24 Январь 2012 - 22:30

Таким образом, мы "теряем" 1 строку результата запроса. Функция ее обработала вне цикла, но ведь Вы ее нигде не выводите. Присмотритесь внимательно - Вы заметите, что с изначальным Вашим кодом не выводится 1 строка из БД.


точно :blink: спасибо большое!
  • 0

#15 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 25 Январь 2012 - 16:44

Пожалуйста :blink:
  • 0


#16 Kuchuluk

Kuchuluk
    Topic Starter
  • Пользователь
  • 315 сообщений
  • Репутация: 5

Отправлено 28 Январь 2012 - 20:06

matroskin8, yury, ребята, теперь у меня проблема с выводом комментариев к заметке. код реализации комментариев такой
<?php 
printf ("<p class='post_title2'>%s</p><p class='post_add'>Автор: %s</p><p class='post_add'>Дата: %s</p>%s<p class='post_view'>Просмотров: %s</p>",$myrow["title"],$myrow["author"],$myrow["date"],$myrow["text"],$myrow["view"]);
		
echo "<p>Комментарии к этой заметке:</p>";

$result3 = mysql_query ("SELECT * FROM comments WHERE post='$_GET[id]'",$db);
if (mysql_num_rows($result3) > 0) 
{

while ($myrow3 = mysql_fetch_array($result3)); 
{
printf ("<p>Комментарий добавил: %s</p><p>Дата: %s</p><p>%s</p>",$myrow3["author"],$myrow3["date"],$myrow3["text"]);
}}
		
		
		?>

выводится только первая строчка - "Комментарий добавил", а дата и сам текст комментария не вывадятся. В запросе к таблице из БД $result3 = mysql_query ("SELECT * FROM comments WHERE post='$_GET[id]'",$db) пробовал и без глобальной переменной писать, то есть просто $id, не помогает. Посмотрите пожалуйста.
  • 0

#17 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 28 Январь 2012 - 20:50

Числовой тип не обязательно и даже нежелательно заключать в запросе в кавычки. Вот так правильно:
$result3 = mysql_query ("SELECT * FROM comments WHERE post = ".$_GET['id'],$db);

А еще лучше так:
$id = (int)$_GET['id'];
$result3 = mysql_query ("SELECT * FROM comments WHERE post = $id",$db);

  • 0


#18 Kuchuluk

Kuchuluk
    Topic Starter
  • Пользователь
  • 315 сообщений
  • Репутация: 5

Отправлено 29 Январь 2012 - 13:16

matroskin8, не помогло, все равно не выводится. причем не выводится на всех заметках кроме одной, хотя создаются все они из одного файла обработки.
  • 0

#19 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 29 Январь 2012 - 16:21

Значит отлаживайте код, смотрите выбирается ли из БД вообще что-то, ищите ошибку... например так:
$id = (int)$_GET['id'];
$result3 = mysql_query ("SELECT * FROM comments WHERE post = $id") or die(mysql_error());

  • 0


#20 Kuchuluk

Kuchuluk
    Topic Starter
  • Пользователь
  • 315 сообщений
  • Репутация: 5

Отправлено 30 Январь 2012 - 18:26

matroskin8, попробовал проверить заносится ли в переменную что-либо с помощью функции var_dump(). Поставил ее в конце скрипта после вывода цикла. Сначала проверил переменную id, показывает правильный результат. Потом проверил переменную myrow3, выдает NULL. При проверке переменной result3 выдает такой результат - resource(8) of type (mysql result).
Не мог бы ты пояснить - NULL значит, что в переменную ничего не попадает, да? И что значит resource(8) of type (mysql result) ?
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru