【问题标题】:What's the correct method using PHP & HTML [closed]使用 PHP 和 HTML 的正确方法是什么 [关闭]
【发布时间】:2015-07-22 15:02:24
【问题描述】:

我创建了许多需要 php、html 和 css 的网站。他们都工作正常,但我现在在想,如果我一直以错误的方式做这件事。 通常,首先我构建站点模板和样式,然后编写 php.ini 代码。 然后我只在 HTML 中包含 php 函数等。 例如看一个列出一些帖子的表格(index.php):

        <div class="posts">
            <h1 class="content-title">New Posts</h1>
            <?php
                $rows = list_posts();
                while ($row=mysql_fetch_array($rows)) {
                    echo "                                  
                        <div>
                            <img class='post-avatar' src='img/icon_newsletter.jpg'>
                            <h2 class='post-title'>".$row['post_title']."</h2>
                            <p class='post-meta'>
                                Από <a href='#'>".$row['post_user']."</a> | ".$row['post_date']." | <a class='post-views' href='viewpost.php?id=".$row['post_id']."#comments'>Comments: ".total_comments($row['post_id'])."</a>
                            </p>
                            <p>
                                ".substr($row['post_body'], 0, 180)."...
                            </p>
                            <img class='post-icon-read' src='img/read.png' /> <a href='viewpost.php?id=".$row['post_id']."'>Συνέχεια άρθρου..</a>
                       </div>               
                    "; 
                }
            ?>      
        </div>

【问题讨论】:

  • 你有什么问题?
  • 如果它有效 - 这是正确的方式
  • 我不会回显 html 标签,而只会回显动态内容。太多 当然,但更好的可读性。我建议将您的 HTML 模板设为 html 内容,仅在需要回显动态内容的地方使用
  • 我的问题是我应该在 php 代码中包含 HTML 还是仅在我需要的地方将 php 包含在 HTML 页面中。
  • 和所有编码一样,这是个人意见

标签: php html methods


【解决方案1】:

还有改进的余地。

将 HTML 保留在 PHP 中。不是个人观点,有技术原因。

当你这样做时:

html

<?php  PHP   ?>

html

<?php      ?>

html

<?php   PHP   ?>

html

当您在 HTML 模式和 PHP 模式之间来回切换时,PHP 会产生开销。它让你看起来像一个 Word Press Hack。


有几点: - Heredoc语法 - 数值数组 - 转义引号

从基本模板开始:

echo <<<EOT
     // Top of page
EOT;

while ($row=mysql_fetch_array($rows), MYSQL_NUM) {    

}
echo <<<EOT   
   // bottom of page
EOT;

使用MYSQL_NUM 的原因是,列值可以在不连接的情况下使用。

代替

 <a href='#'>".$row['post_user']."</a> | ".$row['post_date']." | <a class='post-views' href='viewpost.php?id=".$row['post_id']."#comments'>Comments: ".total_comments($row['post_id'])."</a>

你可以这样做:

$comment = total_comments($row[2]) ;
echo "<a href=\"#\">$row[0]</a>$row[1]<a class=\"post-views\" href=\"viewpost.php?id=$row[2]#comments\">Comments: $comment</a>";

反斜杠将转义双引号内的双引号。引号不需要在 Heredoc 中转义。

一维数值数组可以用在双引号和Heredoc中。


页面顶部:

echo <<<EOT
<!DOCTYPE html>
<html lang="en"><head><title>Page Title</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Edit Rotation Diet</title>
<style type="text/css">

</style></head>
<body><div id="page">
EOT;

页面底部:

echo <<<EOT
<script type="text/javascript">//<![CDATA[


//]]>
</script></body></html>
EOT;

假设页面内容是一个表格

<body><div id="page"><table>
EOT;

while ($row=mysql_fetch_array($rows), MYSQL_NUM) {  
  echo <<<EOT

<tr>
  <td>$row[0]</td>
  <td>$row[1]</td>
  <td>$row[2]</td>
  <td>$row[3]</td>
</tr>
EOT;  
}
echo <<<EOT
</table>
<script type="text/javascript">//<![CDATA[

HTML 和 PHP 的缩进是错误的。您应该考虑当有人查看源代码时 HTML 的外观。在大多数 Word Press 页面上查看源代码。看起来很垃圾。

echo 和第一个 html 之间的空白行为您提供换行符。

当您像以前一样回显 HTML 时,当您查看源代码(例如 Word Press)时,它最终看起来非常糟糕。

就我个人而言,我不喜欢四个空格的缩进。在不知不觉中,您的代码隐藏在右边框之外。我用了两个空格。

我觉得这样很丑而且很浪费垂直空间:

if($x = 1)
{
  echo '<p>one</p>';
}
else
}
  echo '<p>two</p>'
}

我认为这很清楚。没有过多的垂直滚动/

if($x = 1){
  echo '<p>one</p>';
}
else{
  echo '<p>two</p>
}

【讨论】: