PHP 如果不是其他 不像我想象的那样工作


PHP If Else Not working like i thought it would

好吧,我被困在这里,我可能正在看这个完全错误(仍然有点新手)或超级接近只是错过了一些我无法说出的小东西。

在底部,您将找到带有If ElseIf Else语句的代码。我只是无法做我想做的事。所以我希望有人能帮助引导我朝着正确的方向前进。

如果它检查以确保输入的促销代码在数据库中并且该部分有效。

在 elseif 我希望它浏览数据库并找到促销代码并确认没有与该促销代码关联的电子邮件地址。当该促销代码中有一个电子邮件地址时,查询中带有 IS not NULL 的方式适用于该促销代码中没有任何内容,但是当该促销代码没有任何内容时,它仍然说有并提供今天的提交数据,但我可以保证数据库中没有任何内容。

这就是我的问题所在,我这样做完全错了,有没有更好的方法来完成我在这里想做的事情?还是我只是忽略了一些小东西?

        $promosql = "SELECT * FROM formdata WHERE (promoCode = '$varPromo')";
        $promoraw = $mysqli->query($promosql);
        $dupesql = "SELECT * FROM formdata WHERE (promoCode = '$varPromo' AND email IS NOT NULL)";
        $duperaw = $mysqli->query($dupesql);
        if($promoraw->num_rows <> 1) {
            //echo ("$varName already exists in $varAddress 'n");
            $promo .= "$varPromo is not a valid promocode 'n";
        } 
        elseif($duperaw->num_rows > 0) {
            //echo ("$varName already exists in $varAddress 'n");
            $dupe .= "$varPromo has already been used on $varDate 'n";
        } 
        else {
        $sql = "INSERT INTO formdata (promoCode, name, email, address, city, state, zip, submitDate) VALUES (".
                        PrepSQL($varPromo) . ", " .
                        PrepSQL($varName) . ", " .
                        PrepSQL($varEmail) . ", " .
                        PrepSQL($varAddress) . ", " .
                        PrepSQL($varCity) . ", " .
                        PrepSQL($varState) . ", " .
                        PrepSQL($varZip) . ", " .
                        PrepSQL($varDate) . ")";
        $mysqli->query($sql);
        header("location: index.php?success=1");
        exit();
        }

尝试以下查询:

SELECT email IS NULL or email = '' has_email FROM formdata WHERE promoCode = '$varPromo'

然后你的 PHP 可以做到:

if ($promoraw->nul_rows == 0) {
    // Not a valid promo code
} else {
    $row = $promoraw->fetch_assoc();
    if ($row['has_email']) {
        // Promo code has been used
    } else {
        // Insert into table
    }
}