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 :: вывести переменную за пределы цикла while

 PHP.SU

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


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

> Без описания
arsen4ik
Отправлено: 27 Марта, 2014 - 12:41:23
Post Id



Новичок


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


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




Народ помогите с моим говнокодом Улыбка
Мне нужно вывести все значения переменной $eetime['time'] за пределы цикла
PHP:
скопировать код в буфер обмена
  1.  
  2. while($eetime = mysql_fetch_array($etime))
  3. {
  4. $eetime['time'];
  5. }
  6.  

Как я понял надо записать в массив а затем этот массив выводить уже за циклом, но как только я не пробовал так и не получилось ничего
 
 Top
Flash_PR
Отправлено: 27 Марта, 2014 - 13:00:37
Post Id



Посетитель


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


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




arsen4ik пишет:
Мне нужно вывести все значения переменной $eetime['time'] за пределы цикла

Для чего? И куда вывести?


-----
Умные мысли приходят тогда, когда все глупости уже сделаны...
 
My status
 Top
esterio
Отправлено: 27 Марта, 2014 - 13:04:42
Post Id



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


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


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




PHP:
скопировать код в буфер обмена
  1. $data = array();
  2. while($eetime = mysql_fetch_array($etime))
  3. {
  4.         $data[] = $eetime;
  5. }
  6.  
  7. var_dump($data);
 
 Top
arsen4ik
Отправлено: 27 Марта, 2014 - 18:53:19
Post Id



Новичок


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


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




esterio пишет:
$data = array();
while($eetime = mysql_fetch_array($etime))
{
$data[] = $eetime;
}

var_dump($data);

Спасибо!
Но я ваще нихрена не понимаю, смотри, у меня скрипт
PHP:
скопировать код в буфер обмена
  1.  
  2. $etime = mysql_query("SELECT * FROM employ WHERE date=$dmy");
  3.  
  4. while($eetime = mysql_fetch_array($etime))
  5. {
  6. $test[] = $eetime['time'];
  7. }
  8. echo $dmy;
  9. var_dump($test);
  10.  

Соответсвенно я выбираю число, это хорошо видно в запросе SQL WHERE date=$dmy, дальше переменной $dmy которая содержит выбранную дату цикл уйти не может!
Это же нереально, ведь выборка идет только по текущему числу
То есть
PHP:
скопировать код в буфер обмена
  1.  
  2. $etime = mysql_query("SELECT * FROM employ WHERE date=$dmy");
  3.  
  4. while($eetime = mysql_fetch_array($etime))
  5. {
  6. $test = $eetime['time'];
  7. }
  8.  
  9. echo $test;
  10.  

Если выводить так то все работает в пределах запроса WHERE и не выходит за рамки выбранного числа
Но какого хрена когда я вывожу первый запрос с массивами на экран выводятся за все дни?
КАК ТАКОЕ ВООБЩЕ ВОЗМОЖНО? Ведь в запросе строго указано, не через LIKE а именно на точное совпадение что нужно выводить именно на конкретную дату, как он может выводить и другие даты?
КАК? Мозги кипят, пацаны помогите разобратся а то я ж свихнусь нахрен от таких раскладов
(Добавление)
Ну или вот например, вывожу не через var_dump а просто $test[0] всё равно берутся числа с других дат не указанных в запросе WHERE, понимаете? Я уже и переменные проверял и запросы, все проверил, один хрен как только записываю в массив начинаются чудеса, запрос WHERE такое ощущение что не работает вообще, хотя как на него может влиять запись в массив не понимаю

(Отредактировано автором: 27 Марта, 2014 - 18:54:11)

 
 Top
IllusionMH
Отправлено: 27 Марта, 2014 - 19:12:38
Post Id



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


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


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




arsen4ik, подозреваю что это скорее совпадение с последним элементом цикла, чем неправильная работа массива.
Несколько записей просто через var_dump(mysql_fetch_array($etime)) выведите.
Как выглядит дата в бд и в переменной? Подозреваю что вы сравниваете неправильные типы данных.

(Отредактировано автором: 27 Марта, 2014 - 19:13:23)

 
 Top
arsen4ik
Отправлено: 27 Марта, 2014 - 19:45:26
Post Id



Новичок


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


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




IllusionMH пишет:
arsen4ik, подозреваю что это скорее совпадение с последним элементом цикла, чем неправильная работа массива.
Несколько записей просто через var_dump(mysql_fetch_array($etime)) выведите.
Как выглядит дата в бд и в переменной? Подозреваю что вы сравниваете неправильные типы данных.

Дата одинаково как в таблице так и в переменной $dmy - формат 27032014, выборка ведь точная, т.е это не LIKE где условие WHERE может вывести 4032014 как за 14032014 например.
Вот нужно например вывести 21 число марта 2014 года т.е 21032014
На эту дату нет никаких записей в таблице employ (в которую записываются занятое время на выбранную дату)
Но тем не менее var_dump выводит
PHP:
скопировать код в буфер обмена
  1. array(4) { [0]=> string(1) "5" [1]=> string(1) "1" [2]=> string(1) "4" [3]=> string(1) "4" }

Хотя записей на эту дату нет, понимаете?
Потому что SELECT * FROM employ WHERE date=$dmy где $dmy со 100% гарантией выбранная дата т.е 21 число.
Откуда тогда берутся эти числа?
Вот код сейчас
PHP:
скопировать код в буфер обмена
  1.  
  2. $ttime = mysql_query("SELECT * FROM time"); // Вот все время которое предлагается пользователю
  3.  
  4. $dmy = $days.''.$month.''.$year; // Вот выбранная дата
  5. $etime = mysql_query("SELECT * FROM employ WHERE date=$dmy"); // Вот условие при котором в таблице employ которая отвечает за занятость времени на выбранную дату ищутся значения которые совпадают с переменной $dmy (везде формат 27032014)
  6.  
  7. while($eetime = mysql_fetch_array($etime)) // Вот код который обходит массивчик с занятым временем
  8. {
  9. $test[] = $eetime['time']; // Вот запись в массив
  10. }
  11.  
  12. var_dump($test); // Вот вывод массива, ну какого х... выводятся левые значения? Как это возможно то? Если SELECT * FROM employ WHERE date=$dmy
  13.  
  14. while($ttimes = mysql_fetch_array($ttime))
  15. {
  16. if($eetime['time'] != $ttimes['id'])
  17. {
  18. echo '<input type="checkbox" id="check1" name="time" value="'.$ttimes['time'].'"> <label for="check1">'.$ttimes['time'].'</label><br>';
  19. }
  20.  
  21. }
  22.  
 
 Top
IllusionMH
Отправлено: 27 Марта, 2014 - 19:54:12
Post Id



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


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


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




arsen4ik, а какого типа колонка date? Не пробовали хранить в поле даты дату, а не число?
И я говорил сделать так


чтобы вы убедились, что массив и вынос его за цикл не должен влиять на результат.
 
 Top
arsen4ik
Отправлено: 28 Марта, 2014 - 12:16:50
Post Id



Новичок


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


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




Цитата:
arsen4ik, а какого типа колонка date? Не пробовали хранить в поле даты дату, а не число?
И я говорил сделать так
PHP:
скопировать код в буфер обмена
var_dump(mysql_fetch_array($etime));
var_dump(mysql_fetch_array($etime));
var_dump(mysql_fetch_array($etime));
var_dump(mysql_fetch_array($etime));


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

Спасибо, поменял INT на TEXT мало чего изменилось.

Да, все выводится верно но опять же только первое значение.
Всё же элементарно, надо записать в массив уже в цикле все эти значения а затем вывести за пределы цикла и разобрать массив. Вот тут начинаются чудеса, откуда то берутся значения там где их быть не должно, конкретно эта часть кода
PHP:
скопировать код в буфер обмена
  1.  
  2. while($eetime = mysql_fetch_array($etime))
  3.  
  4. {
  5. $test[] = $eetime['time'];
  6. }
  7.  
  8. var_dump($test); // Как вывести массив правильно?
  9. // Пробовал так $test[0] - ерунда
  10. // foreach ($test as $test2) { echo $test2; } - вроде и выводит но очень странно, например на 3 число есть запись на время с id 4 и если кликать на числа до 3 числа то выходит Invalid argument а если после 3 числа то выводится id времени этого числа то есть цифра 4, потом на 14 число есть 2 записи с id времени 1 и 5, после 14 числа куда не кликни выводится уже 415 то есть сумма всех записей в таблице, объясните пожалуйста что не так?
  11.  
 
 Top
IllusionMH
Отправлено: 28 Марта, 2014 - 12:35:59
Post Id



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


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


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




arsen4ik, вы прикалываетесь? Скопируйте код который я дал, если не понимаете почему while не должен продолжаться в вашем коде.
arsen4ik пишет:
Спасибо, поменял INT на TEXT мало чего изменилось.

*лицовруках*
Раскрою секретную информацию(но только ж вы никому. Даже под пытками. Ок?) в БД есть специальные типы полей для хранения даты и времени. А еще есть специальные функции для работы с датами.
 
 Top
arsen4ik
Отправлено: 28 Марта, 2014 - 12:50:33
Post Id



Новичок


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


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




Цитата:
arsen4ik, вы прикалываетесь? Скопируйте код который я дал, если не понимаете почему while не должен продолжаться в вашем коде.
arsen4ik пишет:
Спасибо, поменял INT на TEXT мало чего изменилось.

*лицовруках*
Раскрою секретную информацию(но только ж вы никому. Даже под пытками. Ок?) в БД есть специальные типы полей для хранения даты и времени. А еще есть специальные функции для работы с датами.

Не знал, но смысл уже что то менять если сделано как сделано.
Этот код

Выводит
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. array(6) { [0]=> string(8) "14032014" ["date"]=> string(8) "14032014" [1]=> string(1) "1" ["time"]=> string(1) "1" [2]=> string(1) "2" ["id"]=> string(1) "2" } array(6) { [0]=> string(8) "14032014" ["date"]=> string(8) "14032014" [1]=> string(1) "4" ["time"]=> string(1) "4" [2]=> string(1) "3" ["id"]=> string(1) "3" } bool(false) bool(false)
  3.  

На занятое число со айдишнеками 1 и 4
И
CODE (htmlphp):
скопировать код в буфер обмена
  1. bool(false) bool(false) bool(false) bool(false)

На незанятое число
 
 Top
IllusionMH
Отправлено: 28 Марта, 2014 - 14:22:31
Post Id



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


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


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




arsen4ik, так у вас массив не создается если записей нет. Поэтому и ошибка когда вы непонятно что пытаетесь в цикл передать. Прсто сразу заносите в $test пустой массив
PHP:
скопировать код в буфер обмена
  1. $test = array();
  2. while(){
  3. //...
  4. }
  5. foreach($test as $time) {
  6. echo $time;
  7. }
 
 Top
arsen4ik
Отправлено: 29 Марта, 2014 - 14:36:41
Post Id



Новичок


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


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




Спасибо, помогли на другом форуме точно таким же решением.
Ещё раз спасибо!
 
 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