我有一小段代码。当表为空时,此代码正常工作并输入到表中。但是,如果我再试一次,那么失败并出现错误?
我做错了什么?
由于
// 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>
答案 0 :(得分:1)
如果没有看到你的表架构,我只能认为你有UNIQUE t_id,并且你想在其中插入相同的ID。
几种调试方式:
or die ("Error: " . mysql_error());
代替or die ("Error.");
SHOW CREATE TABLE tablename
并将其写在您的问题上,以便我们查看是否导致错误。答案 1 :(得分:0)
很难猜到。也许你输入两次相同的值,它们碰巧违反了一些独特的约束条件?
但你犯了另一个错误:你忘了给mysql_real_escape()
打电话。那是bad。
答案 2 :(得分:0)
你能告诉我们这个错误吗?听起来你可能会遇到主键违规,可能是尝试多次插入相同的ID。
除此之外,您的代码充满了安全漏洞。
您不应该直接从POST将变量插入查询中。我所要做的只是提交'; DROP DATABASE
,我可以完全破坏你的系统。
此外,您正在将值直接从POST注入输入字段,这意味着我可以在我的网站上设置一个按钮,提交" <script type='text/javascript'>window.location='http://mysite.com'</script>
或其他内容,然后接管您的页面。
这可能听起来很简洁,但你应该用谷歌搜索或拿起一本关于网站的教科书安全问题的书。
编辑:刚看到你关于学习安全性的评论。我的建议是积极主动地处理这类事情,因为反应通常来不及解决问题。