перебирая галочки в php, неожиданные результаты - PullRequest
0 голосов
/ 29 декабря 2011

Я перебираю кучу полей типа массива.У меня есть два флажка с именами «taxable []» и «ship []»

Я ввел эти флажки в mysql и заметил, что все остальные поля в моей форме отправлялись правильно, кроме этих.

если у меня есть 6 рядов флажков, и я снимаю галочку с первого ряда.затрагивается последний ряд флажков.

аналогично, если я снимаю флажок с первых двух строк, это затрагивает последние две строки.

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

    echo sizeof($post["prodID"]);

    for($i = 0; $i<sizeof($post["prodID"]); $i++){         

        echo $i.' taxable  '.$post["taxable"][$i].' '.$i.' ship  '.$post["ship"][$i].'  <br />';

         continue;
    }

html для формы:

<? foreach($products as $prod): ?>
                <tr class="<?= $prod["activeText"] ?>">
                    <td><?= $prod["productid"] ?></td>
                    <td><input type="text" name="name[]" value="<?= $prod["itemname"] ?>"/></td>
                    <td><textarea name="description[]"><?= $prod["description"] ?></textarea></td>
                    <td><input type="text" name="cost[]" value="<?= $prod["cost"] ?>"/></td>
                    <td><input type="text" name="price[]" value="<?= $prod["price"] ?>"/></td>
                    <?php $checked = ($prod["taxable"] == 1) ? "checked='checked'" : ""; ?>
                    <td style="padding:0px;"><input style="position:relative; right:-10px;"type="checkbox" name="taxable[]" <?= $checked ?>/></td>
                    <td>   
                        <select name="tax[]">
                            <?php foreach($taxes as $tax){ 
                                $selected = ($prod["inventoryTaxRateID"] == $tax["inventoryTaxRateID"]) ? 'selected="selected"' : '';
                             ?>
                            <option <?= $selected ?> value="<?= $tax["inventoryTaxRateID"] ?>"><?= $tax["name"] ?></option>
                            <?php } ?>
                        </select>
                    </td>
                    <?php $ship = ($prod["ship"] == 1) ? 'checked' : '' ?>
                    <td><input type="checkbox" name="ship[]" <?= $ship ?> /></td>
                    <td><input type="text" name="sandh[]" value="<?= $prod["shipping_handling"] ?>"/></td>

                    <td><?= $prod["activeText"] ?></td>
                    <td>
                        <? if($prod["inactive"] !== null): ?>
                            <input type="button" name="changeStatus" value="<?=  $prod["buttonText"] ?>" onclick="window.location='<?= base_url() ?>management/productManager/activate/<?= $prod["inventoryItemID"] ?>/<?= $prod["activeStatus"] ?>/<?= $category ?>'" />
                        <? endif; ?>
                        <input type="hidden" name="prodID[]" value="<?= $prod["inventoryItemID"] ?>" />
                        <input type="hidden" name="cat[]" value="<?= $prod["cat"] ?>" />
                    </td>
                </tr>
                <? endforeach; ?>

Ответы [ 2 ]

4 голосов
/ 29 декабря 2011

Это потому, что PHP получает только выбранные флажки.Не выбранные флажки не отправляются браузером.Пример

<input type="checkbox" name="ship[]" value="1" />
<input type="checkbox" name="ship[]" value="2" />
<input type="checkbox" name="ship[]" value="3" />
<input type="checkbox" name="ship[]" value="4" />

Если вы установите первый и последний флажок, браузеры будут отправлять только первый и последний флажок.PHP будет видеть $_POST['ship'] как

Array(
    [0] => 1
    [1] => 4
)
0 голосов
/ 30 декабря 2011

Вы можете добавить индексы к входным именам, которые, вероятно, решат вашу проблему.

т.е..

<input type="checkbox" name="ship[0]" value="ship1" />
<input type="checkbox" name="ship[1]" value="ship2" />
<input type="checkbox" name="ship[2]" value="ship3" />
<input type="checkbox" name="ship[3]" value="ship4" />

Если вы затем выберите корабль 1 и корабль 3, $ _POST ['ship'] [0] и $ _POST [' ship '] [2] будут установлены, а остальные не будут присутствовать в массиве $ _POST, поскольку они не были отправлены с формой.

Затем вы можете выполнить итерациюс помощью array_keys ($ _ POST ['ship'])

т.е..

if(is_array($_POST['ship']))
{
    foreach(array_keys($_POST['ship']) as $index)
    {
        echo $_POST['ship'][$index]."<br />";
    }
}

Что должно повторять все выбранные значения

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