我的表单中有八个输入字段,需要检查它们是否为空。其中四个是文本字段,另外四个是列表框。当用户提交表单时,需要填写四个文本框。第五个字段是"是/否"选项。如果此字段中的选择为"否",则其余三个可以留空。但是,如果第五个字段中的选择为"是",则也必须使用列表框选择最后三个字段。
让我们将前四个(文本框)称为"强制文本1"、"强制文本2"、"强制性文本3"answers"强制文本4",是/否选择列表框称为"是-否",可选选择称为"a"、"b"answers"c"。
所以:
如果强制文本1、强制文本2、强制文本3或强制文本4为空,则处理php将中止。
但是,如果强制文本1、强制文本2、强制文本3和强制文本4都已填写,则下一步检查是否是否包含"是"或"否"。
- 如果包含"否",则必须保留a、b和c空白
- 如果包含"是",则a、b和c(列表框)必须为必须选择
凭借我对PHP的熟练程度,我已经能够做到这一点:
if ((mandatory-text1 || mandatory-text2 || mandatory-text3 == "") OR (yes-no == "Yes" AND (!(a || b || c == ""))) {
echo "blah" ;
exit();
}
else {
//do some stuff
}
我还没有对"做一些事情"部分进行编码,因为当我尝试这个代码时,即使所有的文本字段都填写好了,yes no是"yes",并且a、b和c已经被选中,我也会收到"blah"消息。
我先用一个简单的"||"来表示所有字段,效果很好——也就是说,如果其中一个字段为空,我就会收到"废话"消息。我也试过只检查是-否和a、b、c,这也很好,即如果是-否中有一个是,如果a、b和c字段为空,我会得到废话。
但我需要满足所有条件,然后才能进入下一步。我在SO上读到的帖子让我走到了现在的舞台。但没有一个达到我想要的项目水平。
任何关于逻辑的提示都将不胜感激!
首先,您应该在变量名之前使用$
第二,mandatory-text1||mandatory-text2||mandatory-text3==""
是错误的逻辑。应该是$mandatory-text1=""||$mandatory-text2==""|| ...
它之所以有效,是因为单独的if(mandatory-text1)
意味着如果定义了强制文本1,而不是空或空字符串,所以在这种情况下,单独的$mandatory-text1||$mandatory-text2||$mandatory-text3
就足够了
if ((mandatory-text1 || mandatory-text2 || mandatory-text3 == "") OR (yes-no == "Yes" AND (!(a || b || c == ""))) {
echo "blah" ;
exit();
}
else {
//do some stuff
}
对于a||b||c
(mandatory-text1 || mandatory-text2 || mandatory-text3 == "")
这不是你想象的那样。上面写着:
如果强制文本1不为空或强制文本2不为空,或强制文本3等于"。
尝试:
(mandatory-text1 == "" || mandatory-text2 == "" || mandatory-text3 == "")
您可以以更可读的方式重新设计控件,每个字段类型都有一个函数或代码块,例如:
<?php
function checkFields( $data )
{
// List of field to check
$fields = array( 'mandatory-text1', 'mandatory-text2', 'mandatory-text3', 'mandatory-text4', 'a', 'b', 'c' );
foreach ($fields as $field )
{
switch( $field )
{
case 'mandatory-text1':
case 'mandatory-text2':
case 'mandatory-text3':
case 'mandatory-text4':
if ( $data[$field] == '' )
{
return false;
}
break;
case 'a':
case 'b':
case 'c':
if ( $data['yes-no'] == 'yes' && $data[$field] == '' )
{
return false;
}
elseif( $data['yes-no'] == 'no' && $data[$field] != '' )
{
return false;
}
break;
}
}
// If we have not returned false so far, then all is clear
return true;
}
// Usage :
if( checkFields( $_POST ) )
{
// every thing is ok
}
else
{
// bad submission
}
?>
你应该在这里主要避免两件事:
- 长AND/OR语句
- 用smae控件重复你的自我
如果我理解正确,这样的东西应该会起作用。不要在变量名中使用短划线。
if ($mandatory1 && $mandatory2 && $mandatory3 && $mandatory4)
{
if ($choice == "Y" && $a && $b && $c)
{
// do whatever
}
elseif ($choice == "N" && !$a && !$b && !$c)
{
// do something else
}
}
else
{
// submission incorrect
}