0

私はPHPが初めてで、ここ数日で最初のプロジェクトを構築しようとしています.それは主にブログとして機能しています.データベースを照会する方法などについて感じています.

私は今、自分のページの結果を改ページできるようにしたいと考えています。これは私がこれまでに持っているものです:

<?php
include_once 'inc/functions.inc.php';
include_once 'inc/db.inc.php';

$db = new PDO(DB_INFO, DB_USER, DB_PASS);

$id = (isset($_GET["id"])) ? (int) $_GET["id"] : NULL;

$e = retrievePosts($db, $id);

$fulldisp = array_pop($e);
?>
<div id="blogposts">
    <?php
    if ($fulldisp == 1) {
        ?>
        <span class="postdate"><?php echo $e["date"] ?></span>
        <span class="posttitle"><?php echo $e["title"] ?></span>
        <br/>
        <br/>
        <span class="postbody">
            <?php echo $e["body"] ?>
        </span>
        <?php
    }//end if
    else {
        foreach ($e as $entry) {
            ?>
            <div class="postholder">
                <span class="postdate"><?php echo $entry["date"] ?></span>
                <span class="posttitle">
                    <a href="?id=<?php echo $entry['id'] ?>"><?php echo $entry['title'] ?></a>
                </span>
                <br/>
                <br/>
                <span class="postbody">
        <?php echo $entry["resume"] ?>
                </span>
            </div>
                    <?php
                }//end foreach
            }//end 
            ?>
</div>

そして、これは私の機能です:

<?php

function retrievePosts($db, $id = NULL) {
    if (isset($id)) { //se foi fornecido ID
        $sql = "SELECT title, body, date
            FROM blog
            WHERE id=?
            LIMIT 1";
        $stmt = $db->prepare($sql);
        $stmt->execute(array($_GET["id"]));

        $e = $stmt->fetch(); //guardar em array
        $fulldisp = 1; //uma só entrada
    } 
    else 
    {
        $sql = "SELECT id, title, resume, date
            FROM blog
            ORDER BY date DESC";   

        foreach($db->query($sql) as $row) 
        {
            $e[] = array("id" => $row["id"], "title" => $row["title"], "resume" => $row["resume"], "date" => $row["date"]);
        }
        $fulldisp = 0; //multiplas entradas
    }
    //funçoes só retornam um valor, inserimos fulldisp no fim de $e e separamos
    //os valores de novo no index.php
    array_push($e, $fulldisp);
    return $e;
}

?>

これが機能する方法は、URL に応じてページが構築されることです。

そこにIDがあれば、そのIDの内容だけを表示します。

URL に ID がない場合、ページ内のすべてのエントリが表示されます。

これらのエントリをページ付けできるようにしたいので、Stackoverflow を見回した後、最も一般的な解決策はDigg Style Pagination Class使用することであると思われます。 -ページネーションクラス

クラスをダウンロードしましたが、これを適切に機能させる方法がわかりません。クラスに DB クエリがないという事実に混乱しています (これは LIMIT を使用すると予想されます)。ここスタックの誰かが私のコードにこのクラスを実装するのを手伝ってくれるかどうか、またはこれを行う方法について十分に文書化されたソースがあるかどうか疑問に思っていました.

4

1 に答える 1

0
function retrievePosts($db, $id = NULL, $page = 1, $rpp = 5) {
    if (isset($id)) { //se foi fornecido ID
        $sql = "SELECT title, body, date
            FROM blog
            WHERE id=?
            LIMIT 1";
        $stmt = $db->prepare($sql);
        $stmt->execute(array($id));

        $e = $stmt->fetch(); //guardar em array
        $fulldisp = 1; //uma só entrada
    }
    else
    {
        if(!is_numeric($page)) {
            $page = 1;
        }

        if(!is_numeric($rpp)) {
            $rpp = 5;
        }

        $sql = "SELECT id, title, resume, date
            FROM blog
            ORDER BY date DESC
            LIMIT ?
            OFFSET ?
        ";

        $stmt = $db->prepare($sql);
        $stmt->execute(array($page, $rpp * $page));

        foreach($stmt->fetch() as $row)
        {
            $e[] = array("id" => $row["id"], "title" => $row["title"], "resume" => $row["resume"], "date" => $row["date"]);
        }
        $fulldisp = 0; //multiplas entradas
    }
    //funçoes só retornam um valor, inserimos fulldisp no fim de $e e separamos
    //os valores de novo no index.php
    array_push($e, $fulldisp);
    return $e;
}

$rpp - ページあたりのレコード数

また、私は次のように思います:

$stmt->execute(array($_GET["id"]));

次のようにする必要があります。

$stmt->execute(array($id));
于 2012-09-14T11:34:39.577 に答える