Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Инициализация всех элементов массива передаваемых с помощью чекбоксов.
 
 автор: maxtet   (22.10.2008 в 11:54)   письмо автору
 
 

Добрый день. Помогите решить следующую проблему. Вот кусок кода:

<?php
if (!$_POST['go'] || $_POST['back'])

print 
"<form method='post'>
<input type='checkbox' name='add[]' value='1'><br>
<input type='checkbox' name='add[]' value='2'><br>
<input type='checkbox' name='add[]' value='3'><br>
<input type='submit' name='go' value='ок'>
</form>"
;
}
else
{
foreach (
$_POST['add'] as $val)
{print 
$val."<br>";}
print 
"<form method='post'><input type='submit' name='back' value='назад'></form>";
}
?>


Суть проблемы в следующем. Если чекбокс не выбран , то передачи переменной не происходит и соответственно после обработки скрипта браузер выдает следующее сообщение: Warning: Invalid argument supplied for foreach() in Y:\home\10.200.33.104\www\test\index.php on line 21.
Помогите мне в обработчике инициализировать массив в который будет входить столько же элементов, сколько и чекбоксов в отправляющей форме.

  Ответить  
 
 автор: DJ Paltus   (22.10.2008 в 12:35)   письмо автору
 
   для: maxtet   (22.10.2008 в 11:54)
 

вариант вставить заглушку <input type='hidden' name='add[]' value=''> после чекбоксов и иметь в виду, что последний индекс в массиве лишний - не подойдет?

  Ответить  
 
 автор: mechanic   (22.10.2008 в 12:43)   письмо автору
 
   для: maxtet   (22.10.2008 в 11:54)
 

а может проще проверить isset'ом этот $_POST['add']? зачем делать пустой массив, с N элементами, если он не будет использоваться ни для чего, кроме как "пройтись по нему foreach'ем"

  Ответить  
 
 автор: maxtet   (22.10.2008 в 12:50)   письмо автору
 
   для: mechanic   (22.10.2008 в 12:43)
 

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

  Ответить  
 
 автор: DJ Paltus   (22.10.2008 в 12:59)   письмо автору
 
   для: maxtet   (22.10.2008 в 12:50)
 

и количество чекбоксов - не константа?
тогда добавляем счетчик при создании чекбоксов, затем hidden-полем передаем его (а это размерность массива $add) в обработчик, а в обработчике циклом делаем массив пустым, но с достаточным количеством элементов.
Хотя все это как-то дико звучит.

  Ответить  
 
 автор: maxtet   (22.10.2008 в 13:09)   письмо автору
 
   для: DJ Paltus   (22.10.2008 в 12:59)
 

Кол-во чекбоксов - не константа, я привел данный пример для того, что бы реализовать передачу данных через чекбоксы. Кол-во переданных переменных должно соответствовать кол-ву чекбоксов в форме отправителя. Если же переменная не передаётся (чекбокс не выбран), то в обработчике должна создаваться пустая переменная.

  Ответить  
 
 автор: mechanic   (22.10.2008 в 13:04)   письмо автору
 
   для: maxtet   (22.10.2008 в 12:50)
 

а надо избавляться от таких связываний

  Ответить  
 
 автор: vito2   (22.10.2008 в 15:14)   письмо автору
 
   для: maxtet   (22.10.2008 в 11:54)
 


$my_array_size = 10;//размер массива
$new_array = array_fill('',0,$my_array_size);
if(is_array($_POST['add']))
foreach($_POST['add'] as $k=>$v)
$new_array[$k] = $v;

echo '<pre>';
print_r($new_array);
echo '</pre>';


если у тя число этих чекбоксов, определяется не "на лету", то нет смысла чекбоксы массивом делать, но это на мой взгляд

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования