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
Форумы портала PHP.SU :: Версия для печати :: вывести переменную за пределы цикла while
Форумы портала PHP.SU » » Вопросы новичков » вывести переменную за пределы цикла while

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

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

Как я понял надо записать в массив а затем этот массив выводить уже за циклом, но как только я не пробовал так и не получилось ничего
2. Flash_PR - 27 Марта, 2014 - 13:00:37 - перейти к сообщению
arsen4ik пишет:
Мне нужно вывести все значения переменной $eetime['time'] за пределы цикла

Для чего? И куда вывести?
3. esterio - 27 Марта, 2014 - 13:04:42 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $data = array();
  2. while($eetime = mysql_fetch_array($etime))
  3. {
  4.         $data[] = $eetime;
  5. }
  6.  
  7. var_dump($data);
4. arsen4ik - 27 Марта, 2014 - 18:53:19 - перейти к сообщению
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 такое ощущение что не работает вообще, хотя как на него может влиять запись в массив не понимаю
5. IllusionMH - 27 Марта, 2014 - 19:12:38 - перейти к сообщению
arsen4ik, подозреваю что это скорее совпадение с последним элементом цикла, чем неправильная работа массива.
Несколько записей просто через var_dump(mysql_fetch_array($etime)) выведите.
Как выглядит дата в бд и в переменной? Подозреваю что вы сравниваете неправильные типы данных.
6. arsen4ik - 27 Марта, 2014 - 19:45:26 - перейти к сообщению
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.  
7. IllusionMH - 27 Марта, 2014 - 19:54:12 - перейти к сообщению
arsen4ik, а какого типа колонка date? Не пробовали хранить в поле даты дату, а не число?
И я говорил сделать так


чтобы вы убедились, что массив и вынос его за цикл не должен влиять на результат.
8. arsen4ik - 28 Марта, 2014 - 12:16:50 - перейти к сообщению
Цитата:
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.  
9. IllusionMH - 28 Марта, 2014 - 12:35:59 - перейти к сообщению
arsen4ik, вы прикалываетесь? Скопируйте код который я дал, если не понимаете почему while не должен продолжаться в вашем коде.
arsen4ik пишет:
Спасибо, поменял INT на TEXT мало чего изменилось.

*лицовруках*
Раскрою секретную информацию(но только ж вы никому. Даже под пытками. Ок?) в БД есть специальные типы полей для хранения даты и времени. А еще есть специальные функции для работы с датами.
10. arsen4ik - 28 Марта, 2014 - 12:50:33 - перейти к сообщению
Цитата:
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)

На незанятое число
11. IllusionMH - 28 Марта, 2014 - 14:22:31 - перейти к сообщению
arsen4ik, так у вас массив не создается если записей нет. Поэтому и ошибка когда вы непонятно что пытаетесь в цикл передать. Прсто сразу заносите в $test пустой массив
PHP:
скопировать код в буфер обмена
  1. $test = array();
  2. while(){
  3. //...
  4. }
  5. foreach($test as $time) {
  6. echo $time;
  7. }
12. arsen4ik - 29 Марта, 2014 - 14:36:41 - перейти к сообщению
Спасибо, помогли на другом форуме точно таким же решением.
Ещё раз спасибо!

 

Powered by ExBB FM 1.0 RC1