【问题标题】:Redirecting to same page along with Success Message with Php使用 Php 与成功消息一起重定向到同一页面
【发布时间】:2017-02-26 00:44:39
【问题描述】:

重定向到同一页面后显示成功消息的最佳方式是什么?我一直在考虑用 javascript 做到这一点,但也许有办法用 Php 做到这一点?用户从 profile.php 提交并被重定向到同一页面。我想获取一个变量...我可以在$_SERVER['HTTP_REFERER'] 之后连接吗?最好的方法是什么?

这里有一段 sn-p 代码:query.php

$stmt->execute() or die(mysqli_error($db)); 

if($stmt){
 // echo "Data Submitted succesfully";
  header('Location: ' . $_SERVER['HTTP_REFERER']);
exit;
  }
$stmt->close();
$db->close();
}

【问题讨论】:

    标签: php redirect concatenation


    【解决方案1】:

    您可以跳过会话,并将 url 查询参数作为代码或消息传递。

    $stmt->execute() or die(mysqli_error($db)); 
    
    if($stmt){
     // echo "Data Submitted succesfully";
      header('Location: ' . $_SERVER['HTTP_REFERER'] . '?message=success1');
    exit;
      }
    $stmt->close();
    $db->close();
    }
    

    然后有代码检查 $_GET['message] ...等

    【讨论】:

    • 我想知道...'?message=success1''&message=success1' 在链接方面有区别吗?
    • @SebastianFarham 是的。 ? 表示查询字符串的开始,后面是变量名、=,然后是它的值。后续变量使用& 附加到查询字符串,如下所示:?var=value&var2=value2&var3=value3...
    【解决方案2】:

    您可以使用会话。只需启动会话,将消息保存在全局数组$_SESSION 中,然后在profile.php 中检查$_SESSION 是否设置了您的密钥并且它不是空的。之后,您可以在$_SESSION 中取消设置您的密钥。

    query.php

    <?php
    session_start();
    //your code
    if($stmt) {
        $_SESSION['myMessage'] = 'Some message';
        //your code
    }
    //rest of your code
    

    profile.php

    <?php
    session_start();
    //your code
    if(isset($_SESSION['myMessage']) && $_SESSION['myMessage'] !== '') {
        //display message or do with it what you want
    }
    //rest of code
    

    【讨论】:

    • 然后在两个地方都跳过 session_start()。
    【解决方案3】:

    如果您在同一页面中处理表单,则无需进行任何重定向。 实现预期结果的解决方案如下:

    • 将表单处理代码放在 PHP 脚本的最顶部,即 profile.php 页面。
    • 使用布尔变量来保存-&gt;execute() 语句的状态,并在您的代码后面使用相同的变量。

    所以代码应该是这样的:

    // Declare a boolean variable at the beginning
    $status = false;
    
        // your code
        $status = $stmt->execute(); 
        $stmt->close();
        $db->close();
    }
    
    if($status){
        // Data submitted succesfully
    }else{
        // Data couldn't get submitted
    }
    

    【讨论】:

      【解决方案4】:

      如果你想在同一个文件中处理表单,你不需要再次重定向到同一个页面。

      正如另一个答案所提到的,您处理页面顶部的表单。

      要在成功或失败后显示消息,请将消息存储在变量中。稍后与您回显消息变量(如果已设置)。

      // Check if form was submitted
      
        if(isset($_POST['submit'])) { // I name the submit button "submit"
            // process the form
      
            if ($stmt->execute()) {
                $message = "<div> Success </div>";
            } else {
                $message = "<div> Failed </div>";
            }
        }
      
      // Display The form and the message if not empty
      
        if (! empty($message)) {
            echo $message;
           } 
      
      // Form 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-26
        • 2020-10-12
        • 2013-11-30
        • 2012-07-12
        相关资源
        最近更新 更多