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 :: Не могу понять выражение в цикле do-while

 PHP.SU

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


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

> Описание: помогите понять выражение
Triton682
Отправлено: 07 Августа, 2013 - 17:29:13
Post Id


Новичок


Покинул форум
Сообщений всего: 22
Дата рег-ции: Июль 2013  


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




PHP:
скопировать код в буфер обмена
  1.  
  2. $zapros='SELECT * FROM table LIMIT '.$limit.'';
  3. $resultat=mysql_query($zapros);
  4. $array=mysql_fetch_array($resultat);
  5.  
  6. echo $zapros.'<br />';
  7.  
  8. do{
  9.     echo $array['id'].' '.$array['name'].'<br />';
  10. }while($array=mysql_fetch_array($resultat)); //не понимаю
  11.  


Спойлер (Отобразить)


$array возвращает массив с поле=значение. в echo возвращает "Array", как и mysql_fetch_array($resultat). Я неправильно понимаю что получается выражение: Array=Array, было бы так, цикл просто напросто зациклился бы.
Вопрос, как это понимать? разжуйте.
 
 Top
Fetis
Отправлено: 07 Августа, 2013 - 17:41:51
Post Id



Частый гость


Покинул форум
Сообщений всего: 153
Дата рег-ции: Дек. 2012  
Откуда: Киров, Россия


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




Дак ты разбил массив который пришел из запроса, и тебе надо выводить НЕ echo $zapros, а echo $array['id'] например. и тоже использовать ассоциативный массив

Второй случай, попробуй заместо mysql_fetch_array, использовать mysql_fetch_assoc.

(Отредактировано автором: 07 Августа, 2013 - 17:43:06)

 
 Top
esterio
Отправлено: 07 Августа, 2013 - 17:54:56
Post Id



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


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




Popov detected Радость Радость Радость Радость
А если чесно выбросите урокы попова. Причина
 
 Top
Triton682
Отправлено: 07 Августа, 2013 - 17:59:24
Post Id


Новичок


Покинул форум
Сообщений всего: 22
Дата рег-ции: Июль 2013  


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




Fetis пишет:
Дак ты разбил массив который пришел из запроса, и тебе надо выводить НЕ echo $zapros, а echo $array['id'] например. и тоже использовать ассоциативный массив

Второй случай, попробуй заместо mysql_fetch_array, использовать mysql_fetch_assoc.

что? зачем мне выводить $array['id']?
echo $zapros.'<br />'; - это у меня проверка, что находится в $limit
я это не понимаю: while($array=mysql_fetch_array($resultat));
 
 Top
Fetis
Отправлено: 07 Августа, 2013 - 18:01:59
Post Id



Частый гость


Покинул форум
Сообщений всего: 153
Дата рег-ции: Дек. 2012  
Откуда: Киров, Россия


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





где веревка?)


НО в переменной $zapros, у тебя в данный момент просто текст, а не результат выполнения запроса Улыбка

(Отредактировано автором: 07 Августа, 2013 - 18:02:18)

 
 Top
snikers987
Отправлено: 07 Августа, 2013 - 18:05:45
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


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




mysql_fetch_array возвращает true пока есть строки в результате, когда строки заканчиваются mysql_fetch_array возвратит false и цикл while вернет управление.


-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
Triton682
Отправлено: 07 Августа, 2013 - 18:08:13
Post Id


Новичок


Покинул форум
Сообщений всего: 22
Дата рег-ции: Июль 2013  


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




Fetis пишет:

где веревка?)


НО в переменной $zapros, у тебя в данный момент просто текст, а не результат выполнения запроса Улыбка

не смотри на эту строку! Радость это проверка $limit
(Добавление)
esterio пишет:
Popov detected Радость Радость Радость Радость
А если чесно выбросите урокы попова. Причина

не вижу ни одного попова, даже не видел его творений.
честно говоря, минусонул бы вас
(Добавление)
snikers987 пишет:
mysql_fetch_array возвращает true пока есть строки в результате, когда строки заканчиваются mysql_fetch_array возвратит false и цикл while вернет управление.

спасибо, закрыто.
 
 Top
esterio
Отправлено: 07 Августа, 2013 - 18:27:58
Post Id



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


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




snikers987 пишет:
mysql_fetch_array возвращает true пока есть строки в результате, когда строки заканчиваются mysql_fetch_array возвратит false и цикл while вернет управление.

И Вы бредите сегодня. Да что такое. Неужели никто не в силах зайти вот сюда
Цитата:
Возвращает массив, соответствующий обработанному ряду результата запроса и сдвигает внутренний указатель данных вперед.


Неужели так сложно?

Triton682 пишет:
честно говоря, минусонул бы вас

Да на здоровя
 
 Top
DelphinPRO
Отправлено: 07 Августа, 2013 - 18:53:27
Post Id



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


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


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




Triton682 пишет:
честно говоря, минусонул бы вас

вы лучше возьмите пример использования mysql_fetch_array из манула (php.net)/

Ваш код в корне не верен. Сначала нужно проверять что вернула функция, а потом уже использовать возвращенное значение. У вас же на первой итерации проверка не производится и данные сразу отдаются на обработку. А если вдруг запрос ничего не вернул? Опа! косяк. посыплются ошибки.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
IllusionMH
Отправлено: 07 Августа, 2013 - 19:02:47
Post Id



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


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


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




Triton682 пишет:
честно говоря, минусонул бы вас

Triton682, в ветке по ссылке указаны косяки и почему так делать не стоит. За такие ссылки нужно говорить спасибо, а не обижаться(учитывая код в первом посте).

Конструкция while работает по простейшему принципу, нужно знать 2 элементарные вещи: приведение типов и как узнать что возвращает функция(воспользоваться поиском на php.net). И не зная эти две элементарные вещи собрались "минусовать"? Ха-ха
 
 Top
Unit221
Отправлено: 07 Августа, 2013 - 19:37:29
Post Id


Новичок


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


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




Принцип цыкла

Делай чтото пока соблюдается условие .

Пример

<?php

$i=1;

do {
echo $i;
$i++
}while ($i<10)

?>

Тоесть

$i = 1
делай {
покажи $i
прибавь к $i еденицу
} пока действует условие ($i меньше 0)
}

Более подробно про основы цикла я не могу )

(Отредактировано автором: 07 Августа, 2013 - 19:38:56)

 
 Top
Triton682
Отправлено: 07 Августа, 2013 - 20:29:04
Post Id


Новичок


Покинул форум
Сообщений всего: 22
Дата рег-ции: Июль 2013  


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




если я правильно понял(а если не правильно то скажите что у меня ужасного такого) то вы отсылаете меня читать про ужасный код из-за цикла do-while. Хотя do-while мне нужен для того чтобы исполнить 1 итерацию независимо от условия (истинности выражения). т.е.
сделав так:
PHP:
скопировать код в буфер обмена
  1.  
  2. while($array=mysql_fetch_array($resultat)){
  3.     echo $array['id'].' '.$array['name'].'<br />';
  4.    
  5. };
  6.  

я получу записи с 2 по 11.
если do-while:
PHP:
скопировать код в буфер обмена
  1.  
  2. do{
  3.     echo $array['id'].' '.$array['name'].'<br />';
  4.    
  5. }while($array=mysql_fetch_array($resultat));
  6.  

(один раз он в любом случае исполнит тело цикла) то получу записи с 1 по 11 - как и нужно мне.

Само выражение $array=mysql_fetch_array($resultat) непонятно. Т.е. я понимаю так:
Пока $array равно mysql_fetch_array($resulatat) выполнять тело цикла. в переменной $array хранится массив данных $resultat обработанный mysql_fetch_array, так же mysql_fetch_array($resultat) возвратит обработанный массив данных полученный из $resultat.
т.е. я вижу это как 1=1, что должно зациклится.


mysql_fetch_array($resultat) = 10 и $array = 10.

Цель которую я преследую, вывести
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM TABLE LIMIT 0,11

понятное дело так оно не выводится(выведет одну запись и только первую, а не 11):
PHP:
скопировать код в буфер обмена
  1.  
  2. $zapros='SELECT * FROM table LIMIT 0,11';
  3. $resultat=mysql_query($zapros);
  4. $array=mysql_fetch_array($resultat);
  5. echo $array['id'].' '.$array['name'];
  6.  

мне же, нужно выводить результат запроса SELECT * FROM table LIMIT 0,11, когда в лимите могут менятся значения "с какой начинать" и "сколько".

про принцип цикла я знаю, но использовал всегда с численными выражениями вроде:
PHP:
скопировать код в буфер обмена
  1.  
  2. a=0;
  3. b=10;
  4. do{
  5.    ...
  6. }while($a++<$b);
  7.  

поэтому я немогу понять выражение while($array=mysql_fetch_array($resultat)).
Покажите мне тогда как правильно выводить SELECT * FROM table LIMIT 0,11, когда значения лимита меняются.

(Отредактировано автором: 07 Августа, 2013 - 20:51:20)

 
 Top
Unit221
Отправлено: 07 Августа, 2013 - 22:17:08
Post Id


Новичок


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


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




Добрый вечерю
while($array=mysql_fetch_array($resultat))
Надо понимать так.

Пока (Существует масив $array равный запросу $resultat из масива MySql

Не спешите, представте себе пошагова как как работает php ненада понемать всю строчку целиком.

Покажите мне тогда как правильно выводить SELECT * FROM table LIMIT 0,11, когда значения лимита меняются.

Подставте вместо 0.11 переменную в которой вы будите менять значения.

(Отредактировано автором: 07 Августа, 2013 - 22:19:14)

 
 Top
DelphinPRO
Отправлено: 07 Августа, 2013 - 23:33:03
Post Id



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


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


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




Triton682 пишет:
я получу записи с 2 по 11.

вы бредите Улыбка
прочитайте внимательно мой пост. я там написал чем чревато использование цикла do..while в данном контексте


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
esterio
Отправлено: 08 Августа, 2013 - 11:56:16
Post Id



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


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




Triton682 пишет:
я получу записи с 2 по 11.
если do-while то получу записи с 1 по 11 - как и нужно мне.

Если Вы бы перейшли по ссилке которую я привел, или внимательно прочли то, что написал DelphinPRO, или прочли документацию, или знали хотя бы один ЯП, то Вы б такое не написали и не получили ураган критики от жителей форума. А почему критика? Да потому что Вам лень было прочесть
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB