当 Echoing html in Php 时,输出以明文显示

When Echoing html in Php, output is displayed in the clear

我在尝试在用户提交表单后回显 html 页面时遇到问题。按下提交按钮后,用户将被重定向到包含下面 php 代码的 email.php 页面。然而回显 returns html 内容清晰且格式不正确。

这是我的PHP代码:

<?php
//error_reporting(E_ALL);
//ini_set("display_errors", "On");`

//$json_data=$_GET['track'];
//______________________________________
//Establish Connection
$db = new PDO('mysql:host=xxxx;dbname=xxxx;charset=utf8', 'xxxx', 'xxxx')
    or die("cannot open database");
//$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
//$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);

$sql = "INSERT INTO xxxx (xxxx, xxxx, xxxx, xxxx) VALUES (:email, :firstname, :lastname, :year :month :day)";

$params = array(
    ':email' => $_POST['email'],
    ':firstname' => $_POST['firstname'],
    ':lastname' => $_POST['lastname'],
    ':day' => $_POST['day'],
    ':month' => $_POST['month'],
    ':year' => $_POST['year']
);
$points = $db->prepare($sql);

echo "<html>
<head>
<title>XXXX Confrimation</title>
</head>
<body style='background-color:#f3f3f3; margin:0;'>
<div style='background-color:#0a5a92; padding: 10px;color:#f3f3f3; margin:0px;'>
<h2>Thank You for Signing up!</h2>
</div>
<div style='padding: 0px 10px 0px 10px;'>
<p> If you did not subscribe to XXXX, please email <a href='mailto:XXXX@XXXX.com'>XXXX@XXXX.com</a> to unsubcribe.</p>
<br/>
</div>
</body>
</html>"
;

输出如下:

<html>
<head>
<style type="text/css"></style>
</head>
<body>
<pre style="word-wrap: break-word; white-space: pre-wrap;">
    <html>
    <head>
    <title>XXXX Confirmation</title>
    </head>
    <body style='background-color:#f3f3f3; margin:0;'>
    <div style='background-color:#0a5a92; padding: 10px;color:#f3f3f3; margin:0px;'>
    <h2>Thank You for Signing up!</h2>
    </div>
    <div style='padding: 0px 10px 0px 10px;'>
    <p> If you did not subscribe to XXXX, please email <a href='mailto:XXXX@XXXX.com'>XXXX@XXXX.com</a> to unsubcribe.</p>
    <br/>
    </div>
    </body>
    </html>
</pre>
</body>
</html>

我在 php 方面不是最好的,而且我 运行 的知识非常有限。我也 运行 我的网站使用 wordpress。如果您知道为什么会这样,请告诉我。我已经在论坛中搜索了一个多星期,但没有找到解决方案。

------编辑------

我意识到我在将内容声明为 json 文件的 php 代码的 headers 中犯了一个错误。因为这是我的一个错误,与上面的问题无关,所以我将删除这个问题。感谢您发布您的答案,因为没有它们我就不会看到这个愚蠢的错误。

----------编辑-------- 更正:我将转向 up-vote 那些帮助过我的人,以防其他人遇到与此类似的问题。我目前没有 up-vote 的声誉,但我会尽快获得。再次感谢。

您似乎将您的内容回显到一个已经具有基本 HTML 框架(打开 html 标签等)的站点。如果查看输出,可以看到有 2 个 html、2 个 body 和 2 个 head 标签,它们只能出现 一次每个网站。我猜你的脚本将你的脚本输出回显到 <pre> 标签中。

试试这个 echo,看看它是否会导致你想要的输出:

echo "
<body style='background-color:#f3f3f3; margin:0;'>
<div style='background-color:#0a5a92; padding: 10px;color:#f3f3f3; margin:0px;'>
<h2>Thank You for Signing up!</h2>
</div>
<div style='padding: 0px 10px 0px 10px;'>
<p> If you did not subscribe to XXXX, please email <a href='mailto:XXXX@XXXX.com'>XXXX@XXXX.com</a> to unsubcribe.</p>
<br/>
</div>";

默认情况下,您已经在 wordpress 中打开了一个数据库连接。使用下面的示例....在同一页面上处理提交并重定向到另一个页面再次拉取信息(如果他们按下刷新按钮,这将很重要)因此您可以使用:[=13 而不是 pdo 函数=]

if($_POST):

    global $wpdb;
    $data[]=$_POST['value'];
    $wpdb->insert( 'wp_custom', $data);

    if($wpdb->insert_id):
       $url= get_site_url().'/rest of the url'.'id='.$wpdb->insert_id;
       wp_redirect($url);
       exit();
    endif; 
endif;

get_header(); // will apply html and title tags.....check your theme for the the correct div / section to start html code with.
?>
<form action="" ></form>

重定向页面:

if($_GET['id']):
   $info = $wpdb->get_row("SELECT * FROM $wpdb->custom WHERE id = $_GET['id']");
endif;

?>
<section class=""></section>

您还需要查看安全性 - 查找 santize_text_field() http://codex.wordpress.org/Class_Reference/wpdb

我意识到我在将内容声明为 json 文件的 php 代码的 headers 中犯了一个错误。因为这是我的一个错误,与问题无关我将接受这个post作为答案和up-vote那些帮助过我的人。感谢您 post 的回答,因为没有他们我就不会看到这个愚蠢的错误。