簡體   English   中英

表單驗證,數百個復選框

[英]form validation, hundreds of checkboxes

因此,我正在構建一個包含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');

}

使它們成為數組:

<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'];
}

如果使所有復選框的名稱都像:name =“ myCheckBoxes []”,則可以像數組一樣處理發布值。

<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');

}

由於您有命名約定,因此可以循環執行此操作:

$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;
   }
}

首先,您可以制作一個像下面這樣的數組

<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');
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM