Php 仅在数据库中插入一次,然后失败

Php 仅在数据库中插入一次,然后失败,php,mysql,Php,Mysql,我有一小部分代码。当表格为空时,此代码正常工作,并进入表格fine。但是,如果我再试一次,那么它会失败并出现错误吗 我做错了什么 谢谢 // On my Function page function admin(){ connect(); $query = mysql_query("INSERT INTO results (t_id, pos1, pos2, po

我有一小部分代码。当表格为空时,此代码正常工作,并进入表格fine。但是,如果我再试一次,那么它会失败并出现错误吗

我做错了什么

谢谢

// On my Function page

    function admin(){
                    connect();

                    $query = mysql_query("INSERT INTO results 
                    (t_id, pos1, pos2, pos3)
                    VALUES  ('$_POST[t_id]','$_POST[pos1]','$_POST[pos2]','$_POST[pos3]')")
                    or die ("Error.");

                    $b = "Updated fine</b></a>.";

                    return $b;
                        exit();
            }

    // Then on my main page

<?php
    include ('functions.php');
    if (isset($_POST['admin'])){
    $admin = admin();
    }
?>

            <div id="content">
                    <div id="admin">
                        <form action="" method="post">
                            <table width="100%" border="0" align="center" cellpadding="3" cellspacing="1">
                                <tr>
                                    <td width="100%"><?php echo "$admin"; ?></td>
                                </tr>
                                <tr>
                                    <td width="100%"><label>Track <input type="text" name="track" size="25" value="<? echo $_POST[t_id]; ?>"></label></td>
                 </tr>
                                <tr>
                                    <td width="100%"><label>Position 1<input type="text" name="pos1" size="25" value="<? echo $_POST[pos1]; ?>"></label></td>
                                </tr>
                                <tr>
                                    <td width="100%"><label>Position 2 <input type="text" name="pos2" size="25" value="<? echo $_POST[pos2]; ?>"></label></td>
                                </tr>
                                <tr>
                                    <td width="100%"><label>Position 3 <input type="text" name="pos3" size="25" value="<? echo $_POST[pos3]; ?>"></label></td>
                                </tr>
                                <tr>
                                    <td width="100%"><input class="save" type="submit" value="" name="admin"></td>
                                </tr>
                            </table>
                        </form>
                    </div>
                </div>
//在我的函数页上
函数admin(){
connect();
$query=mysql\u query(“插入到结果中
(t_id,位置1,位置2,位置3)
值(“$”POST[t\U id]”、“$”POST[pos1]”、“$”POST[pos2]”、“$”POST[pos3]”)
或者死(“错误”);
$b=“更新后的罚款。”;
返回$b;
退出();
}
//然后在我的主页上

轨迹很难猜测。也许您输入了两次相同的值,而它们恰好违反了某些唯一的约束


但是你犯了另一个错误:你忘了调用
mysql\u real\u escape()
。也就是说。

很难猜测。也许您输入了两次相同的值,而它们恰好违反了某些唯一的约束


但是你犯了另一个错误:你忘了调用
mysql\u real\u escape()
。也就是说。

在没有看到表架构的情况下,我只能认为您具有唯一的t_id,并且希望在其中插入相同的id

调试的几种方法:

  • 使用
    或die(“错误:.mysql_Error())而不是仅仅
    或死亡(“错误”)
  • 检查您的表架构:
    SHOW CREATE table tablename
    并将其写在您的问题上,这样我们就可以查看它是否导致了错误

如果看不到您的表架构,我只能认为您有唯一的t_id,并且希望在其中插入相同的id

调试的几种方法:

  • 使用
    或die(“错误:.mysql_Error())而不是仅仅
    或死亡(“错误”)
  • 检查您的表架构:
    SHOW CREATE table tablename
    并将其写在您的问题上,这样我们就可以查看它是否导致了错误

    • 您能告诉我们错误吗?听起来好像您遇到了主键冲突,可能是尝试多次插入相同的id

      除此之外,您的代码充满了安全漏洞

      您不应该直接从POST向查询中插入变量。我所要做的就是提交
      ”;删除数据库
      ,我就可以彻底破坏你的系统

      此外,您将POST中的值直接注入到输入字段中,这意味着我可以在我的站点上设置一个按钮来提交
      “window.location=”http://mysite.com“
      或类似的内容,并接管您的页面

      这听起来可能很简洁,但你应该在谷歌上搜索一下,或者找一本关于教科书网站安全问题的书


      编辑:刚刚看到你关于学习安全性的评论。我的建议是对这类事情要积极主动,因为被动的解决问题往往为时已晚。

      你能告诉我们这个错误吗?听起来你好像遇到了主键冲突,可能是因为多次尝试插入相同的id

      除此之外,您的代码充满了安全漏洞

      你不应该直接从帖子中插入变量到你的查询中。我所要做的就是提交
      ;删除数据库
      ,这样我就可以彻底破坏你的系统

      此外,您将POST中的值直接注入到输入字段中,这意味着我可以在我的站点上设置一个按钮来提交
      “window.location=”http://mysite.com“
      或类似的内容,并接管您的页面

      这听起来可能很简洁,但你应该在谷歌上搜索一下,或者找一本关于教科书网站安全问题的书


      编辑:刚刚看到你关于学习安全的评论。我的建议是对这类事情采取积极主动的态度,因为被动的态度对于解决问题来说往往为时已晚

      欢迎来到这里,感觉就像在家一样:)!使用
      mysql\u error()
      查看错误。输出查询以查看其中的问题。(还有@genesis说的:)我收到了“要么死”的错误是的,我知道我需要尝试保护我的代码,有人告诉我需要逃离字符串,但仍在学习过程中,所以我认为我应该先尝试让它工作,然后再考虑保护。欢迎MysqlInjection,来这里,感觉像在家一样:)!使用
      mysql\u error()
      查看错误。输出查询以查看其中的问题。(还有@genesis说的:)我收到了“要么死”的错误是的,我知道我需要尝试保护我的代码,有人告诉我需要跳出字符串,但仍在学习过程中,所以我认为我应该在考虑保护之前先尝试让它工作。非常感谢,这非常有效。我不知道为什么失败,因为我每次使用的唯一t_id都不一样。投票选出正确答案。另外,您能告诉我们是什么导致了这个问题,以及您是如何解决的吗?把它写在你的答案中,这样将来回答这个问题的用户也可以修复他们的代码。我将t_id作为唯一id,当表中已经有多行时,它会导致错误。非常感谢,这非常有效。我不知道为什么失败,因为我每次使用的唯一t_id都不一样。投票选出正确答案。另外,您能告诉我们是什么导致了这个问题,以及您是如何解决的吗?把它写在你的答案中,这样将来回答这个问题的用户也可以修改他们的代码。我把t_id作为唯一的id,当表中已经有多行时,它会导致错误。