4

我有一个这样的 HTML 架构:

在此处输入图像描述

链接:http: //i.stack.imgur.com/9RRpx.jpg

复选框名称:然后是 Lunes 列name = arrayLunes[]、Martes 列name = arrayMartes[]等...

首先,我想测试 Lunes 列表(星期一),如果我检查了firstthird,则数组将具有only [0] and [1]数组位置,但我想要例如:[0] = true, [1] = false, [2] = true, [3 .. x] = false

像这样的 PHP 代码,显然是行不通的,因为如果未选中复选框,则不会通过 POST 发送,所以它将是index offset error

for ($c = 0; $c < count($_POST['arrayLunes']); $c++)
    echo ($_POST['arrayLunes'][$c] == 'on' ? "YES" : "NO");

结论:所以,现在,该$_POST['arrayLunes']变量将只包含顺序checkbox checked,我也需要未选中的,在他各自的位置。

我该怎么做或如何模拟它?

编辑

我的 HTML 代码是这样的

<div style="margin-left: 5px; padding: 5px;">
    <input class="btnFranjas" type="button" value="- Quitar franja" onclick="removerFranjaCalendario();" />
    <input class="btnFranjas" type="button" value="+ Añadir franja" onclick="addFranjaCalendario();" />
    <input class="btnFranjas" type="button" value="Reestablecer" onclick="reestablecerFranja();" />
</div>
<form action="index.php?zona=plataforma&id=<?php echo $_GET['id']; ?>&acceso=<?php echo $_GET['acceso']; ?>" method="post">
    <table id="tablaCalendario">
        <thead>
            <th>Horario</th>
            <th>Lunes</th>
            <th>Martes</th>
            <th>Miércoles</th>
            <th>Jueves</th>
            <th>Viernes</th>
            <th>Sábado</th>
            <th>Domingo</th>
        </thead>
        <tbody>
            <tr style="background: #E0E6F8;">
                <td>
                    <table>
                        <tr>
                            <td><b>Inicio: </b></td>
                            <td>
                                Hora
                                <select id='arrayInicioHora[]' name='arrayInicioHora[]'>
<?php
                                    for ($c = 0; $c < 24; $c++)
                                        echo "    <option value='" . $c . "'>".($c > 9 ? $c : "0" . $c)."</option>";
?>
                                </select>
                            </td>
                            <td>
                                Minuto
                                <select id='arrayInicioMinuto[]' name='arrayInicioMinuto[]'>
<?php
                                    for ($c = 0; $c < 60; $c++)
                                        echo "<option value='" . $c . "'>".($c > 9 ? $c : "0" . $c)."</option>";
?>
                                </select>
                            </td>
                        </tr>
                        <tr>
                            <td><b>Fin: </b></td>
                            <td>
                                Hora
                                <select id='arrayFinHora[]' name='arrayFinHora[]'>
<?php
                                    for ($c = 0; $c < 24; $c++)
                                        echo "<option value='" . $c . "'>".($c > 9 ? $c : "0" . $c)."</option>";
?>
                                </select>
                            </td>
                            <td>
                                Minuto
                                <select id='arrayFinMinuto[]' name='arrayFinMinuto[]'>
<?php
                                    for ($c = 0; $c < 60; $c++)
                                        echo "    <option value='" . $c . "'>".($c > 9 ? $c : "0" . $c)."</option>";
?>
                                </select>
                            </td>
                        </tr>
                    </table>
                </td>
                <td align="center"><input type="checkbox" name="arrayLunes[]" id="arrayLunes[]" value="0" /> <input type="text" placeholder="Valor" name="arrayValorLunes[]" id="arrayValorLunes[]" style="width: 60px;" /></td>
                <td align="center"><input type="checkbox" name="arrayMartes[]" id="arrayMartes[]" value="0" /> <input type="text" placeholder="Valor" name="arrayValorMartes[]" id="arrayValorMartes[]" style="width: 60px;" /></td>
                <td align="center"><input type="checkbox" name="arrayMiercoles[]" id="arrayMiercoles[]" value="0" /> <input type="text" placeholder="Valor" name="arrayValorMiercoles[]" id="arrayValorMiercoles[]" style="width: 60px;" /></td>
                <td align="center"><input type="checkbox" name="arrayJueves[]" id="arrayJueves[]" value="0" /> <input type="text" placeholder="Valor" name="arrayValorJueves[]" id="arrayValorJueves[]" style="width: 60px;" /></td>
                <td align="center"><input type="checkbox" name="arrayViernes[]" id="arrayViernes[]" value="0" /> <input type="text" placeholder="Valor" name="arrayValorViernes[]" id="arrayValorViernes[]" style="width: 60px;" /></td>
                <td align="center"><input type="checkbox" name="arraySabado[]" id="arraySabado[]" value="0" /> <input type="text" placeholder="Valor" name="arrayValorSabado[]" id="arrayValorSabado[]" style="width: 60px;" /></td>
                <td align="center"><input type="checkbox" name="arrayDomingo[]" id="arrayDomingo[]" value="0" /> <input type="text" placeholder="Valor" name="arrayValorDomingo[]" id="arrayValorDomingo[]" style="width: 60px;" /></td>
            </tr>
        </tbody>
    </table>
    <input class="orangebutton" type="submit" name="enviarCalendario" id="enviarCalendario" onclick="return confirmacionAccion();" value="Enviar calendario" />
</form>

我的 javascript 用于此示例:http: //pastebin.com/eKFwMFvD

4

7 回答 7

3

有一个技巧,所以你总是会收到一个复选框的值:

<input type="hidden" name="arrayLunes[1]" value="0">
<input type="checkbox" name="arrayLunes[1]" value="1">

<input type="hidden" name="arrayLunes[2]" value="0">
<input type="checkbox" name="arrayLunes[2]" value="1">

因此,如果选中该复选框,您将收到1价值,如果没有,您将获得0.

编辑:

就像丹尼尔说你有不止一个arrayLunes。因此,您必须手动向数组表示法添加索引。看上面。

要遍历您的复选框,请执行以下操作:

foreach($_POST['arrayLunes'] as $val)
    echo $val ? "YES" : "NO";
于 2013-07-10T15:35:00.550 回答
3

在我看来,最好的解决方案是使用isset()而不是与复选框的值进行比较。

但是,为了做到这一点,您需要通过其他一些机制知道页面上有多少个复选框。

因此,当您生成页面时,我建议您添加:

<input type="hidden" name="rowcount" value="<?=$x?>">

...在包含表格行的表单中的某处,其中$x是页面上创建的行数。

这样,接收表单的代码可以简单地执行以下操作:

for ($c = 0, $count = (int) $_POST['rowcount']; $c < $count; $c++)
{
    echo isset($_POST['arrayLunes'][$c]) ? "YES" : "NO";
}
于 2013-07-10T15:43:41.013 回答
1

我不知道您的 HTML 是如何构建的,但假设您有以下复选框:

<input type="checkbox" name="check[]" value="a" />
<input type="checkbox" name="check[]" value="b" />
<input type="checkbox" name="check[]" value="c" />
<input type="checkbox" name="check[]" value="d" />
<input type="checkbox" name="check[]" value="e" />

在这种情况下,如果所有这些都已发布,则 $_POST['check'] 将包含 0=>a、1=>b 等等。

如果只检查第一个和最后一个,您将有 1=>a,2=>e,您需要查看哪些未检查 (b,c,d)

我的解决方案如下:

从 HTML 中获取所有复选框并与发布的复选框进行比较:

$doc = new DOMDocument();
$doc->loadHTMLFile('test6.php');
$cboxes = $doc->getElementsByTagName('input');
foreach ($cboxes as $cbox) {
       if($cbox->getAttribute('type') == 'checkbox') {
           $cb[] = $cbox->getAttribute('value');
       }
}
$differences = array_diff($cb, $_POST['check']);
var_dump($differences);

如果ae被发布,这将输出:

array (size=3)
  1 => string 'b' (length=1)
  2 => string 'c' (length=1)
  3 => string 'd' (length=1)

我忘了提到它也可以跟踪数组键的差异,而不仅仅是值,例如如果bc被发布(1和2键),输出将是:

array (size=3)
  0 => string 'a' (length=1)
  3 => string 'd' (length=1)
  4 => string 'e' (length=1)

所以未发布的键是 0,3,4

$differences = array_diff($cb, $_POST['check']);
var_dump($differences); // unposted checkboxes with relevant keys
$diff1 = array_diff($cb,$differences);
var_dump($diff1); // posted checkboxes with relevant keys
于 2013-07-10T15:51:08.443 回答
1

尝试这个,

foreach($_POST['arrayLunes']) as $index=>$value)
    echo ($value == 'on' ? "YES" : "NO").' index='.$index;

读取从 POST 获取复选框数组值

于 2013-07-10T15:41:15.917 回答
1

如果您的数据库中每一行都有一个唯一的 ID,请将其添加到每列的括号中,并结合隐藏元素技巧以始终获取 POST:

<input type="hidden" name="arrayLunes[1]" value="0" />
<input type="checkbox" name="arrayLunes[1]" value="1" />

<input type="hidden" name="arrayLunes[2]" value="0" />
<input type="checkbox" name="arrayLunes[2]" value="1" />
于 2013-07-10T15:43:30.843 回答
0

最简单的解决方法是使用隐藏输入作为 value=0 假设它与它后面的复选框具有相同的名称。

如果复选框被选中,您将看到它的值,如果没有,则将使用输入的值。

于 2013-07-10T15:35:05.423 回答
0

如果你不想使用 JS - 你可以这样做

<input type="hidden" name="arrayLunes" value="0" />
<input type="checkbox" name="arrayLunes" value="1" />

这样,您始终会收到 $_POST 复选框值

于 2013-07-10T15:37:53.167 回答