验证是否使用isset选中复选框,每个复选框都具有相同的名称

时间:2014-05-27 18:44:44

标签: php html

我有一个复选框组,每个复选框都有相同的名称&#34; horarios []&#34;,因为我将它保存在一个带有php的数组中,所以我可以显示已检查的那些... < / p>

验证时我需要将每个复选框与变量进行比较,看看是否可以发送邮件..

问题是如何才能单独访问每个输入以进行验证?

我猜这样的事情,但是没有用!

HTML:

<input type='checkbox' name='horarios[]' value='Lunes 8:30hs-Clase grupal' id="lun8" onclick="displaySelectedCheckBox(this)"/><label for="lun8"></label>

<button type="submit" id="submit" method="post" name="submit"></button>

PHP:

@$cuposlun8=14;

    if(isset($horarios['Lunes 8:30hs-Clase grupal']) && $cuposlun8>=14){
        echo '<script>alert("Cupos para lun8 agotados");</script>';
    }else{
        @mail($recipient, $subject, $mensaje, $header); //mail command :)
    }

5 个答案:

答案 0 :(得分:2)

传递给PHP的数组的名称是PHP中的horarios [],你可以使用foreach循环。

检查密钥而不是值。因此,如果设置了所有值,则需要循环遍历所有值。在数组中设置这些值并进行双重foreach循环会很好。

所以而不是

if(isset($horarios['Lunes 8:30hs-Clase grupal'])

它看起来更像是

$canSend = false;
foreach($horarios[] as $val)
{
   if($val == 'Lunes 8:30hs-Clase grupal') { $canSend = true; break; }
}
if($canSend) // send email there

PHP中的数组也可以通过$_GET['horarios']$_POST['horarios']获取,具体取决于表单标记中的“方法”。

答案 1 :(得分:0)

PHP将接收任何名为horarios[]的输入组作为数组。当你没有指定数组索引(或键)时,它将自动假设从0开始增加整数。换句话说,它就像你有一组输入一样:

<input name="horarios[0]" />
<input name="horarios[1]" />
<input name="horarios[2]" />
<input name="horarios[...]" />

所以如果你print_r($horarios),你会得到这样的东西(输入索引=&gt;输入值):

Array(
    0 => 'Lunes 8:30hs-Clase grupal',
    1 => 'Second CHECKED input value',
    // [...] And so forth
)

由于 PHP只会收到已检查的输入,因此您必须对其进行迭代并在forforeach循环内进行验证。

答案 2 :(得分:0)

我假设您尝试使用表单发送信息。

然后你的HTML应该是这样的:

<form action="#" method="POST">
<input type='checkbox' name='horarios[]' value='Lunes 8:30hs-Clase grupal' id="$
<button type="submit">Submit</button>
</form>

在您的PHP脚本上,您可以使用print_r($_POST)检查POST参数的内容(您可以将其放在预标签内以便于阅读)。

在您的情况下,您将按如下方式发送数据

Array
(
    [horarios] => Array
        (
            [0] => Lunes 8:30hs-Clase grupal
        )
)

因此,在您的代码中,您应该检查$ _POST [&#39; horarios&#39;] [$ i],其值将是您设置复选框的值之一。你的情况如下:

if($_POST['horarios'][$i] == "Lunes 8:30hs-Clase grupal" && $cuposlun8>=14) {...}

答案 3 :(得分:0)

当您将复选框组名称发送为horários[]时,您将其转换为na数组。对于复选框组中的每个项目,您将在数组中有一个位置,按照您在表单中声明的​​确切顺序。

例如,如果您使用以下三个框提交表单:

<input type='checkbox' name='horarios[]' value='Lunes 8:30hs-Clase grupal'>
<input type='checkbox' name='horarios[]' value='Lunes 9:30hs-Clase grupal'>
<input type='checkbox' name='horarios[]' value='Lunes 10:30hs-Clase grupal'>

然后你在一个$ _POST变量中得到它作为一个数组并迭代它来比较这些值。重要的是要记住,如果未选中其中一个复选框,则该位置不会在数组中注册,因此如果您有三个框并且只检查了两个,则您的阵列将只有两个位置。

<?
$horarios = $_POST["horarios"];
foreach($horarios as $horario){

    if($horario == "Lunes 8:30hs-Clase grupal"){
        ...;
    } else if ($horario == "Lunes 9:30hs-Clase grupal"){
        ...;
    } else if ($horario == "Lunes 10:30hs-Clase grupal"){
        ...;
    }
}
?>

答案 4 :(得分:-1)

这样做:

<form action ='' method='post' name ='horarios'>
   <input type='checkbox' name='horarios[lun8]' value='Lunes 8:30hs-Clase grupal'    id="lun8" onclick="displaySelectedCheckBox(this)"/><label for="lun8"></label>

    <input  type="submit" id="submit"  name="submit"/>
</form>

<强> PHP

$cuposlun8=14;
$horarios = $_POST['horarios'];

if(isset($horarios['lun8']) && $horarios['lun8'] == 'Lunes 8:30hs-Clase grupal' && $cuposlun8>=14){
    echo '<script>alert("Cupos para lun8 agotados");</script>';
}else{
    mail($recipient, $subject, $mensaje, $header); //mail command :)
}