флажки параллельного массива php mysql - PullRequest
0 голосов
/ 24 марта 2010

У меня есть массив флажков, которые я редактирую сразу, чтобы настроить поле tinyint. проблема возникает, когда я снимаю флажок и отправляю вейлс в mysql. так как он отправляет массив флажков и другой параллельный массив значений для редактирования, снятие флажка приводит к тому, что значение 0 игнорируется PHP_POST, и, следовательно, массив флажков будет меньше на количество непроверенных значений в форме, а массив для редактирования будут иметь все записи в форме.

вот код подтверждения

while($row=mysql_fetch_array($result))
{

$checked = ($row[active]==1) ? 'checked="checked"' : '';
...

echo "<input type='hidden' name='TrID[]' value='$TrID'>";
echo "<input type='checkbox' name='active1[]' value='$row[active]''$checked' >";
...

и скрипт php

$userid = ($_POST['TrID']);
$checked= ($_POST['active']);

$i=0;

foreach ($userid as $usid) 
{

if ($checked[$i]==1){
$check = 1;
}
else{
$check = 0;
}

$qry1 ="UPDATE  `epapers`.`clientelle` SET  `active` =  '$check' WHERE  `clientelle`.`user_id` =  '$usid' ";
$result = mysql_query($qry1);   
$i++;

}

Ответы [ 4 ]

0 голосов
/ 24 марта 2010

У меня есть собственный сценарий, который я использую для этого ... посмотрим, сможете ли вы его адаптировать или я где-то в курсе того, что вы пытаетесь сделать.

Схема: ряды продуктов, каждый из которых имеет флажок, который пользователь может установить, чтобы указать, что этот продукт необходимо добавить в корзину, чтобы увидеть цену.

Код:
<td><input type="checkbox" name="addforprice[<?php echo $record['id']; ?>]" /></td>

Тогда, когда форма отправлена:

если ($ _ POST [ 'addforprice']) {
foreach (array_keys ($ _ POST ['addforprice']) как $ var) {
$ data ['add_for_price'] = 1;
$ update = $ db-> query_update (TABLE_PRODUCTS, $ data, "id =". $ var);
echo "addforprice:". $ var. ' ». $ данных [ 'add_for_price']. '
;
переменные не установлены ($ данные [ 'addforprice']);
}
}

$record['id'] - это идентификатор базы данных, сгенерированный при печати строк.

0 голосов
/ 24 марта 2010

Вы можете попробовать что-то вроде:

$i = 0;
while($row=mysql_fetch_array($result))
{

$i++;
$checked = ($row[active]==1) ? 'checked="checked"' : '';
...

echo "<input type='hidden' name='TrID[{$i}]' value='$TrID'>";
echo "<input type='checkbox' name='active1[{$i}]' value='$row[active]''$checked' >";
...

Флажки должны быть как минимум в нужном месте в массиве ...

0 голосов
/ 24 марта 2010

Флажки не должны иметь одинаковые имена, но каждый из них должен иметь разные имена. Вы можете решить свою проблему, изменив первую страницу следующим образом:

$i = 0;
while($row=mysql_fetch_array($result))
{

$checked = ($row[active]==1) ? 'checked="checked"' : '';
...

echo "<input type='hidden' name='TrID[$i]' value='$TrID'>";
echo "<input type='checkbox' name='active1[$i]' value='$row[active]''$checked' >";
$i++;
...

И соответственно настроить второй скрипт ...

0 голосов
/ 24 марта 2010

Вы можете использовать ключ первого массива, чтобы получить правильный элемент второго ...

$userid = ($_POST['TrID']);
$checked= ($_POST['active']);

foreach ($userid as $key => $usid) 
{

if ($checked[$key]==1){
$check = 1;
}
else{
$check = 0;
}

$qry1 ="UPDATE  `epapers`.`clientelle` SET  `active` =  '$check' WHERE  `clientelle`.`user_id` =  '$usid' ";
$result = mysql_query($qry1);   

}

EDIT Если это не работает, попробуйте добавить числовые индексы к именам элементов в коде HTML. Как это:

echo "<input type='hidden' name='TrID[".$i."]' value='$TrID'>";
echo "<input type='checkbox' name='active1[".$i++."]' value='$row[active]''$checked' >";

Вам, очевидно, придется установить $i в ноль перед циклом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...