PHP   发布时间:2022-04-05  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了为什么我的$_SESSION或’if’语句拆分为两页时不会触发?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在尝试制作一封电子邮件表格,当发生错误时它会显示一条Flash错误消息.我将流程分为两页,第一页是表单的contact.PHP页,第二页是验证和电子邮件’mail()’函数所在的validation.PHP页.我通过’require_once(“ validation.PHP);链接页面.在contact.PHP页面顶部.

当我将它们拆分为这两页时,将不会显示Flash消息,但是当我仅将所有代码都放在contact.PHP页面上时,它就可以工作.但是,即使发生此问题,填写表单时也确实会发送电子邮件,因此我知道页面链接正在工作并且某些代码正在执行.

知道为什么会这样吗?

这是我的代码的简化版本:

contact.PHP

<?PHP 
require_once("validation.PHP");
?>
<!DOCTYPE html>
<html lang="en">
<head>
  <title>...</title>
</head>
<body>
   <main class="container">
            <div class="form-container">
            <?PHP

                echo '<pre>'.print_r($_POST).'</pre>';
                echo '<pre>'.print_r($_SESSION['error']).'</pre>';
                if ( isset($_SESSION['error']) ) {
                    echo('<p style="color: red;">'.$_SESSION['error']." 
                    </p>\n");
                    unset($_SESSION['error']);
                }

             ?>

            <form action="contact.PHP" method="POST">
                <label for="name">Enter your name: </label><br>
                <input type="text" name="name"><br>
                <label for="email">Enter your email: </label><br>
                <input type="email" name="email"><br>
                <label for="subject">Subject line: </label><br>
                <input type="text" name="subject"> 
                <br>
                <label for="message">message: </label><br>                                      
                <textarea name="message" cols="75" rows="10"> 
                </textarea><br>
                <input type="submit" value="Submit">

            </form>
             </div><!-- .form-container -->
        </main>
       </body>
      </html>

validation.PHP

<?PHP 
 session_start();


 if ($_SERVER["requEST_METHOD"] == "POST") {

    $name = test_input($_POST["name"]);
    $email = test_input($_POST["email"]);
    $subject = test_input($_POST["subject"]);
    $message = test_input($_POST["message"]);


    if ( strlen($Name) < 1 || strlen($email) < 1 || strlen($subject) < 1 || 
strlen($messagE) < 1) {

        $_SESSION['error'] = "All fields are required";
        header("LOCATIOn: contact.PHP");
        return;

    } else {

        $to = "example@example.com";
        $name = $_POST['name'];
        $email = $_POST['email'];
        $subject = $_POST['subject'];
        $message = $_POST['message'];
        $headers = "From: $name <$email>";

        mail($to, $subject, $message, $headers);

     }
}

function test_input($data) {
    $data = trim($data);
    $data = Strip_tags($data);
    $data = Stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}
?>

解决方法:

问题是由使用退货引起的;而不是退出;
由于包含文件未终止,因此将处理脚本的其余部分.

您的代码应按以下方式进行编辑:

if (!session_id()) {
    session_start();
}

if ($_SERVER["requEST_METHOD"] == "POST") {
    $name = test_input($_POST["name"]);
    $email = test_input($_POST["email"]);
    $subject = test_input($_POST["subject"]);
    $message = test_input($_POST["message"]);

    if (strlen($Name) < 1 || strlen($email) < 1 || strlen($subject) < 1 ||
        strlen($messagE) < 1) {

        $_SESSION['error'] = "All fields are required";
        header("LOCATIOn: contact.PHP");
        exit;
    }
    //no need for else since when the if condition is true, it is terminated
    $to = "example@example.com";
    $name = $_POST['name'];
    $email = $_POST['email'];
    $subject = $_POST['subject'];
    $message = $_POST['message'];
    $headers = "From: $name <$email>";
    mail($to, $subject, $message, $headers);
}

//...

编辑回答评论问题:

就像函数一样,允许包含文件返回诸如数组之类的值.因此,当您使用return时,它并没有阻止脚本的其余部分在那一点上执行.但是,它确实“保留”了包含文件.
因此,您的脚本添加了标头,然后返回void,然后在包含之后继续显示HTML内容.

例如:

<?PHP
//index.PHP
$value = include 'my_file.PHP'; 
var_dump($value); 

 

<?PHP
//my_file.PHP
return ['foo' => 'bar'];

由于标头后有文字内容,因此也不支持重定向.

大佬总结

以上是大佬教程为你收集整理的为什么我的$_SESSION或’if’语句拆分为两页时不会触发?全部内容,希望文章能够帮你解决为什么我的$_SESSION或’if’语句拆分为两页时不会触发?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: