2015-07-12 103 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