【问题标题】:Storing $_GET and using it again in POST request存储 $_GET 并在 POST 请求中再次使用它
【发布时间】:2018-02-28 06:09:33
【问题描述】:

我正在尝试将$_GET 存储在变量中并在 POST 请求中重新使用它们,但问题是,一旦发送 POST 请求,URL 就会变为空,并且没有任何内容可以存储在变量或存储在变量中的数据被删除,因为 URL 中没有任何内容

success.php?email=16564017@gmail.com&token=M3XK5HeCZy当前网址

发送 POST 请求后,URL 为 success.php,没有任何内容可存储,

我正在尝试基于此方法更新用户密码

我已经用$_SESSION 尝试过这个,但无法弄清楚,我目前的工作

if(!$_GET['email'] && !$_GET['token']) {
    header("Location: register.php");
}
else {
    $arrayCookie = array('email' => $_GET['email'] , 'token' => $_GET['token']);
    $json = json_encode($arrayCookie);
    setcookie('data',$json,time()+(8400));

    $cookie = $_COOKIE['data'];
    $cookie = stripslashes($cookie);
    $cookieSavedArray = json_decode($cookie,true);

    print_r($cookieSavedArray);

    include 'UserActions.php';
    $msg="";
    $checkEmail = new UserActions();
    $checkEmail->databaseConnection('localhost', 'root', '', 'placement2018');
}

HTML 表单

<form action="success.php" enctype="multipart/form-data" method="post">
                    <div class="col-sm-12">
                            <div class="form-group">
                                <label>Password</label>
                                <input type="password" name="pass" placeholder="Enter password" class="form-control" required>
                            </div>
                        <div class="form-group">
                            <label>Confirm Password</label>
                            <input type="password" name="confirmpass" placeholder="Confirm password" class="form-control" required>
                        </div>
                            <input class="btn btn-lg btn-info" type="submit" name="addPassword" value="Submit">
                        </center>

现在,只要我提交表单,URL 参数就不再存在了,所以我想存储 URL 参数,因为我需要基于它运行查询。

如何存储 $_GET 参数以便它们也保留在 $_POST 请求中?

【问题讨论】:

    标签: php post get


    【解决方案1】:

    这就是我解决此问题的方法,我相信这是一种 hack,但它确实有效,我仍在寻找更好的解决方案。

    验证
    如果 URL 中没有参数,它将重定向

     if(!$_REQUEST['email'] && !$_REQUEST['token']) {
         header("Location: register.php");
     }
    

    如果找到参数则:

    if(isset($_POST['addPassword'])) {
      $email = htmlentities($_POST['email']);
      $token = $_POST['token'];
      $password=$_POST['pass'] ;
      $confirm = $_POST['confirmpass'] ;
      if($password == $confirm) {
          if($checkEmail->checkTokenEmail($email,$token)) {
              $password = password_hash($password,PASSWORD_BCRYPT);
              if($checkEmail->setAccountActiveAndInsertPassword($email,$password)) {
                  $msg = "<p style='color:green;text-align:center;'>Successfuly set password, you may login now</p>";
            }
          } else {
            $msg = "<p style='color:red;text-align:center;'>This link is expired</p>";
        }
      }  
    }
    

    最后,在$_POST 请求之前,我将$email$token 存储在一个隐藏字段中,以便在查询中进一步使用它

    <form action="success.php" enctype="multipart/form-data" method="post">
    <div class="col-sm-12">
        <div class="form-group">
            <label>Password</label>
            <input type="password" name="pass" placeholder="Enter password" class="form-control" required>
        </div>
        <div class="form-group">
            <label>Confirm Password</label>
            <input type="password" name="confirmpass" placeholder="Confirm password" class="form-control" required>
        </div>
        <input type="hidden" value="<?php echo $_REQUEST['email'];?>" name="email">
        <input type="hidden" value="<?php echo $_REQUEST['token'];?>" name="token">
        <center>
            <input class="btn btn-lg btn-info" type="submit" name="addPassword" value="Submit">
        </center>
    </div>
    

    【讨论】:

      【解决方案2】:

      使用$_REQUEST['variable_name'] 代替获取请求,它将起作用,您将获得值。

       if(!$_REQUEST['email'] && !$_REQUEST['token'])
       {
           header("Location: register.php");
       }
       else 
       {
        $arrayCookie = array('email' => $_REQUEST['email'] , 'token' =>$_REQUEST['token']);
        $json = json_encode($arrayCookie);
        setcookie('data',$json,time()+(8400));
        $cookie = $_COOKIE['data'];
        $cookie = stripslashes($cookie);
        $cookieSavedArray = json_decode($cookie,true);
      
        print_r($cookieSavedArray);
        //use require instead of include
        require 'UserActions.php';
        $msg="";
        $checkEmail = new UserActions();
        $checkEmail->databaseConnection('localhost', 'root', '', 'placement2018');
        }
      

      【讨论】:

      • 检查这个解决方案。
      • 这行不通,因为一旦发出 post 请求,URL 就会为空
      • 这会起作用,因为 request 可以处理 get 和 post 请求。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多