3

我在这里查看了有关类似问题的其他帖子,但找不到答案。

编辑我一直在玩这个,我想稍微改变一下我的问题。

我在放置从外部 php 文件回显的输出时遇到问题。

这是一些示例代码来演示我的问题 - 这是我的主文件writephp.php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Test Php </title>
    <link rel="stylesheet" href="writephp.css">
</head>
<body>
    <div class="allContent">    
        <?php for($i=0; $i<3; $i++): ?>
            <div class="commentBox">
               <p> Just a box</p>
            </div>  
        <?php endfor; ?>
        <a href="write.php?outputHtml">Php output</a>       
    </div>  
</body>
</html>

现在我可以用 css 将其居中:

.allContent {
width: 400px;
margin-left: auto;
margin-right: auto;
font-family: Arial;
}
.commentBox {
border: 1px solid black;
width: 400px;
padding: 0px 5px 5px 5px;
margin-top: 5px;
}

因此,在 html 文件中,php 写出位于页面中心的框,因为 php 循环位于“allConent”div 内。

锚点调用了一个外部 php 文件,它将回显更多的框。

该文件看起来像这样并被调用write.phpwritephp.php是调用它的主文件):

<?php
if (isset($_GET['outputHtml']))
{
 echo "<p  class='allContent commentBox'>" . "This is from external PHP" . "</p>";
 echo "<p  class='allContent commentBox'>" . "This is also from external PHP" . "</p>";
 include 'writephp.php';
}

输出看起来像

但是外部 php 的回显输出在主文件的输出之上——实际上它是放在<!doctype html>tag 之前的,显然不好。

页面源代码如下所示:

<p  class='commentBox allContent'>This is from external PHP</p
><p class='allContent commentBox'>This is also from  external PHP</p>
    <!DOCTYPE html>
    <html lang="en">
<head>
    <meta charset="utf-8">
    <title>Test Php </title>
    <link rel="stylesheet" href="writephp.css">
</head>
<body>
    <div class="allContent">    
                        <div class="commentBox">
               <p> Just a box</p>
            </div>  
                        <div class="commentBox">
               <p> Just a box</p>
            </div>  
                        <div class="commentBox">
               <p> Just a box</p>
            </div>  
        <a href="write.php?outputHtml">Php output</a>       
    </div>  
</body>

一般来说,我的问题是“如何将来自外部 php 文件的 html 放置在页面上我想要的任何位置?

4

3 回答 3

4
<?php
if (isset($_GET['outputHtml']))
{
 echo "<p  class='commentBox'>" . "This is from external PHP" . "</p>";
 echo "<p  class='commentBox'>" . "This is also from external PHP" . "</p>";
 include 'writephp.php';
}

这在您的 write.php 中是不正确的,请参阅writephp.php带有<html> <head><body>标签的完整 HTML 页面,并且您在回显一些<p>标签后将其包含在内,这不会使您的新框神奇地出现在页面正文中,您将创建文件开头有两个无效标记,<p>后跟<!DOCTYPE><html>等...

编辑

关于您的问题的更新,现在显示为“如何将外部 php 文件的输出放置到页面上的特定位置”

正如@Robert Seddon-Smith 在他的回答中正确指出的那样, usinginclude将使内容准确地出现在调用时,所以如果你想在你的主文件中包含你的新框,那么调用include应该是向后的,即就是,你应该在主文件中包含内容,你可以使用这个例子来测试它:

修改write.php为仅在 $_GET 变量存在时回显框

<?php
    if (isset($_GET['outputHtml']))
    {
     echo "<div class='commentBox'>" . "This is from external PHP" . "</div>";
     echo "<div class='commentBox'>" . "This is also from external PHP" . "</div>";
    }
?>

并在您的主文件中进行包含调用writephp.php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Test Php </title>
    <link rel="stylesheet" href="writephp.css">
</head>
<body>
    <div id="allContent">   
        <?php for($i=0; $i<3; $i++): ?>
            <div class="commentBox">
               <p> Just a box</p>
            </div>  
        <?php endfor; ?>
        <?php include 'write.php'?>
        <a href="writephp.php?outputHtml">Php output</a>       
    </div>  
</body>
</html>

当您单击链接时,这将包括容器内的两个新框。

您还会注意到,对包含文件中的内容进行样式设置并没有什么特别之处,这是因为最终所有标记都呈现为单个 HTML 页面,无论内容是从主页还是从主页面回显都没有关系。包含文件,它将遵守您的 CSS 中的任何规则

于 2013-08-02T19:46:43.727 回答
1

问题是您没有使用 write.php 生成正确的内容,这可能是由于误解了 include 的实际作用。

include() 函数所做的就是获取包含文件的内容,并在包含它的文件中将其解析为 PHP。它与在同一个地方剪切和粘贴文件内容的效果几乎相同。仅将您可能键入的内容放入包含的文件中。

我会正确地重写很多,以便 write.php 仅包含一个为您的评论框生成 html 字符串的函数:

<?PHP
function commentbox()
    {
    $output="";
    for($i=0; $i<3; $i++)
    $output.="<div class='commentBox' id='cb_$i'><p> Just a box</p></div>";
    return $output;
    }
?>

你 include() 这个在你的 php 文件的顶部,然后在任何需要的地方调用它的输出:

echo commentbox();

或更好:

创建一个 footer.php 文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Test Php </title>
    <link rel="stylesheet" href="writephp.css">
</head>
<body>
    <div id="allContent">   
        <?PHP echo $content;?>     
    </div>  
</body>
</html>

您可以非常轻松地将其用于所有项目。

这是这样使用的:

<?PHP
include("write.php");
$content="whatever";
$content.=commentbox();
$content.="whateverelse";
include("footer.php");
?>

尽管我故意不费吹灰之力地格式化上述代码,但很容易找到创建内容的位置并对其进行调试。即使使用代码上下文着色,混合 PHP 和 HTML 代码也是调试的噩梦。也很难找到你想借的东西,以后再放在别的地方。

于 2013-08-02T21:30:25.627 回答
0

首先,您不应该在两个单独的元素上使用 ID“allContent”。ID 应该是唯一的。类可用于设置多个元素的样式。

为什么不把它改成下面的代码呢?你有什么理由希望他们与众不同吗?

echo '<div class="commentBox"><p>' . 'This is from external PHP' . '</p></div>';  
echo '<div class="commentBox"><p>' . 'This is also from external PHP' . '</p></div>'; 
于 2013-08-02T19:02:48.807 回答