【问题标题】:Using PHP session to display status messages使用 PHP 会话显示状态消息
【发布时间】:2016-10-30 22:16:33
【问题描述】:

我正在尝试在我的联系表单上方显示提交状态,因此我的计划是使用会话,但它无法正常工作。表单成功提交,页面成功重定向回 demo.htm 页面(在重定向到 index2.php 之后),但没有显示任何状态消息。

我还打算使用会话来在空白字段上显示所需的标签,因为 iOS 不支持“必需”输入标签(巨大的 html 表单注释块将替换当前表单字段来处理iOS 上的必填字段)。

更新:echo 发生了一些奇怪的事情......可能是 php.ini 文件的问题(如果是,是什么?)?

输入#1:

 <p>Text Here</p>
<p><?php echo($_SESSION['status']); ?></p>
<p>Temp</p>
<p id="status">
<?php 
    if(isset($_SESSION['status'])){
        echo("<br/>"$_SESSION['status']."<br/>");
        unset($_SESSION['status']);
    }
?>
</p>
<p>More text here</p>

输出#1:

Text Here

Temp

"$_SESSION['status']."
"); unset($_SESSION['status']); } ?>

More text here

输入#2:

<?php echo strcmp("Hello world!","Hello world!")."<br/>"; ?>

输出#2:

"; ?>

PHP:

 <?php
 session_start();

 $firstName = $lastName = $email = $companyName = $jobTitle = $phoneNumber = $comments = "";
 $noErrors = true;

 if($_POST['submit']) {
    if(empty($_POST["firstname"])) {    $_SESSION["nameErr"] = "First name is required"; $noErrors=false;} 
    else {                      $firstName = $_POST['firstname']; }
    if(empty($_POST["lastname"])) {     $_SESSION["lastErr"] = "Last name is required"; $noErrors=false;}
    else {                      $lastName = $_POST['lastname']; }
    if(empty($_POST["email"])) {        $_SESSION["emailErr"] = "Email is required"; $noErrors=false;}
    else {                      $email = $_POST['email']; }
    if(empty($_POST["companyname"])) {  $_SESSION["companyErr"] = "Company name is required"; $noErrors=false;}
    else {                      $companyName= $_POST['companyname']; }
    if(empty($_POST["position"])) {     $_SESSION["jobErr"] = "Job title is required"; $noErrors=false;}
    else {                      $jobTitle = $_POST['position']; }
    if(empty($_POST["number"])) {       $_SESSION["phoneErr"] = "Phone number is required"; $noErrors=false;}
    else {                      $phoneNumber = $_POST['number']; }

    $comments = $_POST['comments'];

    $header = "From: xxxxx.com";
    $to = 'xxxxx.com';
    $subject = 'Demo request';

    $message = "From: \r\n 
        Name: $firstName $lastName\r\n 
        E-mail: $email\r\n 
        Company Name: $companyName\r\n 
        Job Title: $jobTitle\r\n
        Phone Number: $phoneNumber\r\n
        Comments: $comments";

    if(($noErrors == true) && mail ($to, $subject, $message, $header)) {
        $_SESSION['status'] = "Your message has been sent!";
        header('Location: demo.htm');
    } else {
        $_SESSION['status'] = "Something went wrong, please try again";
        header('Location: demo.htm');
    }
    exit();
}
?>

HTML:

