php选择框的session防止重复提交问题

//数据接口连接正常,就是session方式不能实现判断是否重复提交<metacharset="utf-8"><?php$App=newAppInfo();$appDat... //数据接口连接正常,就是session方式不能实现判断是否重复提交<meta charset="utf-8"><?php $App = new AppInfo(); $appData=$App->appInfo; //引入数据接口 if (!isset($_POST['originator'])) { if(!session_id())session_start(); $code=mt_rand(0,1000000); $_SESSION['code']=$code; }//生成随机数?><html> <title>用户提交应用界面</title> <form id="form2" name="form2" method="post" action=""> <div align="left"> 请选择数据: <select name="select" id="select" type="hidden"> <?php
///循环接口数据到下拉框 foreach ($appData as $k=>$v) {?> <option value="<?php echo $v['id'] ?>"><?php echo $v['name'];?> </option> <?php }?> </select>
//隐藏值进行传递 <input type="hidden" name="originator" value="<?=$value?>"> <input type ="submit" value ="提交"/> </div> </form> <input type="button" value="返回主页" onclick="location.href='/player/server/views/index.html'"><?php
//判断是否重复提交 if(isset($_POST['select'])){////var_dump($_POST['originator']);/////var_dump($_SESSION['code']); if($_POST['originator']==$_SESSION['code']){ $select=$_POST['select']; $uss = new UserAction(); $uss->userSubmit($select);//提交数据// $code=mt_rand(0,1000000); $_SESSION['code']=$code;//这里赋值 } else{ echo '请不要刷新页面或重复提交表单!'; } } ?></html>/////session方式选择表单提交判断是否重复提交
展开
 我来答
匿名用户
推荐于2016-08-06
展开全部
大致看了下,主要两个问题:
1)session_start(),代码里仅在没有提交且没有生成过session时才执行,这直接导致提交时$_SESSION未定义
2)隐藏值originator,value="<?=$value?>">,$value从哪来的?应该是$code吧。但如果是$code,那必然又和$_SESSION['code']一致了

可以考虑以$_SESSION['code']是否存作为判断是否第一次提交的依据,示例代码如下:
----------------------------------------------------------
<?php session_start(); ?>

<!-- 页面显示部分 -->
<html>
<form id="form2" name="form2" method="post" action="">
<div align="left">请选择数据:
<select name="select" id="select">
<?php
$App = new AppInfo();
$appData=$App->appInfo;
foreach ($appData as $k=>$v) {
echo '<option value="', $v['id'], '">', $v['name'], '</option>';
}
?>
</select>
<input type ="submit" value ="提交"/>
</div>
</form>
<input type="button" value="返回主页" onclick="location.href='/player/server/views/index.html'">

<!-- 提交处理部分 -->
<?php
if( isset( $_POST['select'] ) ){
if( isset( $_SESSION['code'] ) ){
echo '请不要刷新页面或重复提交表单!';
}else{
$uss = new UserAction();
$uss->userSubmit($_POST['select']);
$_SESSION['code'] = TRUE;
}
}?>
</html>
更多追问追答
追问
亲,很感谢你耐心的看完了我的代码,还整理了出来。本意是在本页完成提交数据,又在本页完成判断是否重复提交,现在的情况类似于a-》b,b-》c,没法判断a和c的关系,存在逻辑错误。。你给的$_SESSION= mt_rand(0,1000000000),少了这个隐藏值,故没法判断是否是重复。
追答
上面的示例中,没有采用隐藏值的方式,直接以 $_SESSION['code']是否存在作为判断依据的

用其他内容替换了你的AppInfo和UserAction,测试过的,应该可以达到你想要的效果

另外,上面的示例只是一个页面脚本,为了看着方便,加了各部分功能的标注。你可以把你的AppInfo和UserAction加到最前面,运行试试看
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tsotsi
2014-01-21 · TA获得超过940个赞
知道小有建树答主
回答量:1367
采纳率:55%
帮助的人:698万
展开全部
加个隐藏域 <input type="hidden" name="toket" value="dasdaiweuhfja">
值 放到 session里一份 提交后 判断是否相等 是就确认并清空session中的值
更多追问追答
追问
上面加了隐藏域的://隐藏值进行传递    "> //就是这样传的,可是没用。这百度也真是的,给我提问的东西全都打乱了,
追答
你的$value因该改成$code的吧  你的$value值是什么?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
njumwx
2014-01-21 · TA获得超过327个赞
知道小有建树答主
回答量:868
采纳率:0%
帮助的人:438万
展开全部
朋友你这个逻辑有问题,永远都是相等的,自然测不出来
追问
那给个方案呗,这有点头疼了,主要是隐藏值获取不到,,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式