表单验证,数百个复选框

时间:2014-05-08 18:47:36

标签: javascript php html css

所以我要构建一个包含200多个问题的复选框表格(不要问大声笑),我也不希望用户能够在没有至少的情况下进入结果页面选中一个复选框。 问题是,写这样的东西:

if (isset($_POST['q1']) || isset($_POST['q2']) || isset($_POST['q3'])..............)

数百个问题将会......很长。有没有办法缩短它?

代码段:

<input type="checkbox" name="q1" onclick="KeepCount()" value="1">Question 1<br>
<input type="checkbox" name="q2" onclick="KeepCount()" value="1">Question 2<br>
<input type="checkbox" name="q3" onclick="KeepCount()" value="1">Question 3<br>
<input type="checkbox" name="q4" onclick="KeepCount()" value="1">Question 4<br>
<input type="checkbox" name="q5" onclick="KeepCount()" value="1">Question 5<br>
<input type="checkbox" name="q6" onclick="KeepCount()" value="1">Question 6<br>
    <input type="submit" name="button" class="button" value="Submit" /> 
</form>

 <?php 
include 'defaults.php';
if(isset($_POST['button'])) {
   if(isset($_POST['q1'])) {$_SESSION['q1v'] = 1;};
   if(isset($_POST['q2'])) {$_SESSION['q2v'] = 1;};
   if(isset($_POST['q3'])) {$_SESSION['q3v'] = 1;};
   if(isset($_POST['q4'])) {$_SESSION['q4v'] = 1;};
   if(isset($_POST['q5'])) {$_SESSION['q5v'] = 1;};
   if(isset($_POST['q6'])) {$_SESSION['q6v'] = 1;};

   header('Location: results.php');

}

5 个答案:

答案 0 :(得分:3)

让它们成为一个数组:

<input type="checkbox" name="q[1]" onclick="KeepCount()" value="1">Question 1<br>
<input type="checkbox" name="q[2]" onclick="KeepCount()" value="1">Question 2<br>
etc...

然后检查是否检查了至少一个(如果没有选中,则q数组将不存在):

if(isset($_POST['q']))

简单地说这是会话变量:

$_SESSION['q'] = $_POST['q'];

所以也许:

if(isset($_POST['q'])) {
    $_SESSION['q'] = $_POST['q'];
}

答案 1 :(得分:1)

如果您使所有复选框的名称如下:name =&#34; myCheckBoxes []&#34;然后你可以像数组一样处理post值。

答案 2 :(得分:1)

<input type="checkbox" name="q[]" onclick="KeepCount()" value="1">Question 1<br>
<input type="checkbox" name="q[]" onclick="KeepCount()" value="1">Question 2<br>
<input type="checkbox" name="q[]" onclick="KeepCount()" value="1">Question 3<br>
<input type="checkbox" name="q[]" onclick="KeepCount()" value="1">Question 4<br>
<input type="checkbox" name="q[]" onclick="KeepCount()" value="1">Question 5<br>
<input type="checkbox" name="q[]" onclick="KeepCount()" value="1">Question 6<br>

 <?php 
include 'defaults.php';
if(isset($_POST['q'])) {
  $questions=$_POST['q'];   <-- $questions is an array and easier to work with

   header('Location: results.php');

}

答案 3 :(得分:0)

由于您有一个命名约定,您可以在循环中执行此操作:

$checkbox_count = 200;
$prefix = 'q';

for($i = 1; $i <= $checkbox_count; $i++){
   $key = sprintf("%s%u", $prefix, $i);
   if(isset($_POST[$key])){
      $_SESSION[$key.'v'] = 1;
   }
}

答案 4 :(得分:0)

首先,您可以创建一个类似于下面的数组

<input type="checkbox" name="myarray[]" onclick="KeepCount()" value="1">Question 1<br> <input type="checkbox" name="myarray[]" onclick="KeepCount()" value="1">Question 2<br>

然后将值作为像下面的数组

$ myarray = $ _POST ['myarray'];`

然后用php foreach检查它们,它们是空的

 foreach($myarray as $key=>$value){
  if(!isset($value)){
  $error_status = true}

如果状态为true,您可以将他/她重定向到任何页面,如下面的

 if($error_status==true){
  header('location: anypage.php');
  }
  else{
  header('location:results.php');
  }