Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 表单提交时出现MySQL错误_Php_Mysql_Syntax Error - Fatal编程技术网

Php 表单提交时出现MySQL错误

Php 表单提交时出现MySQL错误,php,mysql,syntax-error,Php,Mysql,Syntax Error,更新: 非常感谢你们在这方面的帮助。我采取了不同的策略,决定 只用一张桌子 我有一个由3个表组成的数据库。我有三个简短的表单,我想使用相同的add_player.php将表单数据写入数据库 根据提交的表单,我在每个表单中都有一个定义表单id的隐藏字段,数据将写入三个表中的一个:ff_进攻、ff_踢球、ff_防守 我收到一个意外的}错误。我知道我的语法不正确,但我对PHP不够精通,无法找出罪魁祸首。以下是add_player.php的代码: <?php $con = mysql_connec

更新:

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

我有一个由3个表组成的数据库。我有三个简短的表单,我想使用相同的add_player.php将表单数据写入数据库

根据提交的表单,我在每个表单中都有一个定义表单id的隐藏字段,数据将写入三个表中的一个:ff_进攻、ff_踢球、ff_防守

我收到一个意外的}错误。我知道我的语法不正确,但我对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行,如果$form_id=offence,则该行的值为。

更新

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

 $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")
应该是

 $query="INSERT INTO ff_kicker (K_ID, K_PLAYER, K_TEAM, K_EXTRA_PTS, K_FG)
if($form_id==="offense")
需要注意两点:

您对SQL注入非常开放 mysql_*将被降级。你应该切换到或。 应该是

 if($form_id=="offense")

此外,您对SQL注入非常开放,请确保对输入进行清理。即使你确实清理了你的输入,我也会建议你开始使用PDO,它更安全

如果要测试变量是否等于某个值,必须使用==

在这里,您使用的是,它取您在其右侧写入的值,并将其放入您在其左侧写入的变量中

基本上,您应该更新三个条件,使其如下所示:

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

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

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

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

看起来字符串后面也缺少一些分号

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(variable == 'string'){
    // logic
}

这在技术上是有效的语法,并不是导致错误出现的原因。如果您编写了一个答案,并看到sql注入漏洞,您应该提到它。和这里一样。再加上1=以上代码并不难,是吗?考虑到页面上的答案数量只纠正了等式,这个答案只是这些答案的一个补充。似乎没有人注意到分号,这是导致他粘贴错误的原因。因此,为什么我开始用这些其他答案是对的不是我,但可能是因为它们不是答案?即使逻辑有缺陷,语法也是有效的。问题是关于一个特定的语法错误,它是用分号解决的,而不是固定的等式。也许是这样,但这意味着这个awnser和John Conde的awnser没有用处,在我看来就是这样。我知道,我比你投了更高的票;我同意,但我发现很难对一个没有解决OP粘贴的具体错误的答案进行投票。我的反对票是留给那些完全错误的答案:@orourkek这不是问题=DHa,我没有注意到,只是看了第一个问题的本质。他还丢失了所有的分号:]这只解决了逻辑缺陷,而不是两个语法错误。我得到了另一个错误:它读到:PHP致命错误:在C:\\xampp\\htdocs\\kickass\\add\u player.PHP的非对象上调用成员函数setQuery第21行:$db->setQuery$query;啊!尝试注释$db->setQuery$query$数据库->查询;如果解决了问题,请再次运行脚本,您不需要这两行代码?