Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果PHP不能像我想的那样工作的话_Php_Mysqli - Fatal编程技术网

如果PHP不能像我想的那样工作的话

如果PHP不能像我想的那样工作的话,php,mysqli,Php,Mysqli,好吧,我被困在这里了,我可能是看错了(还是个新手),或者是太接近了,只是错过了一些我说不出来的小东西 在这里的底部,您可以找到带有If-ElseIf-Else语句的代码。我就是不能做我想做的事。所以我希望有人能帮我指引正确的方向 在上,它检查以确保输入的promocode位于数据库中并且该部件正常工作 在elseif上,我希望它通过数据库查找促销代码,并确认没有与该促销代码关联的电子邮件地址。下面的方式是,当该促销代码中有电子邮件地址时,查询中不为空,但当该促销代码没有任何内容时,它仍然表示有,

好吧,我被困在这里了,我可能是看错了(还是个新手),或者是太接近了,只是错过了一些我说不出来的小东西

在这里的底部,您可以找到带有If-ElseIf-Else语句的代码。我就是不能做我想做的事。所以我希望有人能帮我指引正确的方向

在上,它检查以确保输入的promocode位于数据库中并且该部件正常工作

在elseif上,我希望它通过数据库查找促销代码,并确认没有与该促销代码关联的电子邮件地址。下面的方式是,当该促销代码中有电子邮件地址时,查询中不为空,但当该促销代码没有任何内容时,它仍然表示有,并给出了今天的提交数据,但我可以保证数据库中没有任何内容

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

        $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();
        }
$promosql=“从formdata中选择*,其中(promoCode='$varPromo')”;
$promoraw=$mysqli->query($promosql);
$dupesql=“从formdata中选择*,其中(promoCode='$varPromo'且电子邮件不为空)”;
$duperaw=$mysqli->query($dupesql);
如果($promoraw->num\u行1){
//echo($varName已存在于$varAddress\n)中;
$promo.=“$VARPOMO不是有效的促销代码\n”;
} 
elseif($duperaw->num_rows>0){
//echo($varName已存在于$varAddress\n)中;
$dupe.=“$VARPOMO已在$varDate上使用\n”;
} 
否则{
$sql=“插入formdata(促销代码、姓名、电子邮件、地址、城市、州、邮政编码、提交日期)值(“”)。
PrepSQL($varPromo)。“,”。
PrepSQL($varName)。“,”。
PrepSQL($varEmail)。“,”。
PrepSQL($varAddress)。“,”。
PrepSQL($varCity)。“,”。
PrepSQL($varState)。“,”。
PrepSQL($varZip)。“,”。
PrepSQL($varDate)。”;
$mysqli->query($sql);
标题(“location:index.php?success=1”);
退出();
}
尝试此查询:

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
    }
}

使用参数化查询而不是字符串连接。行
if($promraw->num\u rows 1)
应该是
if($promraw->num\u rows!=1)
。行
elseif($duperaw->num_rows>0)
应该是
else如果($duperaw->num_rows>0)
@dispositionrage实际上,elseif是正确的。如果你使用mysqli,那
PrepSQL
funtion在那里做什么?你为什么不使用事先准备好的陈述呢?@markus每天都在学习新的东西。