困扰我多时的问题,特来请教!

chenshx 2007-01-14 10:39:49
我通过下面的方法保存表单(由于项目不固定,因此用了循环):
print_r($_POST);//我先把表单打印出来,是正常的
for($i= 1;$i<count($_POST);++$i)
{
$str = "Temp_Work_".$i;
if(($$str!="")&&($count<$i))//当前表达为临时工作,且工作项目不为空,则保存该工作
{
$Work_Str .= $str;
$Work_Str .= "=".$$str."\t".$i;
$sql = "select count(*) as aaa from rq_data where Prcs_ID =".$PRCS_ID;
$row = mysql_fetch_row(mysql_query($sql));
$count = $row[0]+1;
echo $count;//为调试程序,增加的输出
$val = $$str;
$work = "Temp_Deal_".$i;
$Temp_Over = "Temp_Over_".$i;
$sql = "insert into rq_data(Prcs_ID,ID,Projects,Deal,Is_Over,Belong_User) values(".$PRCS_ID.",".$count.",'".$val."','".$$work."',1,'".$LOGIN_USER_ID."')";
mysql_unbuffered_query($sql);
echo $sql;
}//临时工作处理完毕

}
现在我的问题是:为什么有时候会出现重复插入数据的情况,并且在这种重复插入数据的情况下,打印的表单是正常的,打印的输出标志也只有一次,但就是插入了两条记录
然后我在进入for循环前进行通过sql查询是否已经存在将要插入的记录,发现数据库中已经存在将要插入这条记录,并且这种我没有预计的插入是不打印我设置的调试标志(我在执行插入前已经清空了数据库)
我想问的是:为什么会出现这种重复插入数据的情况,是不是php优化编译处理的结果,或者在php.ini文件中进行了什么设置,我要怎么才能正常插入数据(保证只插入一次)
...全文
412 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenshx 2007-02-02
  • 打赏
  • 举报
回复
谢谢提醒,可是我确实没有想到好的方法(我不知道用户有没有录入数据,同时,工作数量是动态的,我只好判断每一个文本域,并且确认已经录入了数据),如果谁处理过这类问题,希望可以给给我点提醒:)

我用了foreach也存在同样的问题(重复插入数据),我想foreach应该也是同样浪费系统资源的
li1229363 2007-02-01
  • 打赏
  • 举报
回复
$str = "Temp_Work_".$i;
if(($$str!="")&&($count<$i))//当前表达为临时工作,且工作项目不为空,则保存该工作
{
//请注意,这个是存在于for循环的,这个的使用真的好么?

就这个判断而言,是有一些不科学的,不应该使用这样的判断。当然了,这个也只是我不成熟的看法而已

对于楼主遇到的问题,我是从来没有遇到过的,呵呵~

楼主所说服务器软件的使用版本,我们也许能够找到问题的所在。


顺便说一句,感觉楼主有一点偷懒了,而且感觉代码非常不科学。去那个楼主好好研究下自己的代码。当然,我不是在贬低楼主,只是我看到这样写,好像有浪费系统资源的嫌疑,有点忍不住
chenshx 2007-02-01
  • 打赏
  • 举报
回复
一直没有解决,也不知道是什么原因!

最好只好在插入数据前加上复杂的判断。。。
chenshx 2007-01-15
  • 打赏
  • 举报
回复
CREATE TABLE `rq_data` (
`Prcs_ID` int(11) NOT NULL default '0',
`ID` int(11) NOT NULL auto_increment,
`Projects` text NOT NULL,
`Deal` text,
`Is_Over` tinyint(1) NOT NULL default '0',
`Belong_User` varchar(30) NOT NULL default 'XXX',
`Head_Prcs` int(11) default NULL,
PRIMARY KEY (`Prcs_ID`,`ID`)
) TYPE=MyISAM;

是不是我这个表格有问题的啊?或者在什么情况下Mysql表格可能会出现这种情况!
懒得去死 2007-01-15
  • 打赏
  • 举报
回复
你的键表语句呢
chenshx 2007-01-14
  • 打赏
  • 举报
回复
谢谢!
我的程序是还有很多代码,为了查问题,我已经删去了其他代码,留下前面一行判断用户权限的:
include "../config.php";
在那个文件中,没有任何插入数据的sql语句;我也曾用foreach进行插入,同样出现这个问题(在流程中执行insert前就插入了记录)
补充一点,我是将改模块放入极限OA3.0的框架底下,改系统使用了zend。但我其他自行开发的模块目前还没有此类问题!
继续寻求答案,望高手不吝指导,谢谢!
iasky 2007-01-14
  • 打赏
  • 举报
回复
这个到不少和php的引擎有关的,也和php.ini没有关系,还是好好得检查一下你的代码,就你给的代码片断而言,看不出什么问题。
chenshx 2007-01-14
  • 打赏
  • 举报
回复
现在的问题是,我在每次执行 insert sql 前,都使用一次echo $sql。 如果出现了重复插入记录的情况,也只输出一次sql语句,并且可以肯定的是我没有预计的情况下的插入记录没有输出!

我是从别的页面提交,然后跳入保存页面,在跳转导保存结果的提示页面,应该不存在刷新的情况,并且我测试时肯定只按了一次提交按钮!
kbbb 2007-01-14
  • 打赏
  • 举报
回复
你可以把所有插入数据的sql都显示出来看看到底哪句出问题
an9ryfr09 2007-01-14
  • 打赏
  • 举报
回复
有时会重复插入了记录?
是不是你不小心刷新了下页面?如果是刷新页面造成的.再你插入数据库的代码后面加一句header("location: ".$_SERVER['PHP_SELF']);就可以解决问题了.

21,889

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