Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> неизвестное заранее количество переменных 
:(
    Опции темы
lamik
Дата 15.8.2006, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 15.8.2006

Репутация: нет
Всего: нет



Врядли название темы отражает ее суть... ну что вышло, то вышло.


Проблема:
Допустим в MySQL есть записи о пользователях некоторого форума. 
Допустим, я сгенерировал на страничке форму, в которой каждому пользователю соответствует checkbox с уникальным именем(например id пользователя). Пусть эта форма передает данные в другую страницу типа workform.php метод POST.

Вопрос: как в этом самом workform.php обработать значения всех checkbox'ов, не зная заранее ни их имен ни их количества? И можно ли вообще это сделать?

PM MAIL ICQ   Вверх
vasac
Дата 15.8.2006, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 8
Всего: 36



Давай чекбоксам имена вида: arr[<id>], где id — идентификатор пользователя. 
Например, <input type="checkbox" value="1" name="arr[10]" /> для пользователя с id=10.

Тогда в сценарии будет доступен массив $_POST[ 'arr' ] с индексами, соответствующими id выбранных пользователей.

PM WWW   Вверх
lamik
Дата 15.8.2006, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 15.8.2006

Репутация: нет
Всего: нет



Спасибо за ответ.

Хотя предложенный способ мне не понравился, т.к. для пользователя с id = 1000 будет что-то вроде arr[1000], а массивы с такими индексами кажуться мне чем-то неправильным. Однако сама идея задания массива в качестве параметра для меня нова. Еще раз спасибо.

Итого я получил что-то вроде:

Код формы:
Код

i = 0;
while ()
{
..
<input type="checkbox" value=<id> name="arr[i]" /> где i грубо говоря номер строки
...
}
<input type="hidden" value=<i> name="size">

...


Код сценария:
Код

$i = 0;
while ($i < _POST["size"])
{
   if (isset($_POST["size"][$i]))
      DoSomething();
}

 
Вопрос: 
1) это ли имелось ввиду;
2) можно ли как то узнать какие из элементов массива инициализированы, что бы не проходить по всем индексам от 0 до size;

PM MAIL ICQ   Вверх
skyboy
Дата 15.8.2006, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



lamik, для этого можно использовать конструкцию foreach
PM MAIL   Вверх
vasac
Дата 15.8.2006, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 8
Всего: 36



Цитата(lamik @  15.8.2006,  13:57 Найти цитируемый пост)
<input type="checkbox" value=<id> name="arr[i]" /> где i грубо говоря номер строки


value в данном случае не имеет смысла. Сделай просто value=1.
В итоге должно получится что-то вроде:

Код

Строка 1 (пользователь с id=1): <input type="checkbox" value="1" name="arr[1]" /><br />
Строка 2 (пользователь с id=5): <input type="checkbox" value="1" name="arr[5]" /><br />
Строка 3 (пользователь с id=10): <input type="checkbox" value="1" name="arr[10]" /><br />
Строка 4 (пользователь с id=15): <input type="checkbox" value="1" name="arr[15]" /><br />


Если будет выбрана 2 и 4-я строки, то в сценарии получится массив:
Код

$_POST[ 'arr' ] = Array(
  5 => 1,
  15 => 1
);


Т.е. с индексами равными id выбранных пользователей (для невыделенных чекбоксов никакие данные из формы в сценарий не отправляются).

Дальше перебираешь просто:
Код

foreach( $_POST[ 'arr' ] as $k => $v ) {
  // Здесь $k - id очередного юзера.
}


Либо получаешь все индексы через array_keys().
PM WWW   Вверх
Kirill Baranov
Дата 17.8.2006, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 242
Регистрация: 30.6.2004

Репутация: -2
Всего: -2



А почему нельзя сделать:

Код

name="arr[]" 


Тогда массив сам будет создаваться... и будет иметь имя $arr
PM MAIL   Вверх
vasac
Дата 18.8.2006, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 8
Всего: 36



Kirill Baranov, привиди пример, как это сделать применительно к данному случаю.
PM WWW   Вверх
Vaulter
Дата 18.8.2006, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: 6
Всего: 22



vasac, 
Код

<input type="checkbox" value='$user_id' name="users[]" /> 

на странице имеем типа:
Код

<input type="checkbox" value='5' name="users[]" /> 
<input type="checkbox" value='6' name="users[]" /> 
<input type="checkbox" value='3' name="users[]" /> 
<input type="checkbox" value='1' name="users[]" /> 

обрабатываем типа:
Код

$users = $_POST['users'];// get array
/* array:
0=> 5,
1=> 6,
2=> 3,
3=> 1....*/
foreach($users as $user_id)
{
 echo $user_id.' был отмечен<br/>';
}



в принципе, и тот и тот  метод (users[] , users[<id>]) тут можно использовать
различие в обработке. 
бывают конечно ситуации, где применим тот и только тот или другой метод. 
ты сам поймешь это smile когда придет время



--------------------
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0562 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.