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