表单正在提交,但$ 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);
}
?>
答案 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语句中。