Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Не выполняется цикл в теле функции

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
viperdev
Отправлено: 29 Июля, 2010 - 13:22:56
Post Id


Новичок


Покинул форум
Сообщений всего: 54
Дата рег-ции: Янв. 2010  


Помог: 0 раз(а)




Добрый день уважаемые!
Есть такая функция:
PHP:
скопировать код в буфер обмена
  1.  
  2. function banners (){
  3. global $dbresult;
  4. while($row=mysql_fetch_array($dbresult))
  5. {
  6. return ("<a href=".$row['link']."><img src=".$row['img']." alt=".$row['text']." width=\"175\" border=\"0\" /></a><br />");
  7. };
  8. }
  9. $banners_new = banners ();
  10. echo $banners_new;
  11.  

Внутри нее как видно есть цикл while.
Результат выполнения одна ссылка хотя данных в таблице в бд на две ссылки.
За пределами функции цикл:
PHP:
скопировать код в буфер обмена
  1.  
  2. while($row=mysql_fetch_array($dbresult))
  3. {
  4. echo ("<a href=".$row['link']."><img src=".$row['img']." alt=".$row['text']." width=\"175\" border=\"0\" /></a><br />");
  5. };
  6.  

Работает как положено.
Подскажите пожалуйста что не так?
 
 Top
DeepVarvar Супермодератор
Отправлено: 29 Июля, 2010 - 13:38:54
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Во первых ваша переменная $row это массив - зачем вызывать ее инициализацию в цикле и вообще более одного раза?
Во вторых функция сделает в вашем примере (который выше) "return" всего один раз и завершится...
 
 Top
viperdev
Отправлено: 29 Июля, 2010 - 13:46:53
Post Id


Новичок


Покинул форум
Сообщений всего: 54
Дата рег-ции: Янв. 2010  


Помог: 0 раз(а)




DeepVarvar пишет:
Во первых ваша переменная $row это массив - зачем вызывать ее инициализацию в цикле и вообще более одного раза?
Во вторых функция сделает в вашем примере (который выше) "return" всего один раз и завершится...

Хорошо, как тогда сделать вывод всех данных из таблицы в бд в нужном мне порядке при помощи функции?
 
 Top
DeepVarvar Супермодератор
Отправлено: 29 Июля, 2010 - 13:49:07
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




А так же посмотрите http://www.php.su/functions/?mysql_fetch_array
(Добавление)
Хотя-бы вот так:
PHP:
скопировать код в буфер обмена
  1. function banners (){
  2. global $dbresult;
  3. while($row=mysql_fetch_array($dbresult))
  4. {
  5. $text .= "<a href=".$row['link']."><img src=".$row['img']." alt=".$row['text']." width=\"175\" border=\"0\" /></a><br />";
  6. }
  7. return $text;
  8. }
  9. $banners_new = banners ();
  10. echo $banners_new;
 
 Top
viperdev
Отправлено: 29 Июля, 2010 - 13:55:43
Post Id


Новичок


Покинул форум
Сообщений всего: 54
Дата рег-ции: Янв. 2010  


Помог: 0 раз(а)




DeepVarvar пишет:
А так же посмотрите http://www.php.su/functions/?mysql_fetch_array

Что делает mysql_fetch_array я знаю, поэтому и написал такую функцию, взял массив с данными нужными мне, запустил цикл для того что бы вытащить все данные из массива в нужном мне порядке.
Вот только не могу понять почему за пределами функции цикл работает т.е. вытаскивает из массива все строки а в пределах функции только первую и останавливается?
 
 Top
Саныч Модератор
Отправлено: 29 Июля, 2010 - 14:02:02
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




viperdev пишет:
Вот только не могу понять почему за пределами функции цикл работает т.е. вытаскивает из массива все строки а в пределах функции только первую и останавливается?

Вам уже ответили выше!
return останавливает функцию и возвращает результат

(Отредактировано автором: 29 Июля, 2010 - 14:02:30)



-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
DeepVarvar Супермодератор
Отправлено: 29 Июля, 2010 - 14:02:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




$row=mysql_fetch_array($dbresult,MYSQL_ASSOC)
 
 Top
viperdev
Отправлено: 29 Июля, 2010 - 14:03:39
Post Id


Новичок


Покинул форум
Сообщений всего: 54
Дата рег-ции: Янв. 2010  


Помог: 0 раз(а)




Саныч пишет:
viperdev пишет:
Вот только не могу понять почему за пределами функции цикл работает т.е. вытаскивает из массива все строки а в пределах функции только первую и останавливается?

Вам уже ответили выше!
return останавливает функцию и возвращает результат

Очень хороший ответ))))) цикл то внутри функции.
(Добавление)
DeepVarvar пишет:
$row=mysql_fetch_array($dbresult,MYSQL_ASSOC)

И что таким образом? что это даст? ассоциативный массив) а толку с него?
Массив с данными получен и данные из него успешно извлекаются хоть MYSQL_BOTH напиши хоть MYSQL_ASSOC.
Вопрос не в этом(
 
 Top
DeepVarvar Супермодератор
Отправлено: 29 Июля, 2010 - 14:08:46
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Я выше уже написал как сделать...
viperdev пишет:
Что делает mysql_fetch_array я знаю

А вот что делается внутри while и как ведет себя оператор return - видимо не знаете...
(Добавление)
[url]http://forum.php.su/topic.php?forum=1&topic=4529&postid=1280401726#[/url]
 
 Top
Саныч Модератор
Отправлено: 29 Июля, 2010 - 14:10:55
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




viperdev пишет:
Очень хороший ответ))))) цикл то внутри функции.

Ну так все правильно... У вас внутри цикла return, который, как я писал выше останавливает функцию и возвращает результат. Именно по этому выводится только первая строка и функция заканчивается...
Чтобы выводилось все используйте вариант, который предложил DeepVarvar

з.ы. вот http://php.su/functions/custom/ почитайте, я думаю будет полезно...

(Отредактировано автором: 29 Июля, 2010 - 14:13:38)



-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
DeepVarvar Супермодератор
Отправлено: 29 Июля, 2010 - 14:17:03
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Саныч пишет:
з.ы. вот http://php.su/functions/custom/ почитайте, я думаю будет полезно...

Радость Радость Радость Радость Радость Радость Радость Радость Радость Радость Радость Радость Радость
 
 Top
viperdev
Отправлено: 29 Июля, 2010 - 14:20:26
Post Id


Новичок


Покинул форум
Сообщений всего: 54
Дата рег-ции: Янв. 2010  


Помог: 0 раз(а)




Народ я понимаю что вы очень умные, я у вас просил совета а кучу ссылок на то что я и так знаю.
Не можете помочь так не флудите хотябы(
Потому что от того напишу я:
PHP:
скопировать код в буфер обмена
  1.  
  2. $row=mysql_fetch_assoc($dbresult)
  3. или
  4. $row=mysql_fetch_array($dbresult,MYSQL_ASSOC)
  5. вместо
  6. $row=mysql_fetch_array($dbresult)
  7.  

Ничего не изменится.
 
 Top
Саныч Модератор
Отправлено: 29 Июля, 2010 - 14:23:12
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




как раз таки изменится...
сделайте print_r($row); для первого и второго варианта и увидите разницу


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
DeepVarvar Супермодератор
Отправлено: 29 Июля, 2010 - 14:24:17
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




PHP:
скопировать код в буфер обмена
  1. function banners (){
  2. global $dbresult;
  3. while($row=mysql_fetch_array($dbresult,MYSQL_ASSOC))
  4. {
  5. $text .= "<a href=".$row['link']."><img src=".$row['img']." alt=".$row['text']." width=\"175\" border=\"0\" /></a><br />";
  6. }
  7. return $text;
  8. }
  9. $banners_new = banners ();
  10. echo $banners_new;
 
 Top
viperdev
Отправлено: 29 Июля, 2010 - 14:35:19
Post Id


Новичок


Покинул форум
Сообщений всего: 54
Дата рег-ции: Янв. 2010  


Помог: 0 раз(а)




DeepVarvar пишет:
PHP:
скопировать код в буфер обмена
  1. function banners (){
  2. global $dbresult;
  3. while($row=mysql_fetch_array($dbresult,MYSQL_ASSOC))
  4. {
  5. $text .= "<a href=".$row['link']."><img src=".$row['img']." alt=".$row['text']." width=\"175\" border=\"0\" /></a><br />";
  6. }
  7. return $text;
  8. }
  9. $banners_new = banners ();
  10. echo $banners_new;

Большое спасибо, теперь разобрался) , даже как то не сообразил что можно данные занести в переменную $text а в конце после того как цикл пройдет вывести через return.
Еще раз спасибо за помощь новичку, надо быть внимательней к мануалам по php)
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB