Поэтому я создаю форму флажка с более чем 200 вопросами (не спрашивайте lol), и я не хочу, чтобы пользователь мог перейти на страницу результатов, не имея МЕНЯ, если бы был установлен один флажок. Проблема в том, что написано что-то вроде этого:
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
массив q
не будет существовать):
if(isset($_POST['q']))
И просто это для сеансов vars:
$_SESSION['q'] = $_POST['q'];
Так что, может быть:
if(isset($_POST['q'])) {
$_SESSION['q'] = $_POST['q'];
}
<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');
}
Если вы сделаете все флажки с таким именем, как: name = "myCheckBoxes []", вы можете обработать значение post, как массив.
Сначала вы можете сделать массив, похожий на рев
<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}
если статус прав, вы можете перенаправить его/ее на любую страницу, например, ниже
if($error_status==true){
header('location: anypage.php');
}
else{
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;
}
}
if(isset($_POST['q'])) { $_SESSION['q'] = $_POST['q']; echo count($q);
это дает мне неопределенную ошибку переменной