-3

我有一些带有 session_start() 函数的 PHP 文件和一些 cookie 参数的设置。它们是纯 PHP 页面,根本没有 HTML。现在我想在这些 PHP 页面中添加一些背景颜色和一些表单和表格。当我添加任何一点 HTML 时,它会给我“标题已通过”的错误!

我想知道嵌入PHP和HTML的正确方法!请告诉我。

这是代码:

<?php
include 'functions.php';
secure_session_start();

define("HOST", "localhost"); // The host you want to connect to.
define("USER", "admin"); // The database username.
define("PASSWORD", "password"); // The database password. 
define("DATABASE", "test"); // The database name.
$mysqli = new mysqli(HOST, USER, PASSWORD, DATABASE);

if(isset($_POST['name'], $_POST['password'])) { 
        $name = $_POST['name'];
        $password = $_POST['password']; // The hashed password.
        if(login($name, $password, $mysqli) == true) {
            // Login success
            echo 'Success: You have been logged in!';
    }    else {
         // Login failed
         echo 'Wrong ID/password!';
    }
} else { 
   // The correct POST variables were not sent to this page.
   echo 'Invalid Request';
}
?>
4

3 回答 3

1

在输出 HTML之前做所有事情,就这么简单。

<?php

    session_start();

    /* here be dragons, i.e. more PHP code */

?>
<!DOCTYPE html>

<html>
...
</html>
于 2013-07-02T13:32:09.960 回答
0

我同意@deceze,仅仅是因为强迫自己在呈现输出之前处理数据可以确保更好地分离关注点(您不太可能将 SQL 与 HTML 混合,坦率地说,这会使人发疯

然而; 为了完整起见,这里有一个“解决方法”,以确保在您想要之前不会转储任何输出。

ob_start()ob_get_clean()

ob_start()开始输出缓冲,并ob_get_clean()返回(并结束输出缓冲。结合使用可以确保不会发送输出。

<?php 
    // start output buffering
    ob_start();
?>

<p>Write HTML, start sessions, eat pie</p>
<?php session_start(); ?>

<?php
    // dump all the things that output
    // buffering captured
    echo ob_get_clean();
?>

如果需要,可以将输出捕获到变量中并进行后处理。不过,我要添加一个免责声明:这不是将 HTML 和 SQL 以及任何其他技术混为一谈并将其固定在互联网上的借口。

于 2013-07-02T13:54:57.490 回答
0

在 PHP 中,在有标题之前不能有任何HTML。标题必须在一切之前。

于 2013-07-02T13:44:17.693 回答