проверка формы, сотни флажков

0

Поэтому я создаю форму флажка с более чем 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');

}
Теги:

5 ответов

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 массив q не будет существовать):

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

И просто это для сеансов vars:

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

Так что, может быть:

if(isset($_POST['q'])) {
    $_SESSION['q'] = $_POST['q'];
}
  • 0
    Я попробую это. Спасибо!
  • 0
    Не совсем работает Он распознает, что массив был создан, но, похоже, ничего не назначает внутри массива. Если я это сделаю if(isset($_POST['q'])) { $_SESSION['q'] = $_POST['q']; echo count($q); это дает мне неопределенную ошибку переменной
Показать ещё 3 комментария
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');

}
1

Если вы сделаете все флажки с таким именем, как: name = "myCheckBoxes []", вы можете обработать значение post, как массив.

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}

если статус прав, вы можете перенаправить его/ее на любую страницу, например, ниже

 if($error_status==true){
  header('location: anypage.php');
  }
  else{
  header('location:results.php');
  }
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;
   }
}
Сообщество Overcoder
Наверх
Меню