【问题标题】:What is the best way to supply many arguments to an if statement?为 if 语句提供许多参数的最佳方法是什么?
【发布时间】:2015-08-08 01:01:54
【问题描述】:

我创建了一个包含多个用户输入的表单,但是在提交之前检查每个单独的输入是否不为空是一项繁琐的任务。是否有更快的方法(例如使用数组)列出 if 语句的所有参数?

目前我的代码看起来像这样,但如果可能的话,我希望它在未来更高效,就像我要添加更多输入一样。

<form action="sign-up.php" method="post" autocomplete="off" >
Name:<input type="text" name="name" />
Username:<<input type="text" name="username"  /><br />
Password:<input type="password" name="password1" /><br />
Re-type Password:<input type="password" name="password2"  /><br />
Email:<input type="text" name="email"  />
Address:<input type="text" name="address"  />
Post Code:<input type="text" name="postcode"  />
City:<input type="text" name="city"  />
<input class="submit" type="submit" value="sign up" />
</form>

<?php
if (!empty($_POST['name']) 
&& !empty($_POST['username']) 
&& !empty($_POST['password1']) 
&& !empty($_POST['password2']) 
&& !empty($_POST['email'])   
&& !empty($_POST['address'])
&& !empty($_POST['postcode']) 
&& !empty($_POST['city']) )
{
echo "information has been submitted";
}
else {
echo "please fill in all fields!"
}

?>

如果您有任何建议,请发表评论。

【问题讨论】:

  • loop 怎么样?
  • 如何使用循环? @Script47

标签: php if-statement arguments statements


【解决方案1】:

所以这将循环遍历 $_POST 值并检查它们是否为空。如果发现其中一个为空,它将设置$hasErrorOccurred 为true。下面的if statement会判断输入检查是否成功。

    $hasErrorOccurred = false;

    foreach ($_POST as $key => $value) {
        if (empty($_POST[$key])) {
            $hasErrorOccurred = true;

            break;
        }
    }

    if ($hasErrorOccurred) {
        // Your error code here.
    } else {
        // Your successful code here.
    }

阅读材料:

break;

【讨论】:

  • 这是天才。我不知道您可以以这种方式使用 $_POST 变量。非常感谢。 @Script47
  • 也许存储一个必填字段名称的数组并检查所有这些名称是否存在于 $_POST 数组映射中是一种更好的方法。如果请求来自给定表单以外的其他地方,则这些键可能不在 $_POST 中。
  • @slhsen OP 表示他希望他们来自$_POST
  • 他仍然应该检查以确保所需的变量不为空(或者可能进行更好的完整性检查,例如最小字符数和密码字段中是否存在非字母字符等)但是让我们说下一个前端开发者误删或拼错密码字段,以上代码不会报错。
  • @slhsen 但是让我们说......我怎么能预测呢?无论如何,这是一个假设,我的回答直接解决了 OP 的问题。你不能开始问诸如如果 X、Y 或 Z 发生怎么办?之类的问题,因为这只会让你接触到大量可能出错的事情。我们在这里回答问题而不是预测未来。此评论无意冒犯。
【解决方案2】:

如果您想为每个字段输入分配变量,我就是这样做的。

foreach ($_POST as $key => $value) {

 $$key = $_POST[$key];  //assigns input name to variable with the same name.

    }

if(!empty($$key)) {

//code if all fields are not empty  

}
else {

    echo "Please fill in all fields";

}

【讨论】:

  • 我使用它是为了给输入字段分配一个与键同名的变量(例如 $name = $_POST['name'] 或 $username = $_POST['username' ]) - @Script47
【解决方案3】:

这是我试图在 cmets 上描述 Script47 答案的方式,以便我可以更好地阐明我的观点:

$requiredFields = ['name','username','password1','password2'];
foreach ($requiredFields as $field) {
    if (!array_key_exists($field, $_POST) || empty($_POST[$field])) {
        displayMissingFieldAlert($field);
    }
}
// do the submit etc.
...

通过这种方式,您可以发现某个字段是否以某种方式被遗忘、拼写错误或未提交。

【讨论】:

  • 我也喜欢这种方式,我明白你所说的健全性检查是什么意思。 displayMissingFieldAlert 函数有什么作用? @slhsen
  • 我把它写成一个占位符,用于当字段丢失或为空时的操作。在这种情况下,您必须实现该功能才能执行所需的任何操作。就像显示有关缺失字段的错误等。这样做的好处是您可以向用户显示缺失参数的名称或在 html 表单上突出显示它,以便用户知道他/她在哪里犯了错误。
  • 嗯,我明白了,这看起来更像我想要的。非常感谢@slhsen
  • !array_key_exist 的末尾也应该有一个“s”,因为我尝试运行代码但发生了致命错误。 @slhsen
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-30
  • 1970-01-01
  • 2016-03-22
  • 2021-10-31
  • 2017-01-22
相关资源
最近更新 更多