【问题标题】:Massive newbie error while using the PHP header() function使用 PHP header() 函数时出现大量新手错误
【发布时间】:2023-03-28 23:08:01
【问题描述】:

如果 $validForm 变量为 TRUE,我正在尝试重定向到 .php 页面。

这是我的代码:

<?php session_start();
require("validationLibrary.php");
$validForm = true;
?>

<html>
    <head>
        <title>Registration Form - 1 of 2</title>
    </head>

    <body>
        <h1>Registration - Part 1 of 2</h1>
        <p>Please fill in all the required information before submitting the information.</p>        
        <form action="registerFormOne.php" method="post">
            <dt>First Name:</dt>
                <dd><input type="text" name="firstName" /></dd><br />
                <dd>
                    <?php
                        if(isset($_POST['firstName'])){
                            if(!validateRequired($_POST['firstName'])){
                                $validForm = false;
                            }
                        }
                    ?>
                </dd><br />

            <dt>Last Name:</dt>
                <dd><input type="text" name="lastName" /></dd><br />
                <dd>
                    <?php
                        if(isset($_POST['lastName'])){
                            if(!validateRequired($_POST['lastName'])){
                                $validForm = false;
                            }
                        }
                    ?>
                </dd><br />

            <dt>EMail:</dt>
                <dd><input type="text" name="email" /></dd><br />
                <dd>
                    <?php
                        if(isset($_POST['email'])){
                            if(!validateEmail($_POST['email'])){
                                $validForm = false;        
                            }
                        }                        
                    ?>
                </dd><br />

            <dt>Age:</dt>
                <dd><input type="text" name="age" /></dd><br />
                <dd>
                    <?php
                        if(isset($_POST['age'])){
                            if(!validateNumber($_POST['age'])){
                                $validForm = false;        
                            }
                        }                        
                    ?>
                </dd><br />

            <dt>Date of Birth:</dt>
                <dd><input type="text" name="dateOfBirth" /></dd><br />
                <dd>
                    <?php
                        if(isset($_POST['dateOfBirth'])){
                            if(!validateRequired($_POST['dateOfBirth'])){
                                $validForm = false;        
                            }
                        }                        
                    ?>
                </dd><br />

            <dt>Gender:</dt>
                <dd>Masculino <input type="radio" value="M" name="gender" checked/> &nbsp;&nbsp;
                Femenino <input type="radio" value="F" name="gender" />
                </dd>            

            <dt><input type="submit" /></dt>

            <?php
                if($validForm = true){                    
                    header("Location: registerFormTwo.php");                    
                    exit;
                }
            ?>
        </form>
    </body>
</html>

我收到此错误:

警告:无法修改标头信息 - 标头已由第 84 行 C:\XAMPP\xampp\htdocs\registerFormOne.php 中的(输出开始于 C:\XAMPP\xampp\htdocs\registerFormOne.php:18)发送/p>

【问题讨论】:

标签: php header


【解决方案1】:

HTTP 标头必须在 任何 内容之前发送。

这意味着您必须在执行任何输出之前完成对header() function 的调用(引用)

记住必须调用header() 在发送任何实际输出之前, 通过普通的 HTML 标签,空白 文件中的行,或来自 PHP。


实现这一目标的一种非常标准的方法是:

  • 将所有验证代码放在脚本的开头,在任何 HTML 输出之前
  • 该验证码将:
    • 任一重定向,如果一切正常,则使用header
    • 或设置变量,以跟踪错误
  • 只有在此之后,如果有必要,您将使用之前设置的变量重新显示您的表单。

【讨论】:

    【解决方案2】:

    必须在将任何信息打印到页面之前发送标题。在回显 HTML 之前,您不能调用 header()

    【讨论】:

    • 就此而言,所有的验证都应该在任何 HTML 输出之前完成。
    【解决方案3】:

    将表单验证和 HTML 生成部分分开。首先验证表单,可选择重定向,否则生成 HTML。

    【讨论】:

      【解决方案4】:

      在页面上放置内容后,您不能使用header() - 您必须在之前这样做(任何输出到客户端的字符都会导致它无法工作。页面必须完全空白)。

      换句话说……

      <html>

      已经太多了。

      你应该做的是在回显任何HTML之前检查表单输入是否有效,如果是,使用header()重定向,否则回显HTML。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-07
        • 2019-03-14
        • 2014-05-30
        • 2011-07-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多