为什么PHP中的NOR运算符不起作用?

为什么PHP中的NOR运算符不起作用?,php,if-statement,echo,nor,Php,If Statement,Echo,Nor,我正在尝试在我的网站上创建一个注册页面,我已经完成了所有的过滤代码。因此,我在下面的代码中尝试做的是确保用户名在数据库中不存在,然后从那里开始。问题是:我正在使用$error和$captcheaerror执行NOR运算符,但即使在打印它们时,它们的值都是false,if语句中的代码最终无法运行,我也无法理解原因。代码如下: <?php $error = false; $captchaError = false; if($_POST) { $usern

我正在尝试在我的网站上创建一个注册页面,我已经完成了所有的过滤代码。因此,我在下面的代码中尝试做的是确保用户名在数据库中不存在,然后从那里开始。问题是:我正在使用
$error
$captcheaerror
执行NOR运算符,但即使在打印它们时,它们的值都是false,if语句中的代码最终无法运行,我也无法理解原因。代码如下:

<?php
    $error = false;
    $captchaError = false;
    if($_POST) {
        $username = $_POST["username"];
        if (!preg_match("/^[0-9A-Za-z_]{3,16}+$/", $username)) {
            $error = true;
        }
        $email = $_POST["email"];
        if (!filter_var($email, FILTER_VALIDATE_EMAIL) || strlen($email) > 50) {
            $error = true;
        }
        $password = $_POST["password"];
        if(!preg_match("/^[-0-9A-Za-z!@#$%^&*_+=]{6,}+$/", $password)) {
            $error = true;
        }
        $captcha = $_POST['g-recaptcha-response'];
        $response = json_decode(file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=$SECRETKEY&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']), true);
        if(!$captcha || $response['success'] == false) {
            $captchaError = true;
        }
        if((!$error) && (!captchaError)) {
            include("../res/db.php");
            $prep = $conn->prepare("SELECT * FROM users WHERE name=?");
            $prep->bind_param("s", $username);
            $prep->execute();
            $prep->store_result();
            echo "why doesn't this run??";
            var_dump($prep->num_rows);
        }
    }
?>
TL;DR:您在
captchearror
中缺少
$


问题是您正在使用

if((!$error) && (!captchaError)) {
//               /\
而不是

if((!$error) && (!$captchaError)) {
//               /\
请看一个测试:

$error = false;
$captchaError = false;

echo ((!$error) && (!$captchaError)) ? 'ok' : 'no';
echo PHP_EOL;
echo ((!$error) && (!captchaError)) ? 'ok' : 'no';
将输出:

好的
没有

在某些情况下,它甚至会打印:

使用未定义的常量captchaError-在[…]中假定为“captchaError”


有些人可能认为这是(可以说)获得
测试的更好方法:

(! ($var1 || $var) )

您确实需要正确格式化代码。这几乎不可能阅读。很抱歉,我在谷歌上搜索了一下,找到了它的格式。你有没有在
php错误日志中查找错误?
我无法检查它,因为我使用的是免费的网络托管服务,它不允许it@GregorySkliar不客气
(! ($var1 || $var) )