<?php
session_start();
?>
<!DOCTYPE html><html>
<head>*stuff*</head><body>
<p id="status">
<?php 
    if(isset($_SESSION['status'])){
        $echo $_SESSION['status'];
        unset($_SESSION['status'];
    }
?>
</p>

<div id="requestADemo">
    <p style="line-height: 2%; font-size: 24px; font-weight: 200;">Request A Demo</p>
    <p style="line-height: 2%; font-style:italic; font-size: 13px;">*indicates required field</p>

    <form method="post" action="index2.php">
        <!--p class="demo" style="margin:0;">First Name:*</p>
            <input type ="name" name="firstname" required>
            <span><?php
                if(isset($_SESSION['nameErr'])){
                    $echo $_SESSION['nameErr'];
                    unset($_SESSION['nameErr'];
                }
            ?></span>
        <p class="demo">Last Name:*</p>
            <input type ="name" name="lastname" required>
            <span><?php
                if(isset($_SESSION['lastErr'])){
                    $echo $_SESSION['lastErr'];
                    unset($_SESSION['lastErr'];
                }
            ?></span>
        <p class="demo">Email:*</p>
            <input type ="email" name="email" required>
            <span><?php
                if(isset($_SESSION['emailErr'])){
                    $echo $_SESSION['emailErr'];
                    unset($_SESSION['emailErr'];
                }
            ?></span>
        <p class="demo">Company Name:*</p>
            <input type ="name" name="companyname" required>
            <span><?php
                if(isset($_SESSION['companyErr'])){
                    $echo $_SESSION['companyErr'];
                    unset($_SESSION['companyErr'];
                }
            ?></span>
        <p class="demo">Job Title:*</p>
            <input type ="name" name="position" required>
            <span><?php
                if(isset($_SESSION['jobErr'])){
                    $echo $_SESSION['jobErr'];
                    unset($_SESSION['jobErr'];
                }
            ?></span>
        <p class="demo">Phone Number:*</p>
            <input type ="number" name="number" required>
            <span><?php
                if(isset($_SESSION['phoneErr'])){
                    $echo $_SESSION['phoneErr'];
                    unset($_SESSION['phoneErr'];
                }
            ?></span>
        <p class="demo">Comments:</p>
            <textarea name="comments" placeholder="Type Here" rows ="10" columns="50"></textarea>
        <p class="demo"><input type="submit" value="Submit" name="submit"></p-->



        <p class="demo">First Name:*<br/><input type ="name" name="firstname" required></p>
        <p class="demo">Last Name:*<br/><input type ="name" name="lastname" required></p>
        <p class="demo">Email:*<br/><input type ="email" name="email" required></p>
        <p class="demo">Company Name:*<br/><input type ="name" name="companyname" required></p>
        <p class="demo">Job Title:*<br/><input type ="name" name="position" required></p>
        <p class="demo">Phone Number:*<br/><input type ="number" name="number" required></p>
        <p class="demo">Comments:<br/><textarea name="comments" placeholder="Type Here" rows ="10" columns="50"></textarea></p>
        <p class="demo"><input type="submit" value="Submit" name="submit"></p>
    </form> 
 </body> 
 </html>

【问题讨论】:

  • 你在哪里设置$_SESSION['status']
  • “它不能正常工作”?有什么问题?
  • 粘贴代码时格式混乱了,session_start 都存在,我在 if/else 的 php 代码末尾设置了“状态”。提交表单时没有任何显示(提交成功)。
  • 您能否编辑您的问题以指导我们哪些页面是.php 页面以及哪些页面是.htm 页面
  • 我不太确定你的意思。我将页面标记为 PHP/HTML。

标签: php html session


【解决方案1】:

HTML 页面不会解析 PHP 数据/语法,除非通过 .htaccesshttpd.conf 或一些类似的服务器级关联方法明确告知。

您正试图在 HTML 页面中显示 PHP SESSION 数据,除非您告诉 html 页面解释 PHP 代码,否则不会发生这种情况。

This StackOverflow question gives you clear guides on how to achieve this.

如果您的demo.htm 只是一个无法处理 PHP 的 HTML 页面,那么您将看到输出(包括所有 PHP 代码)就好像它只是 HTML

例子:

demo.html(来自您的问题):

<?php
 session_start();
 ?>
<!DOCTYPE html><html>
 <head>*stuff*</head><body>
<p id="status">
 <?php 
 if(isset($_SESSION['status'])){
       echo $_SESSION['status'];
  unset($_SESSION['status'];
  }
 ?>
 </p>

这被视为 HTML,因此会产生一团糟的输出,因为 &lt;&gt; 是 HTML 解析器的开始和结束标记。

我还从 echo 语句中删除了 $,因为 echo 是一个函数而不是变量。

解决方案:

虽然我在上面给出的链接很有用,但最快捷和最简单的方法是将您的 demo.htm 重命名为 demo.php 以指示服务器将页面解析为 PHP 页面。您将需要更新页面的链接(例如表单操作标签),但这意味着该页面将被服务器正确处理。

【讨论】:

  • 将其改为 .php 文件会有什么问题吗?如果它不会破坏其他任何东西的功能,那对我来说很好。 (当它是 .php 时它确实工作得很好,谢谢)。
  • 只要您网站其他部分的锚点具有正确的锚点链接目标名称(file.php 而不是file.htm),则不会,不会导致任何问题。 @djd97
  • 好的,完美。谢谢。哦,我确实注意到一件事,如果页面上的任何地方有任何拼写错误,.php 文件将无法加载,因为它不再是 html。有什么办法可以防止这种情况发生 - 即有没有办法让存在拼写错误的元素看起来被破坏,而不是阻止整个页面呈现?
  • 另外,我实际上有一个相关的问题。如果输入不正确,我将如何防止它清除输入字段?我现在设置它的方式是,如果任何字段不正确,我的 index.php 文件末尾的 else 将执行,然后我的 demo.php 文件将清空所有字段(以及下一个通知到任何需要更正的字段)。 @马丁
  • 1) 请继续阅读PHP Error logging。整个页面无法加载,因为 PHP 发现了一个致命错误,导致脚本终止(或者您的数据处理逻辑可能存在缺陷)。
猜你喜欢
  • 1970-01-01
  • 2010-11-12
  • 2012-05-28
  • 2023-04-06
  • 1970-01-01
  • 2019-10-19
  • 2018-03-25
  • 2011-06-12
  • 1970-01-01
相关资源
最近更新 更多