更新:
非常感谢你们对此的帮助。我采取了不同的策略并决定了 只使用一张桌子。
我有一个由3个表组成的数据库。我有三个简短的表单,我想使用相同的add_player.php将表单数据写入数据库。
根据提交的表单(我在每个表单中都有一个隐藏字段定义form_id),数据将被写入三个表中的一个:ff_offense,ff_kicker,ff_defense。
我遇到意外}错误。我知道我的语法已经关闭,但是我对PHP不够精通,无法发现罪魁祸首。这是add_player.php的代码:
<?php
$con = mysql_connect("localhost","dariia","celtic03");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("football", $con);
if($form_id ="offense") {$query="INSERT INTO ff_offense (ID, PLAYER, POSITION, TEAM, PASS_YDS, RUSH_YDS, REC_YDS, RECEPTIONS, TD)
VALUES ('NULL','$_POST[PLAYER]','$_POST[POSITION]','$_POST[TEAM]','$_POST[PASS_YDS]','$_POST[RUSH_YDS]','$_POST[REC_YDS]','$_POST[RECEPTIONS]','$_POST[TD]')"}
elseif($form_id="kicker") {$query="INSERT INTO ff_kicker {K_ID, K_PLAYER, K_TEAM, K_EXTRA_PTS, K_FG)
VALUES ('NULL','$_POST[K_PLAYER]','$_POST[K_TEAM]','$_POST[K_EXTRA_PTS]','$_POST[K_FG]')"}
elseif($form_id="defense") { $query= "INSERT INTO ff_defense {D_ID, D_TEAM, D_SACKS, D_INT, D_TD}
VALUES ('NULL','$_POST[D_TEAM]','$_POST[D_SACKS]','$_POST[D_INT]','$_POST[D_TD]')"} ;
$db->setQuery($query);
$db->query();
if (!mysql_query($query,$con))
{
die('Error: ' . mysql_error());
}
echo "1 record added";
mysql_close($con);
?>
第11行的错误是if($form_id="offense")
的VALUES行。
答案 0 :(得分:5)
<强>更新强>
您在查询中使用花括号而不是括号。
$query="INSERT INTO ff_kicker {K_ID, K_PLAYER, K_TEAM, K_EXTRA_PTS, K_FG)
应该是
$query="INSERT INTO ff_kicker (K_ID, K_PLAYER, K_TEAM, K_EXTRA_PTS, K_FG)
您已多次执行此操作,因此请检查所有查询是否存在此错误。
OLD ANSWER
您应该使用比较运算符(==
或===
)而不是赋值运算符:
if($form_id="offense")
应该是
if($form_id==="offense")
需要注意的两点:
答案 1 :(得分:4)
if($form_id="offense").
应该是
if($form_id=="offense")
此外,您对SQL注入非常开放,请确保您清理输入。即使您确实对输入进行了消毒,我也建议您开始使用PDO,这样更安全!
答案 2 :(得分:2)
如果您想测试变量是否等于某个值,则必须使用comparison operator, ==
在这里,您使用的是assignment operator, =
- 它会将您在右侧写下的值,并将其放入您所拥有的变量中写在左边。
基本上,您应该更新您的三个条件,因此它们看起来像这样:
if($form_id == "offense")
elseif($form_id == "kicker")
elseif($form_id == "defense")
答案 3 :(得分:2)
看起来你的字符串后面也缺少一些分号。
if($form_id == "offense") {
$query="INSERT INTO ff_offense (ID, PLAYER, POSITION, TEAM, PASS_YDS, RUSH_YDS, REC_YDS, RECEPTIONS, TD)
VALUES ('NULL','$_POST[PLAYER]','$_POST[POSITION]','$_POST[TEAM]','$_POST[PASS_YDS]','$_POST[RUSH_YDS]','$_POST[REC_YDS]','$_POST[RECEPTIONS]','$_POST[TD]')";
} elseif($form_id=="kicker") {
$query="INSERT INTO ff_kicker {K_ID, K_PLAYER, K_TEAM, K_EXTRA_PTS, K_FG)
VALUES ('NULL','$_POST[K_PLAYER]','$_POST[K_TEAM]','$_POST[K_EXTRA_PTS]','$_POST[K_FG]')";
} elseif($form_id=="defense") {
$query= "INSERT INTO ff_defense {D_ID, D_TEAM, D_SACKS, D_INT, D_TD}
VALUES ('NULL','$_POST[D_TEAM]','$_POST[D_SACKS]','$_POST[D_INT]','$_POST[D_TD]')";
}
答案 4 :(得分:2)
赋值运算符为=
检查条件是==
当我们想要检查数据类型时,我们使用===
所以你的情况有问题,应该如下所示
if(variable == 'string'){
// logic
}
答案 5 :(得分:1)
这些其他答案是正确的,但在此声明的末尾也有一个缺少的分号,这就是造成语法错误的原因:
if($form_id ="offense") { $query="INSERT INTO ff_offense (ID, PLAYER, POSITION, TEAM, PASS_YDS, RUSH_YDS, REC_YDS, RECEPTIONS, TD)
VALUES ('NULL','$_POST[PLAYER]','$_POST[POSITION]','$_POST[TEAM]','$_POST[PASS_YDS]','$_POST[RUSH_YDS]','$_POST[REC_YDS]','$_POST[RECEPTIONS]','$_POST[TD]')"; }
编辑:要清楚,所有声明都缺少分号,而不仅仅是一个分号。