2015-07-12 70 views
1

我有一个静态HTML页面,我想使用PHP从数据库中检索数据并在HTML/PHP页面上显示该页面。使用HTML模板和PHP创建动态页面

为了做到这一点,我将使用分页功能,因为我需要显示的信息可能会发生变化,因此以这种方式更容易,更简单。

我有谷歌分页,并对其如何工作充满信心,但是需要在我的HTML页面上显示的结果将基于我的数据库中名为“类别ID”的字段。

当用户最初提交数据到我的数据库时,它将被分类(例如,绘画和装饰或机械)。

然后,我制作了一个包含所有可能类别的不同数据库表,并将一个ID与它们关联起来。 (不知道这是否是正确的做法,如果合适的话请告知)。

因此,当用户搜索“绘画和装饰”时,它将与ID相关联,然后我的想法是将数据库过滤到ID为1的所有列表,并显示在我的页面上。

但是,我很难通过类别ID过滤数据库内的数据。我遵循的教程是here

+0

1) '性能和安全性大致相同,只是不使用'mysql'。 2)和'SELECT'查询对于两者都是相同的。只需获取所有数据,即可在页面上获取并显示它。 3)这取决于该行的数据以及具体如何使用/显示 – SuperDJ

+0

3)被称为“分页”。这应该给你你需要的方向。 – Ohgodwhy

回答

1
  1. 您使用PDO 为了执行select语句;它是PHP的SQL数据库API。是的,我会推荐使用PDO。我喜欢的东西包括:1.它是面向对象的2.它抽象出使用任何特定SQL API(SQLite,MySQL,PostgreSQL,Oracle等)的细节。请记住,使用PDO既不必要也不足以编写安全的应用程序 - 开发人员有责任确保网站不容易受到SQL注入,XSS(跨站点脚本攻击)等攻击。使用PDO编写应用程序当然是可能的,这对两者都很脆弱。

  2. 像标题和描述简单的字符串值是很容易 - 只需插值他们在您的网页像任何其他PHP变量:

    <div> 
        <div class="site-title"><?= htmlspecialchars($row->Title) ?></div> 
        <div class="site-description"><?= htmlspecialchars($row->Description) ?></div> 
    </div> 
    

    注意,在这个例子中,我记得正确转义值HTML 。忽视这样做不仅会破坏页面的有效性和/或布局,还会使您的站点容易受到XSS攻击,如果这些值是用户提交的。您以基本相同的方式处理网站和图像 - 您的任务是将这些值插入到您的HTML中,以便显示链接到网站和images/文件夹下的正确图像。以下是你可能会怎么做:如果您的图片,其实来自公众images/相对于当前页面的URL目录所服务

    <div><a class="site-link" href="<?= htmlspecialchars($row->Website) ?><?= htmlspecialchars($row->Website) ?></a></div> 
    <img class="site-image" 
        src="images/<?= htmlspecialchars(urlencode($row->Image)) ?>" 
        alt="<?= htmlspecialchars($row->Title) ?>"> 
    

    这个例子只会工作。我还对URL进行了URL编码,以便转义任何在URL中无效的字符(例如,这会将文件名中的空格转换为+字符;还有一个命名不明的变体rawurlencode,它将空格转换为%20,这是严格意义上的实际标准)。

  3. 是的,那将是要做的事情。使用offsetlimit SQL子句可以很容易地实现分页。

PDO可以有多种选择来定制其行为,和一个完整的例子是有点棘手,但这里使用的是MySQL数据库的一个小例子:以`PDO`或'mysqli的

<?php 
    $page = $_GET['page']; 
    // You ***MUST*** sanitize $page here ** 
    $conn = new \PDO(
     'mysql:host=127.0.0.1;dbname=database_name;charset=utf8mb4', 
     $username, $password); 
    $stmt = $conn->query('select Title from websites limit 12 offset ' . (($page - 1) * 12)); 
    ?> 
    <ul> 
    <?php while(($row = $stmt->fetch(\PDO::FETCH_OBJ)) !== null): ?> 
     <li><?= htmlspecialchars($row->Title) ?></li> 
    <?php endwhile; ?> 
    </ul> 
+0

感谢您的详细解答,我已经阅读了很多相互冲突的信息,所以感谢您的帮助。我将在今天和明天开展这项工作,希望它能顺利进行,我会用你说的话! – PublicDisplayName

+0

也许是因为很多新手网站开发者选择PHP,但是当涉及到这种语言时,错误信息似乎就像瘟疫一样传播开来。 http://codefury.net/2011/04/why-php-was-a-ghetto/ – mooiamaduck