Проверка нескольких входов с более коротким кодом в PHP - PullRequest
0 голосов
/ 07 июня 2018

В приведенном ниже коде показан процесс проверки 2 полей ввода.В конце я возвращаю в Json логический результат каждого ввода.

Представьте, что я сделаю следующие 20 раз больше, код большой.Как я могу выполнить ту же процедуру с более коротким кодом?

$res =false;
$res2 = false;
    if(isset($_POST['Ans1'])) //if user checked ans1 radio
        {
          if($_POST['Ans1'] == "x divides y") #correct answer
          {
                $res = true;
          }
          else{#wrong answer
              $res = false;
          }
        }
        else{ #not checked
            $res = false;  
        }


        if(isset($_POST['Ans2'])) //if user checked ans2 radio
        {
          if($_POST['Ans2'] == "x greater than y") #correct answer
          {
                $res2 = true;
          }
          else{#wrong answer
              $res2 = false;
          }
        }
        else{ #not checked
            $res2 = false;
        }

        echo json_encode(['an1'=>$res,'an2'=>$res2]); 

Ответы [ 3 ]

0 голосов
/ 07 июня 2018

Вы можете зациклить $ _POST и использовать массив с правильными ответами для сравнения.

Возвращаемое значение - массив с истиной / ложью на каждый ответ.

$correct = ["x divides y", "x greater than y"]; // and so on...
$i=0;
foreach($_POST as $key => $Ans){
    if(isset($Ans)){ //if user checked radio
        if($Ans == $correct[$i]){ #correct answer
            $res[$key] = true;
        }else{ #wrong answer
            $res[$key] = false;
        }
    }else{ #not checked
        $res[$key] = false;  
    }
    $i++;
}
echo json_encode($res); // example: Ans1 : true, Ans2 : false

Если у вашего $_POST есть другие значения, вы можете использовать preg_grep для фильтрации только ответов.

$POST = preg_grep("/Ans\d+/", $_POST);

А затем зациклите $ POST.

0 голосов
/ 07 июня 2018

Вы можете использовать функцию для проверки ответа, как этот:

function checkAnswer($key, $val) {
    $mapping = [
        'Ans1' => 'x divides y',
        'Ans2' => 'x greater than y'
    ];

    return $mapping[$key] == $val;
}

Вам понадобится отображение ответов.Затем вы можете зациклить массив POST, чтобы проверить ответы;если у POST есть только ответы.

$result = [];
foreach($_POST as $key => $val) {
    $res = checkAnswer($key, $val);
    $result[$key] = $res;
}
echo json_encode($result);
0 голосов
/ 07 июня 2018

Удалить все остальное, как уже определено как ложное

$res =false;
$res2 = false;
if(isset($_POST['Ans1']) && $_POST['Ans1'] == "x divides y") //isset and value check 
{
    $res = true;
}

if(isset($_POST['Ans2']) && $_POST['Ans2'] == "x greater than y") //isset and value check
{
 $res2 = true;
}
echo json_encode(['an1'=>$res,'an2'=>$res2]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...