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 :: foreach

 PHP.SU

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


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

> Описание: Запутался
glivera
Отправлено: 27 Января, 2012 - 19:47:35
Post Id


Новичок


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


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




есть такой код:
CODE (htmlphp):
скопировать код в буфер обмена
  1. function view_index(){
  2.  
  3.                         $sql = "SELECT * FROM tab";
  4.                                 $result = mysql_query($sql);
  5.  
  6.                                 if (!$result)
  7.                                         die(mysql_error());
  8.  
  9.                                 $n = mysql_num_rows($result);
  10.                                 $art = array();
  11.  
  12.                                 for ($i = 0; $i <$n; $i++){
  13.                                         $row = mysql_fetch_assoc($result);
  14.                                         $art[] = $row;
  15.                                 }
  16.                                 return $art;
  17.  
  18.                 }
  19.  
  20. $news = view_index();
  21. foreach ($news as $new){
  22.         echo $new['text'];
  23. }


Почему выводит только первую запись?
 
 Top
illy
Отправлено: 27 Января, 2012 - 19:53:49
Post Id



Участник


Покинул форум
Сообщений всего: 1117
Дата рег-ции: Июль 2011  
Откуда: от верблюда)


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




PHP:
скопировать код в буфер обмена
  1. function view_index(){
  2. $sql = "SELECT * FROM tab";
  3. $result = mysql_query($sql);
  4. if (!$result) die(mysql_error());
  5. $art = array();
  6. if(mysql_num_rows($result)>0){
  7. while($row = mysql_fetch_assoc($result)){
  8. $art[] = $row;
  9. }
  10. }
  11. }
  12. return $art;
  13. }
  14.  
  15. $news = view_index();
  16. foreach ($news as $new){
  17. echo $new['text'];
  18. }

(Отредактировано автором: 27 Января, 2012 - 19:55:26)



-----
Всё гениальное - просто
И ещё проще, если ты - индиго
 
 Top
glivera
Отправлено: 27 Января, 2012 - 20:07:08
Post Id


Новичок


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


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




спасибо.. 4 ночи, голова уже не работает..)))
 
 Top
illy
Отправлено: 27 Января, 2012 - 20:58:39
Post Id



Участник


Покинул форум
Сообщений всего: 1117
Дата рег-ции: Июль 2011  
Откуда: от верблюда)


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




когда я в первый раз выводил из базы тож думал чё это один раз ток выводит Ха-ха


-----
Всё гениальное - просто
И ещё проще, если ты - индиго
 
 Top
evgenijj
Отправлено: 27 Января, 2012 - 23:15:06
Post Id



Участник


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


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




illy
CODE (htmlphp):
скопировать код в буфер обмена
  1.     function view_index(){
  2.     $sql = "SELECT * FROM tab";
  3.     $result = mysql_query($sql);
  4.     if (!$result) die(mysql_error());
  5.     $art = array();
  6.     if(mysql_num_rows($result)>0){
  7.     while($row = mysql_fetch_assoc($result)){
  8.     $art[] = $row;
  9.     }
  10.     }
  11.     }
  12.     return $art;
  13.     }
  14.      
  15.     $news = view_index();
  16.     foreach ($news as $new){
  17.     echo $new['text'];
  18.     }

Наверное, я что-то не понимаю в этой жизни: 4 открывающие скобки, 5 закрывающих...
 
 Top
illy
Отправлено: 28 Января, 2012 - 00:13:16
Post Id



Участник


Покинул форум
Сообщений всего: 1117
Дата рег-ции: Июль 2011  
Откуда: от верблюда)


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




да одна лишняя Ха-ха

кстати, тоже может не понимаю в этой жизни: school пишется с двумя o


-----
Всё гениальное - просто
И ещё проще, если ты - индиго
 
 Top
LIME
Отправлено: 28 Января, 2012 - 01:53:28
Post Id


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


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


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




а я точно чего-то непонимаю
нафига 2е проверки?
illy пишет:
if(mysql_num_rows($result)>0){
while($row = mysql_fetch_assoc($result)){

(Добавление)
glivera ваш код вполне рабочий
немного глуповат но рабочий(и не хуже чем у illy)
не смог понять в чем ошибка ...проверил...работает...ошибки нет
по крайней мере в приведенном коде
 
 Top
glivera
Отправлено: 28 Января, 2012 - 06:29:11
Post Id


Новичок


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


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




LIME Точно! С утра нашел ошибку.)))
Подскажите, а в каком месте глуповат? Надо же учиться.
 
 Top
LIME
Отправлено: 28 Января, 2012 - 06:35:08
Post Id


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


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


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




http://php.su/functions/?mysql-fetch-array внизу примеры
вобщем как у illy только без ненужной проверки
illy пишет:
if(mysql_num_rows($result)>0){
у вас она была нужна потому что неправильный цикл применялся
 
 Top
glivera
Отправлено: 28 Января, 2012 - 06:59:41
Post Id


Новичок


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


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




CODE (htmlphp):
скопировать код в буфер обмена
  1. function view_index(){
  2.  
  3. $sql = "SELECT * FROM tab";
  4. $result = mysql_query($sql);
  5.     if (!$result) die(mysql_error());
  6. $art = array();
  7.  
  8. while($row = mysql_fetch_assoc($result)){
  9.     $art[] = $row;
  10. }
  11.  
  12. return $art;
  13. }
  14.  
  15. $news = view_index();
  16. foreach ($news as $new){
  17. echo $new['text'];
  18. }


Вот так правильнее значит?
 
 Top
LIME
Отправлено: 28 Января, 2012 - 07:09:21
Post Id


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


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


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




если не заморачиваться на то что лучше возвращать не массив а формировать в ф-ции строку для вывода и ее возвращать то да
но это по ситуации
и ктому же
glivera пишет:
$result = mysql_query($sql);
    if (!$result) die(mysql_error());
запишется короче

может так лучше?
PHP:
скопировать код в буфер обмена
  1. function view_index(){
  2.  
  3. $sql = "SELECT * FROM tab";
  4. $result = mysql_query($sql) OR die(mysql_error());
  5. $str = '';
  6.  
  7. while($row = mysql_fetch_assoc($result)){
  8.     $str . = '<br/>'.$row;
  9. }
  10.  
  11. return $str;
  12. }
  13.  
  14. echo view_index();
  15. }
тут минус в том что если еще в стоку теги вставить (<br> или еще) то памяти больше займет
зато сразу вывод без цикла
по ситуации вопчем
 
 Top
glivera
Отправлено: 28 Января, 2012 - 07:14:57
Post Id


Новичок


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


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




ну тут ситуация немного другая, пример упрощенный. у меня через цикл вывод в шаблон.
LIME пишет:
$result = mysql_query($sql) OR die(mysql_error());

спасибо.
 
 Top
LIME
Отправлено: 28 Января, 2012 - 07:18:43
Post Id


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


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


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




glivera в любом случае надо писать так чтоб весь вывод происходил в одном месте в конце
в будущем упростит жизнь
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB