PHP验证:4 x 3可选下拉列表

PHP验证:4 x 3可选下拉列表,php,validation,Php,Validation,因此,我必须针对以下情况编写一个错误检查解决方案: 用户有四次机会从三个下拉菜单中选择: 下拉列表1:最多15个选项加上空白零 下拉列表2:最多8个选项加上空白零 下拉列表3:始终为3个选项加上空白零 所有四个都是可选的,但如果选择了其中一个,则其他两个不能为空 下拉选项的值都是数字,空白为零 下拉列表1和下拉列表2不能在其他三个组中再次使用,即如果用户选择输入所有四个组,则必须有8个唯一值,但第三个选项可以在其他组中重复 最有效的方法是什么 a检查如果G1的DD1>0,则G1的DD2和DD3也

因此,我必须针对以下情况编写一个错误检查解决方案:

用户有四次机会从三个下拉菜单中选择: 下拉列表1:最多15个选项加上空白零 下拉列表2:最多8个选项加上空白零 下拉列表3:始终为3个选项加上空白零 所有四个都是可选的,但如果选择了其中一个,则其他两个不能为空 下拉选项的值都是数字,空白为零 下拉列表1和下拉列表2不能在其他三个组中再次使用,即如果用户选择输入所有四个组,则必须有8个唯一值,但第三个选项可以在其他组中重复 最有效的方法是什么

a检查如果G1的DD1>0,则G1的DD2和DD3也>0 b检查如果G1的DD1=0,则G1的DD2和DD3也=0 c上述下拉列表和组的所有组合 d检查我最多有8个唯一的数字,但忽略0,对于适当数量的选定组,即2、4、6或8-如果只完成了两个组,则将有四个0,这是允许的。 我知道elseif,但我能想到的做上述a点和b点的唯一方法是:

if($dd1g1>0 && ($dd2g1>0 && $dd3g1>0))
{
 echo "DD1 of G1 is not blank, and DD2 and DD3 are also not blank.";
 // allowed
}
else
{
 echo "DD1 of G1 is not blank, but DD2 and DD3 are blank";
 // fail
}

我必须重复这个3^4=81次才能满足两条规则。没有更简单的方法可以做到这一点吗?

这就是我为了简洁和安全而编辑的内容-是的,我在真正的代码中有注入安全性:

if($dd1g1==0 && $dd2g1==0 && $dd3g1==0)
{
 // Group 1 are all zero, so clear
 $sql = "UPDATE blah SET dd1g1='0', dd2g1='0', dd3g1='0' WHERE id='".$blah."'";
}
else
{
 // Something is not zero in Group 1, so check they are all NOT zero
 if($dd1g1>0 && $dd2g1>0 && $dd3g1>0)
 {
  // Group 1 are all complete, so check there are no dupes
  if($dd1g1==$dd1g2 || $dd1g1==$dd1g3 || $dd1g1==$dd1g4 || $dd2g1==$dd2g2 || $dd2g1==$dd2g3 || $dd2g1==$dd2g3)
  {
   // There is a duplicate
   echo "Duplicates detected";
   die();
  }
  else
  {
   // No duplicates, so update
   $sql = "UPDATE blah SET dd1g1='".$dd1g1."', dd2g1='".$dd2g1."', dd3g1='".$dd3g1."' WHERE id='".$blah."'";
  }
 }
 else
 {
  // Group 1 is incomplete
  echo "Incomplete selection";
  die();
 }
}
[然后重复第2、3和4组]


任何人都能发现的漏洞?

请在熟悉PHP控制结构。我知道elseif,但它似乎效率很低。请参阅已编辑的问题。定义高效-这些不是特定的内存或逻辑密集型。那么,为什么不将其视为最多4个元素的数组,迭代该数组并检查下拉条件保持,然后检查数组范围内的条件保持?Ie,你的例子有$DD1G1,这是很难使用的:考虑$组[ 0 ] [DD1 ]是第一组,DD1等等。你担心效率多久,将需要多长时间来处理这个?服务器的CPU将在千分之一秒内完成此操作。“我不会担心的,”毕晓普说,“你走对了方向。”。将数据放入数组中。您应该能够迭代多维数组,并使用基本数学很容易地完成大部分验证