在同一页面按顺序执行更多提交

Posted

技术标签:

【中文标题】在同一页面按顺序执行更多提交【英文标题】:Execute more submit in sequence in same page 【发布时间】:2018-04-25 06:10:28 【问题描述】:

我有那个代码,它工作正常!

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


if(@$_POST['user_token'] && @$_SESSION['submit1']) 
   if($_SESSION['user_token'] == $_POST['user_token']) 
       if (isset($_POST['submit3'])) 
                unset($_SESSION['user_token']);
                $_SESSION['submit1']=false;
        include_once('./my3page.php');
       
       include_once('./searchname.php');
    else 
      header("location: ./index.php");
   
 else 
    include_once('./token.php');
    include_once('./searchform.php');

现在我想添加其他提交会话(因为我有 2 种搜索类型)

我尝试了什么

index.php

session_start();
 //---------------FIRST SEARCH TYPE--------------------------------
if(isset($_POST['submit1']))
    $_SESSION['submit1']=true;


if(@$_POST['user_token'] && @$_SESSION['submit1']) 
   if($_SESSION['user_token'] == $_POST['user_token']) 
       if (isset($_POST['submit3'])) 
        unset($_SESSION['user_token']);
                $_SESSION['submit1']=false;
        include_once('./my3page.php');
       
       include_once('./searchname.php');//PAGE WITH SUBMIT3
    else 
      header("location: ./index.php");
   
   

//---------------SECOND SEARCH TYPE------------------------
    if(isset($_POST['submit2']))
    $_SESSION['submit2']=true;


if(@$_POST['user_token'] && @$_SESSION['submit2']) 
   if($_SESSION['user_token'] == $_POST['user_token']) 
       if (isset($_POST['submit4'])) 
        unset($_SESSION['user_token']);
        $_SESSION['submit2']=false;
        include_once('./my3page.php');
       
       include_once('./searchdate.php');//PAGE WITH SUBMIT4
    else 
      header("location: ./index.php");
   
 

//------------------------
else 
    include_once('./token.php');
    include_once('./searchform.php'); //FIRST PAGE THAT CONTAINS 2 FORM AND 2 SUBMIT BUTTONS, AS I WROTE BELOW

searchform.php

   IF YOU SEE THIS IS SEARCHFORM
    <form method="post">
    <input type="hidden" name="user_token" value="<?php echo $_SESSION['user_token'];?>" />
    <input name="submit1" type="submit" value="Search1"/></td>
    </form>
    <form method="post">
    <input type="hidden" name="user_token" value="<?php echo $_SESSION['user_token'];?>" />
    <input name="submit2" type="submit" value="Search2"/>
    </form>

token.php

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

搜索日期.php

IF YOU SEE THIS IS SEARCHDATE
<form method="post">
<input type="hidden" name="user_token" value="<?php echo $_SESSION['user_token'];?>">
<input name="submit4" type="submit" value="OK2"/>

搜索名称.php

IF YOU SEE THIS IS SEARCHNAME
<form method="post">
<input type="hidden" name="user_token" value="<?php echo $_SESSION['user_token'];?>"><br>
<input align="left" name="submit3" type="submit" value="OK1"/>

my3page.php

MY3PAGE reached

问题

如果我按下 submit1 它也会执行 include_once('./searchdate.php'); 如果我按下 submit2 它也会执行 include_once('./searchform.php');

为什么?

【问题讨论】:

我无法弄清楚你想要达到什么目标,尤其是在会话中。你的 submit3 和 submit4 是什么以及在哪里? 我写了 //PAGE WITH SUBMIT3 和 //PAGE WITH SUBMIT4。我解释说:searchform.php 是一个带有 submit1 和 submit2 的 2 个搜索表单的页面。如果我按 submit1,我需要显示 searchname。 php 而如果我按 submit2 我需要显示 searchdate.php.My3page 是一个带有 2 个查询(更新)结果的页面。我想避免双重插入,所以我使用的是令牌。我不需要在 searchname/searchdate 中更新令牌,因为它们只是一个 SELECT 查询,所以双重插入没有问题。用户可以选择使用searchname或searchdate。会话开始于searchform,结束于last submit3or4 我发布的第一个代码是单一搜索类型(如果用户仅选择 submit1 为例),它工作正常!现在我想添加第二种搜索类型!但是我尝试的方法给我带来了 2 个问题(正如我之前写的),我无法访问 my3page(在这两种情况下) 你能显示包含 submit3 和 submit4 的页面吗? 当您按下 submit1 时,会话 $_SESSION['submit1'] 设置为 true。并且在您按下 $_POST['submit3'] 之前它被设置为 true。因此,如果您在按下提交 1 " && @$_SESSION['submit1'] " 后按下任何按钮,这总是正确的。 【参考方案1】:

