用PHP中较短的代码验证多个输入
下面的代码显示了验证2个输入字段的过程。最后,我用Json返回每个输入的布尔结果 想象一下,我将再做下面20次,代码非常大。i如何用更短的代码执行相同的过程用PHP中较短的代码验证多个输入,php,validation,optimization,Php,Validation,Optimization,下面的代码显示了验证2个输入字段的过程。最后,我用Json返回每个输入的布尔结果 想象一下,我将再做下面20次,代码非常大。i如何用更短的代码执行相同的过程 $res =false; $res2 = false; if(isset($_POST['Ans1'])) //if user checked ans1 radio { if($_POST['Ans1'] == "x divides y") #correct answer {
$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]);
删除所有已定义为false的其他内容
$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]);
删除所有已定义为false的其他内容
$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]);
您可以循环$\u POST并使用一个包含正确答案的数组进行比较 返回值是一个数组,每个答案上都有true/false
$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
如果您的$\u POST
有其他值,您可以使用preg\u grep仅过滤答案
$POST = preg_grep("/Ans\d+/", $_POST);
然后循环$POST。您可以循环$\u POST,并使用带有正确答案的数组进行比较 返回值是一个数组,每个答案上都有true/false
$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
如果您的$\u POST
有其他值,您可以使用preg\u grep仅过滤答案
$POST = preg_grep("/Ans\d+/", $_POST);
然后改为循环$POST。您可以使用以下函数检查答案:
function checkAnswer($key, $val) {
$mapping = [
'Ans1' => 'x divides y',
'Ans2' => 'x greater than y'
];
return $mapping[$key] == $val;
}
您将需要答案的映射。然后可以循环POST数组以检查答案;如果这篇文章只有答案
$result = [];
foreach($_POST as $key => $val) {
$res = checkAnswer($key, $val);
$result[$key] = $res;
}
echo json_encode($result);
您可以使用以下函数检查答案:
function checkAnswer($key, $val) {
$mapping = [
'Ans1' => 'x divides y',
'Ans2' => 'x greater than y'
];
return $mapping[$key] == $val;
}
您将需要答案的映射。然后可以循环POST数组以检查答案;如果这篇文章只有答案
$result = [];
foreach($_POST as $key => $val) {
$res = checkAnswer($key, $val);
$result[$key] = $res;
}
echo json_encode($result);
有趣的是,你能做一些验证来展示你的代码是如何工作的吗?没有经过测试,但应该能给你基本的想法。(更新答案)放一个
在$result=[]
之后,您的代码工作正常。谢谢是的,你一直在Javascript和PHP之间切换,事情就是这样发生的很乐意帮忙!有趣的是,你能做一些验证来展示你的代码是如何工作的吗?没有经过测试,但应该能给你基本的想法。(更新答案)放一个
在$result=[]
之后,您的代码工作正常。谢谢是的,你一直在Javascript和PHP之间切换,事情就是这样发生的很乐意帮忙!如果使用类似的方法,则需要在开始时将20$res变量定义为false。如果使用类似的方法,则需要在开始时将20$res变量定义为false。如何返回每个布尔值的结果?我使用了echo json_编码(['an1'=>$res[0],'an2'=>$res[1]])
它必须是an1
而不是作为您的post值Ans1
?这无关紧要,这是一个示例如何返回每个布尔值的结果?我使用了echo json_编码(['an1'=>$res[0],'an2'=>$res[1]])
它必须是an1
而不是作为您的post值Ans1
?这无关紧要,只是一个例子