表单提交时出现 MySQL 错误


MySQL error on form submit

>更新:

非常感谢大家对此的帮助。我采取了不同的策略并决定仅使用一个表。


我有一个由 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") 的值行。

更新

您在查询中使用大括号而不是括号。

 $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)

您多次执行此操作,因此请检查所有查询是否存在此错误。

旧答案

您应该使用比较运算符(=====(而不是赋值运算符:

if($form_id="offense")

应该是

if($form_id==="offense")

有两点需要注意:

  1. 你对SQL注入持开放态度
  2. mysql_*将被贬低。您应该切换到 mysqli_* 或 PDO。
if($form_id="offense").

应该是

 if($form_id=="offense")

此外,您对SQL注入持开放态度,请确保清理输入。即使您确实清理了您的输入,我也会建议您开始使用 PDO,这更安全!

看起来您的字符串后也缺少一些分号。

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]')";
} 

如果要测试变量是否等于值,则必须使用比较运算符,该运算符==

在这里,你使用的是赋值运算符,它是= 的——它把你写在右边的值,放在你写在它左边的变量里。


基本上,您应该更新三个条件,因此它们看起来像这样:

if($form_id == "offense")
elseif($form_id == "kicker")
elseif($form_id == "defense")

赋值运算符=

检查条件为==

当我们想要检查数据类型时,我们也使用===

所以你的状况有问题,应该像下面这样

if(variable == 'string'){
    // logic
}

这些其他答案是正确的,但此声明末尾也缺少一个分号,这就是导致语法错误的原因:

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]')"; }

编辑:需要明确的是,所有声明都缺少分号,而不仅仅是一个分号。