1

我正在尝试创建一个动态的 if 语句。我想这样做的原因是因为我需要在服务器端检查输入字段是否与我的正则表达式匹配并且不为空。但是,我的一些输入字段可以在我的 CMS 中删除,这意味着相应地会有更多/更少的输入字段。

理想情况下,我会在我的 if 语句中添加变量,但我不能 100% 确定是否允许这样做,所以也许我需要另一种方法来解决这个问题。这是我尝试过的:

if ($f_naw['streetname'] == 1)
{
    $streetname= $_POST['streetname']; //Used in INSERT query
    $cstreetname = " || $_POST['streetname'] == ''"; //Used to check if field is empty
    $pstreetname = " || !preg_match($streetnameReg,$_POST['streetname'])"; //Used to check if it matches my regex
}
else
{
    //These variables define variables if inputfields are not shown
    $streetname= ''; //No streetname means it's excluded in INSERT query
    $cstreetname = ''; //Not needed in check
    $pstreetname = ''; //Also not needed in check
}

// more of these if/else statements

if ($_POST['firstname'] == '' || $_POST['lastname'] == '' || $_POST['email'] == '' $cstreetname $cpostalcode $chometown $ctelnr $csex $cdateofbirth)
{
    echo 'One of the fields is empty.';
    header('refresh:3;url=index.php');
}
else
{
    //Regex check, after that more code
}

我的想法是检查前端是否显示了特定字段,在这种情况下,我正在创建一些我想粘贴到我的 if 语句中的变量。

我收到一条错误消息,提示服务器错误,这意味着我的 php 代码无效。

甚至有可能做出动态的 if 语句吗?如果是,我在哪一部分失败了?

非常感谢您的帮助!提前致谢。

4

2 回答 2

0

首先,由于看起来您需要将所有条件句与 结合起来||,您可以通过这样编写程序来更正您的程序:

if ($f_naw['streetname'] == 1)
{
    $streetname= $_POST['streetname']; //Used in INSERT query
    $cstreetname = $_POST['streetname'] == ''; //Used to check if field is empty
    $pstreetname = !preg_match($streetnameReg,$_POST['streetname']); //Used to check if it matches my regex
}
else
{
    //These variables define variables if inputfields are not shown
    $streetname= ''; //No streetname means it's excluded in INSERT query
    $cstreetname = false; //Not needed in check
    $pstreetname = false; //Also not needed in check
}


if ($_POST['firstname'] == '' || $_POST['lastname'] == '' || $_POST['email'] == '' || $cstreetname || $cpostalcode || $chometown || $ctelnr || $csex || $cdateofbirth)
{
    echo 'One of the fields is empty.';
    header('refresh:3;url=index.php');
}

这会起作用,但它很笨拙。一个更好的解决方案是使用一个数组(让我们将其命名为$errors动态填充因验证您的字段而产生的错误。像这样:

$errors = array();

if ($f_naw['streetname'] == 1)
{
    $streetname= $_POST['streetname']; //Used in INSERT query
    if ($streetname == '') {
        $errors[] = 'Streetname cannot be empty.'; // message is optional
    }
    if (!preg_match($streetnameReg,$streetname)) {
        $errors[] = 'Streetname is invalid.'; // message is optional
    }
}

接着:

if ($errors) {
    echo 'There are errors with the data you submitted.';
    header('refresh:3;url=index.php');
}

如果您提供了人类可读的错误消息,您还可以安排显示它们,以便用户知道他们需要修复什么。当然,您可以使用这种技术的许多变体——例如,按字段对错误消息进行分组,这样您就只为每个字段显示一个错误。

于 2013-05-03T10:09:56.930 回答
0

如果您想检查空的 $_POST 字段,您可以执行以下操作

$error = False;
foreach($_POST as $k => $v)
{
    if(empty($v))
    {
        $error .= "Field " . $k . " is empty\n";
    }
}

if(!$error)
{
    echo "We don't have any errrors, proceed with code";
}
else
{
    echo "Ops we have empty fields.\n";
    echo $error;
}

在您确定所有字段都不为空之后,您可以执行其他操作。

于 2013-05-03T10:09:58.987 回答