请尝试此代码。现在,只有在未按下 submit1 和 submit2 时才会包含您的表单。 在适当的地方添加评论。

<?php
error_reporting(E_ALL);
ini_set('display_errors', false);
?><!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Ricerca</title>
    </head>

    <body>
        <?php
        session_start();
        if (isset($_POST['submit1'])) 
            $_SESSION['submit1'] = true;
            $_SESSION['submit2'] = false; //you can remove if this is not needed.
        
        if (isset($_POST['submit2'])) 
            $_SESSION['submit2'] = true;
            $_SESSION['submit1'] = false; //you can remove if this is not needed.
        

        //---------------FIRST SEARCH TYPE--------------------------------
        if (@$_POST['user_token'] && @$_SESSION['submit1']) 
            if ($_SESSION['user_token'] == $_POST['user_token']) 
                if (isset($_POST['submit3'])) 
                    unset($_SESSION['user_token']);
                    $_SESSION['submit1'] = false;
                    include_once('./my3page.php');
                
                else  //include only if not submit 3 not pressed.
                    include_once('./searchname.php'); //PAGE WITH SUBMIT3
                
             else 
                header("location: ./index.php");
            
        else if (@$_POST['user_token'] && @$_SESSION['submit2']) 
            if ($_SESSION['user_token'] == $_POST['user_token']) 
                if (isset($_POST['submit4'])) 
                    unset($_SESSION['user_token']);
                    $_SESSION['submit2'] = false;
                    include_once('./my3page.php');
                
                else  //include only if not submit4 not pressed.
                    include_once('./searchdate.php'); //PAGE WITH SUBMIT4
                
             else 
                header("location: ./index.php");
            
        
        //Include only if both submit1 and submit2 not pressed.
        else 
            include_once('./token.php');
            include_once('./searchform.php'); //FIRST PAGE THAT CONTAINS 2 FORM AND 2 SUBMIT BUTTONS, AS I WROTE ABOVE, THAT I SEE WHEN I PRESS SUBMIT1 (WHY?)
        
        ?>
    </body>
</html>

【讨论】:

Nothing...它返回相同的错误...如果我按提交 1,我会看到 searchform(正确)但也会看到 searchname.php(错误),如果我按 submit3,我会看到 mypage3(正确)但也再次搜索表单(错误)。如果我按 submit2,我只会看到 searchdate(正确),但是当我按 submit4 后,我会看到 my3page(正确),但也会看到 searchdate.php(错误)。在我写错误之前..在这两种情况下我都可以访问 my3page 为什么我必须尝试?我认为这是没用的,因为如果我按 submit1 $_SESSION['submit2']=false;已经是假的了。我错了吗? 事实上,如果我使用你的代码,什么都不会发生!每次都是一样的:(。注意:再次阅读这篇文章的第一条评论:如果我按 submit1,我会看到 SEARCHFORM 而不是 SEARCHNAME,如果我按 submit2,我首先只会看到 SEARCHDATE(正确),但是之后,当我按 submit4 时,我会看到 my3page并再次加载 SEARCHDATE。谢谢 可能真正的问题在于 的使用。但我不知道在哪里! 回答中给出了我的理解,你能确认你正在为之工作吗?

以上是关于在同一页面按顺序执行更多提交的主要内容,如果未能解决你的问题,请参考以下文章

Qt中连接到同一signal的多个slots的执行顺序问题(4.6以后按连接顺序执行)

您可以强制 SQL 存储过程按给定顺序获取锁吗

selenium测试用例的执行顺序

Mysql事务提交是不是按顺序?

如何使用 GITLAB 功能标志在 CI yml 文件中按顺序运行同一阶段的作业

是否可以按顺序执行 pentaho 步骤?