【问题标题】:PHP, submit form and redirect using header and echo out a success message?PHP,使用标题提交表单和重定向并回显成功消息?
【发布时间】:2014-04-10 10:46:23
【问题描述】:

一旦用户提交了表单,我正在尝试在下一页上回显带有“表单提交成功”消息的 div。

我正在尝试通过使用 $_GET['success'] 来执行此操作,但似乎无法显示消息,请有人指出我正确的方向。

代码:

submit_form.php:

session_start();
$_SESSION['success'] = "<div class='success'>Form Submitted Successfully</div>;
header("Location: index.php?success=$success");

index.php:

<?php
$_GET['success'] ?>

【问题讨论】:

  • 你能不能只是 echo $_SESSION['success']; ?
  • $success 变量未定义。如上所述,如果您要设置会话变量,请使用它

标签: php session


【解决方案1】:
session_start();
$_SESSION['success'] = "<div class='success'>Form Submitted Successfully</div>;
header("Location: index.php");

您正在使用文本消息设置会话,因此您需要做的就是在 index.php 页面上回显会话变量

<?php
    if(isset($_SESSION['success']))
    {
        echo $_SESSION['success'];
    }
  ?>

还要在每一页的开头加上session_start();

【讨论】:

  • 这不会回显任何内容,网址是“index.php?success="
  • @user3488706 查看我的代码头("Location: index.php");我更改了标题代码
【解决方案2】:

因为您已经设置了一个 session 变量,所以只需在 index.php 文件中设置 echo 即可

session_start();    
<?php echo $_SESSION['success']; ?>

【讨论】:

  • 当我这样做时,我收到此错误“注意:未定义的变量:C:\xampp\htdocs\hewden_spms\supplier_fucntion\index.php 中的_SESSION on line 323”
  • 您是否使用 session_start() 将会话继续到 index.php 文件中; ?查看更新的答案
【解决方案3】:

您将值存储在变量$_SESSION['success'] 中并传递未定义的$success,因此引发错误

用此代码替换您的代码:

session_start();
$success = "<div class='success'>Form Submitted Successfully</div>"; // use the $success
//encode the URL parameter as : 

$success = urlencode($success);

header("Location: index.php?success=$success");

并且在 index.php 中只是将成功回显为:

 <?php 
    echo isset($_GET['success'])?$_GET['success']:'Error!'; 
  ?>

希望这会有所帮助!

【讨论】:

  • 这给了我这个错误“注意:未定义的索引:C:\xampp\htdocs\hewden_spms\supplier_fucntion\index.php 在第 323 行成功”
  • @user3488706 检查我更新的答案,这里有两件事 1)要么在 url 中传递参数并通过 $_GET 打印,要么 2)将值存储在 $_SESSION['success'] 中并以echo $_SESSION['success'] 就是这样!
  • 这行得通,但是我的网址看起来像这样,而且非常混乱“index.php?success=%3Cdiv+class%3D%27success%27%3EForm+Submitted+Successfully%3C%2Fdiv%3E "
  • @user3488706 正确的 URL 将是这样的,因为它被编码,如果你的 URL 不是这样,那么在会话中将消息存储为 $_SESSION['success'] = "Form Submitted Successfully" 并且不要在标头,您可以直接在 index.php 中访问它,只需以session_start(); 启动会话并回显$_SESSION['success'];这将完成这项工作
  • @sandip 你在哪里见过这种网址?这不是正确的方法
【解决方案4】:

第一页不需要使用前两行。只需使用您在第三行使用的重定向,并在下一页“index.php”上显示消息,如下所示:

首页:

header("Location: index.php?success=done");

Index.php 页面:

if(isset($_REQUEST['success'])=="done")
{
    echo "<div class='success'>Form Submitted Successfully</div>";
}

【讨论】:

  • 致命错误:不能在 C:\xampp\htdocs\hewden_spms\supplier_fucntion\index.php 中的表达式结果上使用 isset()(您可以使用“null !== expression”代替)在第 325 行
  • @user3488706,请重试。
【解决方案5】:

它应该 100% 工作。

首页:

header("Location: index.php?success=done");

Index.php 页面:

if(isset($_REQUEST['success'])=="done")
{
    echo "<div class='success'>Form Submitted Successfully</div>";
}

【讨论】:

    【解决方案6】:

    代码中的错误数量很大:

    submit_form.php:

    <?php
    session_start();
    $_SESSION['success'] = "<div class='success'>Form Submitted Successfully</div>"; // added " at the end
    header("Location: index.php?success"); //Do NOT pass HTML in here. That makes an XSS security vulnerability 
    ?>
    

    index.php:

    <?php
    session_start(); //ALWAYS start with session_start if you use sessions. session_start should be at the very beginning of your page.
    if(isset($_GET['success']))
        echo $_SESSION['success']; //you put your data in _SESSION, you echo it from _SESSION
    ?>
    

    【讨论】:

    • 即使用户尚未提交表单,这也会保持成功 div
    • @user3488706 查看更新。它显示它是因为它已经在会话中。也许你应该在回显时清除会话?: unset($_SESSION['success']);
    • index.php 的代码是否正确,出现语法错误? "解析错误:语法错误,C:\xampp\htdocs\hewden_spms\supplier_fucntion\index.php 中的意外 'echo' (T_ECHO) 在第 326 行"
    猜你喜欢
    • 2013-10-17
    • 2020-06-12
    • 2019-07-10
    • 1970-01-01
    • 2013-12-08
    • 1970-01-01
    • 2015-10-16
    • 1970-01-01
    • 2013-05-03
    相关资源
    最近更新 更多