如果不满足语句条件,请不要返回错误?

时间:2015-08-29 20:04:58

标签: php mysql if-statement

我有一个变量$cc,这个变量以这种方式存储复选框选择:

251000-1,252000-2,252012-1 ...等(取决于选择的数量)

如果条件:

,我已成功找出如何使用strpos将数据存储在多个表中
if (strpos($b,'251000') !== false) {
    $sql3="INSERT INTO engworkshops (studentid, ckb) VALUES ('$studentid', '$cc')";
    echo 'true';
}

if (strpos($b,'252000') !== false) {
    $sql4="INSERT INTO engdrwnga (studentid, ckb) VALUES ('$studentid', '$cc')";
    echo 'true';
}

if (strpos($b,'252012') !== false) {
    $sql5="INSERT INTO engdrwngb (studentid, ckb) VALUES ('$studentid', '$cc')";
    echo 'true';
}

if (!mysqli_query($dbcon,$sql3)) {
    die('Error: ' . mysqli_error($dbcon));
}

if (!mysqli_query($dbcon,$sql4)) {
    die('Error: ' . mysqli_error($dbcon));
}

if (!mysqli_query($dbcon,$sql5)) {
    die('Error: ' . mysqli_error($dbcon));
}

问题在于:此代码的逻辑仅在满足所有三个条件时才有效,这意味着如果我的变量$cc包含251000和252000以及252012,则它将数据存储在每个表中而没有任何问题任何。

我试过

  • 嵌套if语句
  • elseif陈述

两人都没有工作

我的猜测是,我定义插入语句并在未执行时检查错误的方式导致了问题。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您检查每个条件并有条件地设置$sql变量,但在以下查询中使用$sql变量是否已设置。因此,如果找不到您在strpos检查中查找的任何值,则当查询尝试使用它们时,您的$sql变量将不会被设置,并且您的脚本将会死亡。

为了使这种方法有效,您需要在strpos ifs中移动查询。

if (strpos($b,'251000') !== false) {
    $sql3="INSERT INTO engworkshops (studentid, ckb) VALUES ('$studentid', '$cc')";
    if (!mysqli_query($dbcon,$sql3)) {
        die('Error: ' . mysqli_error($dbcon));
    }
    echo 'true';
}

if (strpos($b,'252000') !== false) {
    $sql4="INSERT INTO engdrwnga (studentid, ckb) VALUES ('$studentid', '$cc')";
    if (!mysqli_query($dbcon,$sql4)) {
        die('Error: ' . mysqli_error($dbcon));
    }
    echo 'true';
}

if (strpos($b,'252012') !== false) {
    $sql5="INSERT INTO engdrwngb (studentid, ckb) VALUES ('$studentid', '$cc')";
    if (!mysqli_query($dbcon,$sql5)) {
        die('Error: ' . mysqli_error($dbcon));
    }
    echo 'true';
}

请注意,此代码容易受到SQL注入攻击,而且这个答案并没有解决这个问题,只解决了逻辑问题。