提交到MySQL,但if语句导致问题

时间:2014-09-08 21:29:37

标签: php mysql forms

表单正在提交,但$ id变量的行为很奇怪,而$ part变量的行为与预期一致。

第一个if语句完美运行,但所有其余的都将提交$ part变量,同时将$ id变量设置为" 0"。有什么可能发生的线索?

 <?php    
    $part = $_POST['participating'];
    $form = $_POST['forms'];
    $meth = $_POST['method'];
    $id = $_POST['id'];

    if ($meth == "Forms - Foo") {
        $sql="INSERT INTO form_foo (id, participants, forms)
              VALUES ('$id', '$part', '$form')";
        $result = mysql_query($sql);
    } else if ($meth=="Forms - Other") {
        $sql="INSERT INTO form_other (id, participants)
              VALUES ('$id', '$part')";
        $result = mysql_query($sql);
    } else if ($meth=="Online - Foo") {
        $sql="INSERT INTO online_foo (id, participants)
              VALUES ('$id', '$part')";
        $result = mysql_query($sql);
    } else {
        $sql="INSERT INTO online_other (id, participants)
              VALUES ('$id', '$part')";
        $result = mysql_query($sql);
    }
?>

1 个答案:

答案 0 :(得分:1)

问:有什么可能发生的线索吗?

答:了解发生了什么的一种方法是在调用$sql之前输出mysql_query的内容。

一个简单的echo,vardump,printf将是获取提交给数据库的实际SQL的一种方法。从那里开始,这将帮助您确定问题是上游,在构建SQL语句时,还是在下游执行数据库中的语句。

另外,最好从mysql_query检查回报。如果出现MySQL错误,则返回为FALSE。并且有一个mysql_error函数可以返回上一个MySQL错误的文本。


这里只是猜测,但对于您正在观察的行为最可能的解释,$id变量的内容以数字字符以外的其他内容开头。 MySQL试图从字符串文字的前导部分中获取一个数字。在数字上下文中,空字符串将计算为零,请考虑:

SELECT '2b3c' + 0    => 2
SELECT 'a1b2' + 0    => 0
SELECT ''     + 0    => 0

if声明导致问题的可能性很小;除了为$sql变量赋值外,我们看不到任何分配。您发布的if块只有一个条件测试。

如果提交的SQL文本看起来合理,例如... VALUES ('456','foo'),然后我们需要仔细查看数据库。 (比如,是否有人创建了包含BEFORE INSERT的{​​{1}}触发器?列SET NEW.id = 0;是否声明为id,您希望它是INT。我们只是在猜测。


此外,当SQL文本中包含“不安全”值时,您可能需要考虑SQL注入漏洞。 VARCHAR接口提供了一个mysql函数,可以很好地将“不安全”值“安全”包含在SQL语句中。