|
|
|
| Есть несколько полей,каждому полю стоит в соответствии checkbox
<input type="text" name="n[]" />
<input name="reg[]" type="checkbox" value="1" />
<input type="text" name="n[]" />
<input name="reg[]" type="checkbox" value="1" />
<input type="text" name="n[]" />
<input name="reg[]" type="checkbox" value="1" />
|
надо проверит включен ли checkbox соответствующего поля
проверял через isset но результат не верный
for ($i=0; $i<count($_POST['n']); $i++)
{
$ch = isset($_POST['reg'][$i]) ? intval($_POST['reg'][$i]) : 0;
echo '<br/>checkbox '.$i.' -- '.$ch;
}
|
если использовать дополнительные поля
<input type="hidden" name="reg[]" value="0">
то тоже не верный результат..массив увеличивается в двое
[reg] => Array
(
[0] => 0
[1] => 1
[2] => 0
[3] => 1
[4] => 0
[5] => 1
)
|
| |
|
|
|
|
|
|
|
для: serjinio
(28.07.2009 в 14:35)
| | Ошибка именно в isset. array_map('intval', $_POST['reg']) - вернет вам все чекбоксы, без всякого цикла. | |
|
|
|
|
|
|
|
для: sim5
(28.07.2009 в 14:44)
| | array_map('intval', $_POST['reg'])..Что-то ругается на второй аргумент
Warning: array_map() [function.array-map]: Argument #2 should be an array | |
|
|
|
|
|
|
|
для: serjinio
(28.07.2009 в 14:59)
| | Ошибка говорит о том, что второй аргумент функции не является массивом, хотя $_POST, это массив. Значит вы запендюрили эту функцию, не проверив, пришел ли вам массив $_POST. Проверьте:
<?
print_r(array_map('intval', array(1, 2, 3, 'a', 5)));
|
Если ваши чекбоскы служат для проверки выбора/не выбора определенных ID, то значениям этих чебоксов укажите не единички, а ID. Тогда вышеприведенный код позволит получить только реальные ID возвращенные пользователем. Можно ID указать и как ключи массива $_POST. В этом случае можно проверить вышеприведенным способом ключи, либо значения, но предварительно array_flip($_POST['reg']). Если указывать ключам ID, то значения для чекбоксов можно не указывать, невыбранные чекбоксы не передаются на сервер, а установленные передают значение "on".
В общем как делать проверку, зависит от того, чему служат ваши чекбоксы, а чему они служат я не знаю. | |
|
|
|
|
|
|
|
для: sim5
(28.07.2009 в 15:49)
| | Прошу прощение за паузу..к сожалению мне array_map не подходит кроме вышеуказанных полей присутствуют поля type="file"
смысл заключается в том что на страницу динамически те(произвольное количество )выводятся поля
выбор картинки ее описание и чекбокс ..опубликовывать или нет
далее они поступают в обработчик который загружается во фрейме ..он принимает массив $_FILES и массив$_POST текстовых полей и чекбоксов...обрабатывает это в цикле
for ($i=0; $i<count($_FILES['fl']['name']); $i++) {
if (is_uploaded_file($_FILES['fl']['tmp_name'][$i]) == TRUE)
{
проверки..ресайз....
$Description=$_POST['descr'][$i]...
$img_name=$_POST['n'][$i]== ...
проверка чекбоксов......
$hide_info=$_POST['reg'][$i].............
запись в БД.....
$Message.='<div ><img src="'.$filename_thumb_path.'" width="160" height="120" border="0" /></div><p>Описание : <span class="info">'.$Description.'</span></p>
<p class="in">Статус просмртра : '.$hide_info.' </p>' и тд....
}
<script type="text/javascript">
parent.document.getElementById("imageId").innerHTML ='<?php echo $Message ?>';
</script>
|
делает ресайз картинок и выводит в этом фрейме блоки типа AJAX во фрейме...в которых превьюшка и данные к ней типа описание и включен или выключен чекбокс ..одновременно производится запись в Бд (в цикле) имя картинки ее параметры,описание ,название и значение чекбокса(для нее)..те опубликовывать или нет...
те все запустил но проблема привязки значений чекбоксов к картинкам.... | |
|
|
|
|
|
|
|
для: serjinio
(29.07.2009 в 00:38)
| | И почему это вам array_map не подходит? А если подумать? :) Текстовые поля, и поля загружаемых файлов должны иметь в имени своем индекс равный ID записи, а чекбоксы этот индекс содержат в качестве значения. Тогда:
<?
//получаем массив полей которые выбраны
$checked = array_map('intval', $_POST['check']);
//далее по этому массиву проверяем все
//получаем только выбранные описания
$desc = array_intersect_key($_POST['desc'], array_flip($checked));
//а в цикле проверки загруки изображений выбираем только те, что отмечены
//имеются в массиве $checked
|
| |
|
|
|
|
|
|
|
для: serjinio
(28.07.2009 в 14:35)
| | а и не получится.
[] портят всю малину.
нужно использовать как-то так:
<input type="text" name="n[1]" />
<input name="reg[1]" type="checkbox" value="1" />
<input type="text" name="n[2]" />
<input name="reg[2]" type="checkbox" value="1" />
|
без этого нельзя определить, какой чекбокс чему относится (просто потому, что если флаг не отмечен, значение не посылается) | |
|
|
|
|
|
|
|
для: x64
(28.07.2009 в 14:51)
| | думаю, при данной задаче массив ничего не портит:
просто в значении чекбокса нужно передавать не 1, а, конкретное значение-идентификатор, то есть
<input name="reg[]" type="checkbox" value="10" />
<input name="reg[]" type="checkbox" value="12" />
|
после сабмита будут доступны выбранные айди. | |
|
|
|
|
|
|
|
для: ride
(28.07.2009 в 15:17)
| | ><input name="reg[1]" type="checkbox" value="10" />
><input name="reg[2]" type="checkbox" value="12" />
>просто в значении чекбокса нужно передавать не 1, а, конкретный идентификатор
лишнее это. | |
|
|
|
|
|
|
|
для: Trianon
(28.07.2009 в 15:17)
| | не очень понятно. | |
|
|
|
|
|
|
|
для: ride
(28.07.2009 в 15:23)
| | Так понятнее? | |
|
|
|
|
|
|
|
для: Trianon
(28.07.2009 в 15:26)
| | если вы о reg[1] - то это я копипастил, потом исправил.
а вообще, думаю, оба варианта имеют право на жизнь:
<input type="checkbox" name="reg[]" value="22">
и
<input type="checkbox" name="reg[22]" value="1">
|
в обоих методах можно добраться до цифры 22
впринципе,
<input type="checkbox" name="reg[22]" value="22">
| - тоже вариант и ни к каким плохим последствиям не приведет. | |
|
|
|
|
|
|
|
для: ride
(28.07.2009 в 15:31)
| | >впринципе,
>
<input type="checkbox" name="reg[22]" value="22">
| - тоже вариант и ни к каким плохим последствиям не приведет.
Конечно. Равно как возможен и следующий вариант:
<input type="checkbox" name="reg[22]" value="Повторяю для тех, кто в танке, 22 (двадцать второй нумер) отмечен! 22 is on!!! ">
|
Вопрос лишь, зачем? | |
|
|
|
|
|
|
|
для: Trianon
(28.07.2009 в 15:36)
| | смешной примерчик. убедили :) | |
|
|
|
|
|
|
|
для: Trianon
(28.07.2009 в 15:17)
| | Можно у Вас просто поинтересоваться, а то мне уже неудобно ответы постить? А разве не логичнее здесь применить foreach? | |
|
|
|
|
|
|
|
для: Рома
(28.07.2009 в 17:20)
| | если тут:
><input name="reg[1]" type="checkbox" value="10" />
><input name="reg[2]" type="checkbox" value="12" />
флажок не отмечен, браузер значение не передаёт. | |
|
|
|
|
|
|
|
для: x64
(28.07.2009 в 17:23)
| | >флажок не отмечен, браузер значение не передаёт.
А восемь умножить на восемь равно шестьдесят четыре. | |
|
|
|
|
|
|
|
для: Рома
(28.07.2009 в 17:35)
| | стебун?
смотря для чего это нужно.
для данного вопроса (как Я его понял), проще посмотреть наличие $_POST['reg'][1]
а не изгаляться через
foreach ($_POST['reg'] as $v) {
switch ($v) {
case 10: <код>; break;
case 20: <код>; break;
…
}
}
если понял не так, то проще просуммировать все значения $_POST['reg'] (аналог SET в mysql; для этого value-значение представляются как степень двойки. удобно)
ps: одним людям мозг нужен для того, чтобы думать; другим — чтобы не ‘бухало’, когда стучишь по голове… | |
|
|
|
|
|
|
|
для: Рома
(28.07.2009 в 17:20)
| | дело вкуса.
По мне так array_map выглядит симпатичней. | |
|
|
|