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

标签 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);
    }
?>

最佳答案

问:有任何线索可能会发生什么吗?

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

简单的 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 block 只有一个条件测试。

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

<小时/>

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

关于php - 提交到MySQL,但if语句导致问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25733415/

相关文章:

php - Apache、Plesk11 Ubuntu 服务器上的不明上传错误

php - 将 $conn 变量传递给函数时遇到问题

java - 找不到表 Java Glassfish

php - 如何在 while 循环中获取某些数据而不重新分配

javascript - PHP if (isset($_POST ['' ])) +Jquery 在同一页面发送

php - Zend Framework 和 Django 之间在现实世界中的区别是什么?

php - apc.filters 按路径?

php - 用 2 维数组数据填充 MySQL 表

c# - 将Form.Owner设置为来自其他线程的表单

javascript - 如何从 HTML5 日期输入中解析日期?