php+mysql 写的新闻审核,为什么偶尔会插入两条一模一样的数据?很多时候是正常的。
难道是代码有问题吗?大多数情况下是正常的。代码怎么改进?代码如下:<?$news_id=$_GET['id'];$tbname="in_newstg";//将数据设为已审...
难道是代码有问题吗?大多数情况下是正常的。代码怎么改进?
代码如下:
<?
$news_id=$_GET['id'];
$tbname="in_newstg";
//将数据设为已审核通过 投稿的chk=0 当chk=1的时候审核页面会过滤
$tbname="in_newstg";
$charsql="UPDATE $tbname set chk=1 where news_id='$news_id'";
$result=mysql_db_query($database_xw,$charsql,$xw);
//从表中读取数据
$sql = "select * from $tbname where news_id='$news_id'";
$result = mysql_query($sql,$xw);
$myarray=mysql_fetch_array($result);
$news_tit=$myarray['news_tit'];
$news_aut=$myarray['news_aut'];
$news_com=$myarray['news_com'];
//将数据写到主页新闻表
$tbname="in_news";
$charsql="INSERT INTO $tbname set news_tit='$news_tit',news_aut='$news_aut',news_com='$news_com',,news_time=now(),time=now()";
$result=mysql_db_query($database_xw,$charsql,$xw);
if(!$result){
echo '<div align=center><p>抱歉,由于系统问题,审核未能成功。</p>';
echo "<a href=\"javascript:history.go(-1)\">请返回</a></div>";
}else{
echo '<div align=center><p>感谢您的审核,本条新闻已成功发布成功。</p>';
echo "<a href=\"news_list.php\">请返回</a></div>";
}
?> 展开
代码如下:
<?
$news_id=$_GET['id'];
$tbname="in_newstg";
//将数据设为已审核通过 投稿的chk=0 当chk=1的时候审核页面会过滤
$tbname="in_newstg";
$charsql="UPDATE $tbname set chk=1 where news_id='$news_id'";
$result=mysql_db_query($database_xw,$charsql,$xw);
//从表中读取数据
$sql = "select * from $tbname where news_id='$news_id'";
$result = mysql_query($sql,$xw);
$myarray=mysql_fetch_array($result);
$news_tit=$myarray['news_tit'];
$news_aut=$myarray['news_aut'];
$news_com=$myarray['news_com'];
//将数据写到主页新闻表
$tbname="in_news";
$charsql="INSERT INTO $tbname set news_tit='$news_tit',news_aut='$news_aut',news_com='$news_com',,news_time=now(),time=now()";
$result=mysql_db_query($database_xw,$charsql,$xw);
if(!$result){
echo '<div align=center><p>抱歉,由于系统问题,审核未能成功。</p>';
echo "<a href=\"javascript:history.go(-1)\">请返回</a></div>";
}else{
echo '<div align=center><p>感谢您的审核,本条新闻已成功发布成功。</p>';
echo "<a href=\"news_list.php\">请返回</a></div>";
}
?> 展开
2个回答
展开全部
发生这个情况,代码你提交的时候对按钮进行了双击。这个时候,你可以加入验证码的验证(这就是验证码的作用,防止重复提交),还用再sql语句中进行比对,如时间验证(在一定时间内同一个ip不能提交),标题或者其他验证(验证标题是否重复)等,来排除插入2条数据的问题!
追问
如果加验证码,加在什么地方?
上页是个onclick:
" onclick="{if(confirm('确认本条新闻无误,要通过审核吗?')){return true;}return false;}">-通过审核-
追答
验证码不适合你这种审核,你应该在审核通过的时候去查找一下主表是否有这条新闻,建议已附表的id为检测标准,比如主新闻表中,有一个附表的id,检测这个id是否已存在,如果存在就不执行插入操作!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这些代码看上去是没问题的;可以再做一些数据检测;
echo '<div align=center><p>感谢您的审核,本条新闻已成功发布成功。</p>';
echo "<a href=\"news_list.php\">请返回</a></div>";
exit(); //这里写个中断程序往下执行
不过我有个疑问,为什麽要用2个表去存储相同的数据呢?为什麽要把数据写到“主页新闻表”in_news 呢?看上去“主页新闻表”主要是存储通过审核的数据,在in_newstg表中,已经有chk=1 来区别是否被审核了;要调用数据那只要$sql = "select * from $tbname where chk=1 ";
不就可以了吗?这样避免了相同数据多次存储操作而引发隐藏错误!
echo '<div align=center><p>感谢您的审核,本条新闻已成功发布成功。</p>';
echo "<a href=\"news_list.php\">请返回</a></div>";
exit(); //这里写个中断程序往下执行
不过我有个疑问,为什麽要用2个表去存储相同的数据呢?为什麽要把数据写到“主页新闻表”in_news 呢?看上去“主页新闻表”主要是存储通过审核的数据,在in_newstg表中,已经有chk=1 来区别是否被审核了;要调用数据那只要$sql = "select * from $tbname where chk=1 ";
不就可以了吗?这样避免了相同数据多次存储操作而引发隐藏错误!
更多追问追答
追问
主要是因为主页新闻显示的id需要连续,有上一条、下一条,是通过id++来做的,还有维护的时候会很方便,投稿的垃圾信息隔一段时间就清理一次,防止信息过多。
追答
处理上一条下一条新闻,可以通过大於,小於当前新闻id来处理的;
比如某条新闻的id=2;
那使用 $sql = "select * from in_newstg where chk=1 and id2 limit 1 " ; 就是查询下一条;
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询