[英]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.