4

次のような HTML スキーマがあります。

ここに画像の説明を入力

リンク: http://i.stack.imgur.com/9RRpx.jpg

チェックボックス名: Lunes 列name = arrayLunes[]then、Martes 列name = arrayMartes[]など...

first最初にthird、Lunes リストをテストしたい (月曜日) only [0] and [1][0] = true, [1] = false, [2] = true, [3 .. x] = false

チェックボックスがチェックされていない場合、POSTで送信されないため、このPHPコードのようなものは明らかに機能しません。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 に答える
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)

b値だけでなく、配列キーの違いも追跡できることを忘れていましたc

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 に答える
0

JSを使用したくない場合-これを行うことができます

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

このようにして、チェックボックスの値に対して常に $_POST を受け取ります

于 2013-07-10T15:37:53.167 に答える
0

これを回避する最も簡単な方法は、非表示の入力を value=0 として使用することです。これは、それに続くチェックボックスと同じ名前を持つとしましょう。

チェックボックスがチェックされている場合は、その値が表示されます。チェックされていない場合は、入力の値が使用されます。

于 2013-07-10T15:35:05.423 に答える