只插入到数据库一次,然后失败


Only inserts in to database once then fails

我有一小段代码。当表为空时,此代码工作正常,并正常地进入表。但是如果我再试一次,那么这个错误失败了吗?

我做错了什么?

感谢
// 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>

没有看到你的表模式,我只能认为你有UNIQUE t_id,你想插入相同的ID到它。

几种调试方法:

  • 使用or die ("Error: " . mysql_error());代替or die ("Error.");
  • 检查你的表模式:SHOW CREATE TABLE tablename并写下你的问题,所以我们可以看到它是否导致错误。

这很难猜测。也许你输入了两次相同的值,它们碰巧违反了一些唯一的约束?

但是你犯了另一个错误:你忘记调用mysql_real_escape()

你能告诉我们错误是什么吗?这听起来像是您遇到了主键冲突,可能是试图多次插入相同的id。

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

不应该直接从POST中插入变量到查询中。我所要做的就是提交'; DROP DATABASE,我可以完全破坏你的系统。

此外,你直接从POST注入值到输入字段,这意味着我可以在我的网站上设置一个按钮,提交" <script type='text/javascript'>window.location='http://mysite.com'</script>或沿着这些行,并接管你的页面。

这可能听起来很简洁,但你应该做一些谷歌搜索或拿起一本关于教科书安全问题的书与网站。

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