PHP:If语句无意中导致多个MySQL列更新?
我在页面上有一个表格,其中包含:PHP:If语句无意中导致多个MySQL列更新?,php,mysql,database,if-statement,Php,Mysql,Database,If Statement,我在页面上有一个表格,其中包含: 名为teachername的文本输入框 名为day的文本输入框(格式为YYYY-MM-DD) 一个名为“资源”的选择框,带有选项[Library 1或Library 2] 具有值[1,2,3和4]的选择框命名为block My mysql数据库包含以下字段: -老师 图书馆1Block1 图书馆1区2 图书馆1区3 等等 html页面中的数据被传递到一个php页面,用于将资源和块与正确的mysql字段相匹配,并更新该字段,以便将文本输入框“teacher
- 名为teachername的文本输入框
- 名为day的文本输入框(格式为YYYY-MM-DD)
- 一个名为“资源”的选择框,带有选项[Library 1或Library 2]
- 具有值[1,2,3和4]的选择框命名为block
- 图书馆1Block1
- 图书馆1区2
- 图书馆1区3
- 等等
if ($_POST['resource']="Library 1" and $_POST['block']="1")
{mysql_query(
"UPDATE Resources
SET Teacher='yes', Library1block1='$_POST[teachername]'
WHERE Date='$_POST[day]'");}
if ($_POST['resource']="Library 1" and $_POST['block']="2")
{mysql_query(
"UPDATE Resources
SET Teacher='yes', Library1block2='$_POST[teachername]'
WHERE Date='$_POST[day]'");}
预期:
-在teachername文本输入字段中输入“Mr.Smith”,在选择菜单中选择“Library 1”和“1”,并在名为day的文本输入字段中输入“2012-03-16”
- 数据被存储并传递给php脚本
- if语句更新包含与“资源”匹配的字段的数据库记录 字段和“块”字段(library1b1、library1b2等),用于在日期文本字段中输入的日期
- 该字段将被更新,随后的if语句将检查输入的数据与正确的mysql字段是否匹配
请帮助?您经常犯一个错误,使用赋值运算符(=)而不是相等运算符(=)。在如下所示的行上:
if($_POST['resource']="Library 1")
将其更改为使用比较运算符:
if($_POST['resource'] == "Library 1")
如果语句要比较值,则应在语句中使用两个等号,如下所示:
$_POST['resource']=="Library 1"
这将检查$\u POST['resource']
是否等于(==)库1
单个等号将库1
分配给$\u POST['resource']
您可以查看以了解更多信息:
编辑:
您还应使用以下值作为用户输入值,例如$\u POST:
if ($_POST['resource'] == "Library 1" and $_POST['block'] == "2")
{
mysql_query(
"UPDATE Resources
SET
Teacher='yes',
Library1block1='".mysql_real_escape_string($_POST['teachername'])."'
WHERE
Date='".mysql_real_escape_string($_POST['day'])."'"
);
}
给出答案的人做得很好,但我想补充一个我有时喜欢使用的小技巧(取决于语言等) 通常你会写一个if语句,比如
if ( $var == 1 ) { do_stuff( $var ) }; //or whatever
下面这个简单的小把戏让我几乎不可能犯这个潜在的错误(尤其是在php中)
只需将两者切换。
因此,与往常不同的是:
尽可能尝试以下方法:
我很确定PHP5.2+没有改变到不再工作的地步,但是即使你犯了致命的错误,使用一个等号,它仍然应该工作,因为你不能给常量赋值(数字是常量,对吗?)
我相信这取决于php总是从左到右处理代码的行为:
if ( 1 = $var ) { do_stuff( $var ) }; //or whatever
你是金色的!自从我5年前开始做这件事以来,我再也没有遇到过这个问题。1永远是1,无论你做什么。在php中,这是一种很好的思考条件、循环等的方法
它的美妙之处在于它的头脑中有几分简单。“$var”可以是很多东西,但数字1始终是数字1。我确信这并不适用于所有语言,但对于php,这是我经常使用的一种语言,而且显然以这种方式构造代码是一个好习惯。
a=b
是赋值,a==b
是检查相等性。旁白:当输出双引号内的数组时,你必须“转义”它,就像Library1block1=>{$\u POST[teachername]}
Second side point,在数组索引周围不加引号是一种不好的做法:$\u POST['teachername']
另外,别忘了SQL注入在代码中有很多变化,我以前见过,如果你习惯了,这可能是一个很好的做法。我比较或赋值时更喜欢样式$var=1
和$var==1
。不过,请解释一下+1。
if ( 1 == $var ) { do_stuff( $var ) }; //or whatever
if ( 1 = $var ) { do_stuff( $var ) }; //or whatever