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 для новичков - Принять несколько переменных и добавить в массив

 PHP.SU

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


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

> Без описания
El Diablo
Отправлено: 13 Сентября, 2013 - 17:08:58
Post Id



Новичок


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


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




Доброго времени суток, стоит такая задача:
Пользователь отмечает один\несколько чек боксов, отправляет GET'ом, встречаю я преобразованием в переменную:
CODE (text):
скопировать код в буфер обмена
  1. if (isset($_GET['city'])){$city = $_GET['city'];}

и сразу вывожу $city через echo, мне выводится самое последнее значение которое было у переданной переменной: index.php?city=0&city=1&city=2 тут все понятно, но как мне встретить каждую переменную и добавить в массив? что бы в массиве к примеру $allcity были занесены все значения? И далее через цикл я мог бы вывести все переменные из этого массива пока они не закончатся?

Форма отправки:
CODE (text):
скопировать код в буфер обмена
  1. <form action='' method='get' enctype='multipart/form-data'>
  2. <label for='Check'>Город 1</label><input type='checkbox' name='city' value='0'/>
  3. <label for='Check'>Город 2</label><input type='checkbox' name='city' value='1'/>
  4. <label for='Check'>Город 3</label><input type='checkbox' name='city' value='2'/>
  5. <input type='submit' value='Добавить'>
  6. </form>


Содержимое php файла:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. if (isset($_GET['city'])){$city = $_GET['city'];}
  3. ...
  4. if (empty($city)): echo "
  5. <form action='' method='get' enctype='multipart/form-data'>
  6. <label for='Check'>Город 1</label><input type='checkbox' name='city' value='0'/>
  7. <label for='Check'>Город 2</label><input type='checkbox' name='city' value='1'/>
  8. <label for='Check'>Город 3</label><input type='checkbox' name='city' value='2'/>
  9. <input type='submit' value='Добавить'>
  10. </form>";
  11. else: echo $city; /*потом на цикл заменю*/
  12. endif;
 
 Top
Мелкий Супермодератор
Отправлено: 13 Сентября, 2013 - 17:16:24
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




CODE (html):
скопировать код в буфер обмена
  1. <input ... name='city[]'

и получите в $_GET['city'] массив элементов.


-----
PostgreSQL DBA
 
 Top
esterio
Отправлено: 13 Сентября, 2013 - 17:17:00
Post Id



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


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


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




El Diablo пишет:
<input type='checkbox' name='city[]' value='2'/>
 
 Top
El Diablo
Отправлено: 13 Сентября, 2013 - 18:45:22
Post Id



Новичок


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


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




Благодарю! а подскажите еще если через цикл в echo получается вывести: 0,1,2,

PHP:
скопировать код в буфер обмена
  1. foreach($city as $value){ echo $value.",";}


то как это все вывести в переменную, что бы затем эту переменную записать в БД?
 
 Top
teddy
Отправлено: 13 Сентября, 2013 - 19:02:29
Post Id


Участник


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


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




PHP:
скопировать код в буфер обмена
  1. $var = implode(",", $city);//получили переменную, которая содержит в себе элементы массива в качестве строки, можно отправлять в БД
  2.  

(Отредактировано автором: 13 Сентября, 2013 - 19:03:17)

 
 Top
El Diablo
Отправлено: 13 Сентября, 2013 - 23:17:16
Post Id



Новичок


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


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




Разобрался, теперь пытаюсь понять, вот у меня есть запись в таблице, есть поле city там есть записи числа и числа с запятыми, делаю запрос:
PHP:
скопировать код в буфер обмена
  1. $result = mysql_query ("SELECT * FROM city");
  2. $row = mysql_fetch_array($result); /* вытягиваю 1ый ряд */
  3.  


далее значение поля city идет в массив, что бы в нем произвести поиск с помощью array_search или in_array (т.к. я понял, что в обычной переменной они искать не будут т.к. она не массив) на наличие запятой

PHP:
скопировать код в буфер обмена
  1. $id = array($row['type']);
  2. if (in_array(",", $id)): echo "Есть запятая";
  3. else: echo "Нет запятой";


Однако так и не могу выполнить поиск значения в массиве, подскажите, что я не так делаю?

P.S. Если чесно, смотрю со стороны и понимаю, то что я делаю похоже на закостыленый костыль =)
 
 Top
caballero
Отправлено: 13 Сентября, 2013 - 23:44:29
Post Id


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


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


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




зачем там в массиве искать запятую? откуда она возмется как ЕЛЕМЕНТ массива?


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
El Diablo
Отправлено: 13 Сентября, 2013 - 23:54:08
Post Id



Новичок


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


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




caballero пишет:
зачем там в массиве искать запятую? откуда она возмется как ЕЛЕМЕНТ массива?


в поле type заносятся либо одно число 1 или 10 и т.д. либо несколько чисел через запятую 1,2 или 56,2 (одной строкой), если запятая присутствует значит было занесено больше 1го идентификатора города, и для него выполняется определенное действие.

(Отредактировано автором: 13 Сентября, 2013 - 23:54:51)

 
 Top
caballero
Отправлено: 14 Сентября, 2013 - 00:09:45
Post Id


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


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


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




бред какой то
count() количество в массиве.
хотя так и непонятно каким чудом запятая становится елементом массива. и зачем она им становится


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
El Diablo
Отправлено: 14 Сентября, 2013 - 00:18:36
Post Id



Новичок


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


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




Есть форма с чекбоксами, пользователь выбирает 2 значения, они летят GET'ом:
index.php?city[]=0&city[]=2

Файл встречает:
PHP:
скопировать код в буфер обмена
  1. if (isset($_GET['city'])){$city = $_GET['city'];}
  2.  
  3. /* далее весь масив записывается строчкой в ячейку */
  4. $var = implode(",", $city);
  5. $city_update = mysql_query ("UPDATE news SET type='$var' WHERE id=1");


Вот так я в 1ую новость в поле type добавил значение 0,2 =)
 
 Top
caballero
Отправлено: 14 Сентября, 2013 - 00:24:57
Post Id


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


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


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




ну так поиск запятой в строке strpos()
массив тут при чем?

и вообше хранить через запятую в строке в БД - глупо.


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
flash-not
Отправлено: 14 Сентября, 2013 - 12:28:04
Post Id


Новичок


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


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




El Diablo пишет:
Есть форма с чекбоксами, пользователь выбирает 2 значения, они летят GET'ом:
index.php?city[]=0&city[]=2

Файл встречает:
PHP:
скопировать код в буфер обмена
  1. if (isset($_GET['city'])){$city = $_GET['city'];}
  2.  
  3. /* далее весь масив записывается строчкой в ячейку */
  4. $var = implode(",", $city);
  5. $city_update = mysql_query ("UPDATE news SET type='$var' WHERE id=1");


Вот так я в 1ую новость в поле type добавил значение 0,2 =)


как вам уже сказали попробуйте именно strpos если вам нужно найти позицию запятой, но я думаю, что скорее всего вам нужна ф-и explode (обратная от implode)

т.е. вам пришел ГЕТ с массивом вы сделали его строкой (с разделителем запятая) и записали в БД. после вы выбираете из БД опять же строку.
если примените к ней explode то у вас будет массив (без запятых). вы можете посчитать колчиество элементов и делать что-то далее в зависимости от количества элементов (например если 1) или от значений в этом массиве.
 
 Top
El Diablo
Отправлено: 14 Сентября, 2013 - 12:36:48
Post Id



Новичок


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


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




flash-not пишет:
El Diablo пишет:
Есть форма с чекбоксами, пользователь выбирает 2 значения, они летят GET'ом:
index.php?city[]=0&city[]=2

Файл встречает:
PHP:
скопировать код в буфер обмена
  1. if (isset($_GET['city'])){$city = $_GET['city'];}
  2.  
  3. /* далее весь масив записывается строчкой в ячейку */
  4. $var = implode(",", $city);
  5. $city_update = mysql_query ("UPDATE news SET type='$var' WHERE id=1");


Вот так я в 1ую новость в поле type добавил значение 0,2 =)


как вам уже сказали попробуйте именно strpos если вам нужно найти позицию запятой, но я думаю, что скорее всего вам нужна ф-и explode (обратная от implode)

т.е. вам пришел ГЕТ с массивом вы сделали его строкой (с разделителем запятая) и записали в БД. после вы выбираете из БД опять же строку.
если примените к ней explode то у вас будет массив (без запятых). вы можете посчитать колчиество элементов и делать что-то далее в зависимости от количества элементов (например если 1) или от значений в этом массиве.


Благодарю =) правда я уже решил этот вопрос, и кстате strpos имеет минус т.к. если я например ищу 2 то строчка 2,0 не будет распознана и он ее пропустит (т.к. он 1ое значение летит в 0 а не в 1), по этому прибег к strpbrk, у меня получился вот такой код:

CODE (htmlphp):
скопировать код в буфер обмена
  1. $comma = ','; /* запятая, по которой в дальнейшем буду идентифицировать запись */
  2. $result = mysql_query ("SELECT * FROM img"); /* выборка с БД */
  3. $row = mysql_fetch_array($result); /* выборка ряда*/
  4. do {$id = $row['type']; /* указываем поле в которое будет проходить поиск */
  5.         $find_comma = strpbrk($id, $comma); /*проверка на наличие запятой*/
  6.         if ($find_comma == true): /* если есть запятая, ищем есть ли нужный нам город*/
  7.                 $in_array = explode(",", $row['type']); /* разбиваем строку на масивы, что бы проверить каждое число*/
  8.                 if(in_array ($test_city, $in_array)): echo $row['id']/*заносится форма вывода данных*/;
  9.                 endif;
  10.         else:
  11.                 if($id==$test_city): echo $row['id']/*заносится форма вывода данных*/;
  12.                 endif;
  13.         endif;}
  14. while($row = mysql_fetch_array($result));
 
 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