【问题标题】:Keep code in separate file将代码保存在单独的文件中
【发布时间】:2009-07-01 12:29:25
【问题描述】:

topic.php

$id = isset($_GET['id']) ? intval($_GET['id']) : 0;

$query = mysql_query("SELECT * FROM topics WHERE id = $id");
$row = mysql_fetch_assoc($query);


$title = htmlspecialchars($row['title']);
$text = bbcode($row['text']);

查看/topic.php

<h1><?=$title?></h1>
<p><?=$text?></p>

<h1>Replies</h1>

$q = mysql_query("SELECT * FROM replies WHERE topic_id = $id");
while ($r = mysql_fetch_array($q)) {
$text = bbcode($r['text']);
$date = $r['date'];
$poster = $r['poster'];
$edited = $r['edited'];

echo "<p>$text</p>";.......
}

如您所见,我在 view/topic.php 中有一些丑陋的代码。我可以以某种方式将它保存在 topic.php 中吗?网页设计师不得不处理这一切并不好玩。

谢谢!

【问题讨论】:

  • 你能澄清你想要什么吗?您是否希望代码仅存在于一个地方?
  • 是的,没错,我想将代码保存在 1 个文件中
  • 我没有打开 register_globals,刚刚检查过

标签: php sql mysql


【解决方案1】:

您可以尝试将viewtopic.php中的代码放入一个函数中,放入topic.php中的一个函数中。

看起来您已经在 viewtopic.php 中包含了 topic.php,但如果您没有,您也应该这样做。

例如,您可以将其添加到 topic.php:

function ViewTopic($id) {

     $q = mysql_query("SELECT * FROM replies WHERE topic_id = $id");
     while ($r = mysql_fetch_array($q)) {
     $text = bbcode($r['text']);
     $date = $r['date'];
     $poster = $r['poster'];
     $edited = $r['edited'];

     echo "<p>$text</p>";.......

}

这就是 viewtopic.php 的样子:

<h1><?=$title?></h1>
<p><?=$text?></p>

<h1>Replies</h1>

ViewTopic($id);

}

【讨论】:

  • 请注意,原始代码和此答案都包含 SQL 注入漏洞。任何人都可以传递任何他们想要的 ID(包括恶意 SQL),您的代码将执行它。见stackoverflow.com/questions/1973/…
  • 好收获。在 SQL 查询中使用 $_GET 时应该小心。
【解决方案2】:

您可以将所有这些代码放入一个返回所需内容的函数中。然后调用函数echo func()

【讨论】:

    【解决方案3】:

    使用输出缓冲,您可以真正轻松地创建自己的小模板引擎,实现更好的逻辑/布局分离。

    function renderView($viewFile, $data) {
        ob_start();
        extract($data);
        require($viewFile);
        return ob_get_clean();
    }
    

    上面的代码来自一个小爱好项目,并不完整,但它是一个很好的概念证明。它的作用是从 $data 哈希图中提取键/值对,使它们在当前范围内可用。 $data = array("name" => "Kim");将使 $name 在视图中可访问。

    所有这些都是在输出缓冲中完成的,所以你可以对输出做任何你想做的事情。您可能想要实现缓存,使用它来呈现电子邮件(不再需要过多的字符串连接)和类似的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多