0

更新:

非常感谢你们在这方面的帮助。我采取了不同的策略,决定只使用一张桌子。


我有一个由 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 行,这将是 VALUES 行if($form_id="offense")

4

6 回答 6

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)

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

旧答案

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

if($form_id="offense")

应该

if($form_id==="offense")

需要注意的两点:

  1. 您对 SQL 注入持开放态度
  2. mysql_* 将被弃用。您应该切换到mysqli_*PDO
于 2012-05-17T15:42:26.020 回答
4
if($form_id="offense").

应该

 if($form_id=="offense")

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

于 2012-05-17T15:42:36.817 回答
2

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

在这里,您使用的是赋值运算符,即=——它将您在其右侧写入的值,并将其放入您在其左侧写入的变量中。


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

if($form_id == "offense")
elseif($form_id == "kicker")
elseif($form_id == "defense")
于 2012-05-17T15:43:35.720 回答
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]')";
} 
于 2012-05-17T15:45:01.203 回答
2

赋值运算符是=

检查条件是==

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

所以你的情况有问题,应该如下所示

if(variable == 'string'){
    // logic
}
于 2012-05-17T15:48:21.870 回答
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]')"; }

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

于 2012-05-17T15:44:24.790 回答