2017-11-11 97 views
-1

我有一个代码,它很好地工作:

if (isset($_POST['submit1'])) 
    { 
     if($_SESSION['user_token'] == $_POST['user_token']) { 
      unset($_SESSION['user_token']); 
      include_once('./token.php'); 
      include_once('./my2page.php'); //**PAGE WITH SUBMIT2** 
     } else { 
      header("location: ./index.php"); 
     } 
    } else { 
     include_once('./token.php'); 
     include_once('./my1page.php'); //**PAGE WITH SUBMIT1** 
    } 

token.php

$form_token = uniqid(); 
$_SESSION['user_token'] = $form_token; 

在my1page.php表单包含:

<input type="hidden" name="user_token" value="<?php echo $_SESSION['user_token'];?>"> 

现在我需要嵌套第二,如果isset提交(令牌必须是在最后提交解除警戒)。

是我的尝试没有成功

if(isset($_POST['submit'])){ 
    $_SESSION['submit']=true; 
} 

if (isset($_POST['submit']) || (isset($_SESSION['submit']) && $_SESSION['submit'])) { 
    if($_SESSION['user_token'] == $_POST['user_token']) { 
     if (isset($_POST['submit1'])) { 
      if($_SESSION['user_token'] == $_POST['user_token']) { 
       unset($_SESSION['user_token']); 
       $_SESSION['submit']=false; 
       include_once('./script/token.php'); 
       include_once('./my3page.php'); 
      } else { 
      header("location: ./3.php"); 
      } 
     } 
     include_once('./my2page.php'); 
    } else { 
     header("location: ./index.php"); 
    } 
} else { 
    include_once('./token.php'); 
    include_once('./my1page.php'); 
} 
+0

在你不成功尝试,你有多余的,如果'如果($ _ SESSION [“user_token”] = = $ _ POST [“user_token”])目前尚不清楚{'因为你已经在上面检查过了。 – ArtisticPhoenix

回答

0

HTTP无状态的作品。这意味着这里发生的事情如下:

  1. 用户第一次打电话给此页。他发送GET请求,所以isset($_POST['submit1'])是错误的。
  2. 现在他点击提交并发送第一个POST请求。 (我假设你为submit1设置了一个值。)isset($_POST['submit1'])为真,返回my2page.php
  3. 他发送第三个请求。再次发布POST请求,但这次的submit2值。你的服务器模板引擎开始评估php。 isset($_POST['submit1'])是假的,所以它返回旧my1page.php

基本上,不要窝支票,但使用it else代替。(你可以把它作为一个开关/箱

isset($_POST['submit1']) → ./my2page.php 
isset($_POST['submit2']) → //end page 
none      → ./my1page.php 
+0

你是对的!但是,你的意思是:基本上,不要嵌套你的支票,而是使用其他的。等等....?我有一个搜索表单(my1page)的页面,返回一个包含结果(my2page)的表格...在我需要提交一些查询结果(mySUBMIT2)后! – Squalo

+0

好,而不是检查请求1,如果它是真的也检查请求2,检查第二个选项,如果第一个不是这种情况。 ('if(request1)SendPage1 else if(request2)SendPage2 else SendIndex') – SourceOverflow

+0

但页面1彼此相邻 – Squalo

0

你不能在同一时间2次的提交等什么这里发生的是

if(condition){ 
    if(!condition){ 
     //do somthing 
    } 
} 

这将永远不会奏效尝试使用其他网页或我建议保存先在$ _SESSION提交;

添加此河旁

$_SESSION['submit1'] = (isset($_POST['submit1']))? true: false; 

不是改变第一COND ition

if (isset($_POST['submit1']) || $_SESSION['submit1']) { 
    if($_SESSION['user_token'] == $_POST['user_token']) { 
     if (isset($_POST['submit2'])) { 
      if($_SESSION['user_token'] == $_POST['user_token']) { 
       unset($_SESSION['user_token']); 
       $_SESSION['submit1']=false; //or unset($_SESSION['submit1']); 
       //DO SOMETHINGS 
      } else { 
      header("location: ./index.php"); 
      } 
     }  
     include_once('./my2page.php'); //**PAGE WITH SUBMIT2** 
    } else { 
     header("location: ./index.php"); 
    } 
} else { 
    include_once('./token.php'); 
    include_once('./my1page.php'); 
} 
+0

谢谢......太棒了!我必须添加'$ _SESSION ['submit1'] =(isset($ _ POST ['submit1']))? true:false;'? – Squalo

+0

对不起,我犯了一个错误,添加这条线而不是另一条。如果(isset($ _ POST ['submit1'])){ $ _SESSION ['submit1'] = true; } 在之前添加它; if(isset($ _ POST ['submit1'])) –

+0

你能改正答案,以便我能理解吗?请 – Squalo

0

这是应该如何的;如果你想要一个

if(isset($_POST['submit1'])){ 
    $_SESSION['submit1']=true; 
} 

if (isset($_POST['submit1']) || $_SESSION['submit1']) { 
    if($_SESSION['user_token'] == $_POST['user_token']) { 
     if (isset($_POST['submit2'])) { 
      if($_SESSION['user_token'] == $_POST['user_token']) { 
       unset($_SESSION['user_token']); 
       $_SESSION['submit1']=false; //or unset($_SESSION['submit1']); 
       //DO SOMETHINGS 
      } else { 
      header("location: ./index.php"); 
      } 
     }  
     include_once('./my2page.php'); //**PAGE WITH SUBMIT2** 
    } else { 
     header("location: ./index.php"); 
    } 
} else { 
    include_once('./token.php'); 
    include_once('./my1page.php'); 
} 
+0

好!它工作,但它给了我一些错误:在我看到的第一页上注意:未定义的索引:第19行上的submit1(正好在'if(isset($ _ POST ['submit1'])|| $ _SESSION ['submit1']){ '和注意:未定义的索引:user_token在my3page第20行时,当我刷新(和我需要删除cookie后,因为我不能再访问my1page – Squalo

+0

什么样的错误 –

+0

更改所有'$ _SESSION ['submit1' ]''by'code' $ _SESSION ['submited']'code',看看警告钢是否相同 –

0

你接近,你可以可能只是改变这种

if (isset($_POST['submit1'],$_POST['submit2'])) { //check isset on both 
    if($_SESSION['user_token'] == $_POST['user_token']) { 
     if (isset($_POST['submit2'])) { 
//   if($_SESSION['user_token'] == $_POST['user_token']) { <--redundant check 
      unset($_SESSION['user_token']); 
      //DO SOMETHINGS 
     }  
     include_once('./my2page.php'); //**PAGE WITH SUBMIT2** 
    } else { 
     header("location: ./index.php"); 
    } 
} else { 
    include_once('./token.php'); 
    include_once('./my1page.php'); 
} 

取决于如果你想要一个ANDOR上述上等同于该

if (isset($_POST['submit1']) && isset($_POST['submit2'])) { 

显然或者只是把它放在这里

if (isset($_POST['submit1']) || isset($_POST['submit2'])) { 

,如果你是在谈论2 POST的是单独或同时

+0

现在我已经看到只能用iexplorer访问页面,,, Chrome会返回ERR_TOO_MANY_REDIRECTS。可能是'if($ _ SESSION ['user_token'] == $ _POST ['user_token'])''但是我怎么能解决这个问题呢?请看第一篇文章。 – Squalo

+0

您是否重定向到同一页面,并重新导向到同一页面?这将导致无限循环,浏览器将放弃。 – ArtisticPhoenix

+0

请看现在...只有当令牌过期时,我才会重定向到同一页面...或者至少我认为...我错了? – Squalo

相关问题