关于php代码问题,提交一次数据后,第二次刷新一下 会将上次的数据自动插入到数据库。

<formaction="insert.php"method="post"><inputtype="text"name="name"/><br/><inputtype="... <form action="insert.php" method="post">
<input type="text" name="name" /><br />
<input type="password" name="pwd" /><br />
<input type="text" name="sel" />
<input type="submit" value="提交" name="sub"/>
</form>
<?php
$db=new PDO("mysql:host=localhost;dbname=test0","root","123",array(PDO::ATTR_PERSISTENT =>true));
$db->query("set names gbk");
$name=$HTTP_POST_VARS["name"];
$pwd=md5(md5($HTTP_POST_VARS["pwd"]));
$email=$HTTP_POST_VARS["sel"];
$sql=$db->exec("insert into reg(name,pwd,email) values('$name','$pwd','$email')");
$ss=$db->query("select * from reg");
foreach($ss as $rs)
{
echo $rs[name]."<br />";

}
?>
展开
 我来答
百度网友d7e10266d1
推荐于2017-11-25 · TA获得超过5480个赞
知道小有建树答主
回答量:713
采纳率:0%
帮助的人:710万
展开全部

在表单页面设置一个隐藏域,尽量让隐藏域的值不重复,例如在表单页面form.php中设置隐藏域hashCode,并让hashCode的值为当前的时间戳:

<form name="form1" action="form_action.php" method="post">
    <input type="hidden" name="hashCode" value="<?php echo time()?>"/>
</form>

在表单处理页面form_action.php接收隐藏域hashCode的值,判断是否存在$_SESSION['ACTION']或者$_SESSION['ACTION']的值是否等于表单提交的hashCode的值,如果相等为重复提交数据。

<?php
session_start();
$hashCode    =trim($_POST['hashCode']);
if(!isset($_SESSION['ACTION'])||$_SESSION['ACTION']!=$hashCode){
    //新提交数据,入库操作
    $_SESSION['ACTION']    =$hashCode;//标记操作完成
}else{
    echo '请勿重复提交数据';
    exit();
}
?>
追问
我的意思是同一个页面的
追答

思路一样的,多加一个变量用于代表要执行的行为:

<?php
session_start();
$action     =$_GET['action'];
$hashCode   =trim($_POST['hashCode']);
if($action=='save'){
    if(!isset($_SESSION['ACTION'])||$_SESSION['ACTION']!=$hashCode){
        echo 'Saved!';
        $_SESSION['ACTION'] =$hashCode;
    }else{
        echo '请勿重复提交数据!';
        exit();
    }
}
?>
<form name="form1" action="?action=save" method="post">
    <input type="hidden" name="hashCode" value="<?php echo time(); ?>"/>
    <input name="提交" type="submit" value="submit"/>
</form>
深蓝色_1990
2013-05-16 · 超过10用户采纳过TA的回答
知道答主
回答量:38
采纳率:0%
帮助的人:29万
展开全部
表单页面是一个文件,数据库插入是一个文件,分开来做,不然肯定会每刷新一次就执行一次,都不需要按提交按钮
更多追问追答
追问
那放在一个页面里怎么处理
追答
为什么非要放到一个页面呢,在以后开发的时候是不可能让你放一块的,前后台是不同人员开发的,不能放一起,不然后期维护非常麻烦,如果你非要放一起,那你就需要在开始加一个判断条件,判断是否按下了提交按钮,只有按提交的情况下,才执行后续语句。不过这样,真的是自找麻烦,建议不要这么写
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lxwithgod
2013-05-16
知道答主
回答量:17
采纳率:0%
帮助的人:13.3万
展开全部
将name字段设定为unique,这样,重复的name将不能插入数据库,但会爆出一个错误,可以将其$db->exec("insert into reg(name,pwd,email) values('$name','$pwd','$email')") or exit("用户名重复!!!");
更多追问追答
追问
exec("insert into reg(unique,pwd,email) values('$name','$pwd','$email')") or exit("用户名重“)你的意思直接这样,在数据库里name改为unique啊,那要是我调用其他的字段活多个字段值呢
追答
这样解决刷新就插入的问题 了啊。而且,用户登录名本来就该保持唯一性。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式