0

私はブログを作成していて、2 つのテーブルの記事とカテゴリがあり、これらのテーブルに参加していますが、カテゴリのリンクをクリックするとカテゴリだけが表示されるようにしたいと考えています。リンクでcategory_idを渡していますが、ページのリンクがblog.php?=category_idのような場合、カテゴリだけを表示する方法がわかりません。URL には、categories_id 番号が含まれています。そのカテゴリだけを表示する方法がわかりません。カテゴリを表示するだけの SQL ステートメントは知っていますが、理解できないのは、そのステートメントを実行する方法です。 URL には the?=category_id が含まれており、すべての記事を日付別に表示していた元の SQL ステートメントを実行しません。ページ名に応じて if および else 条件を実行しようとしましたが、機能しませんでした。

<?php
    connect_to_db();
    
    $url = $_SERVER['SCRIPT_NAME'];
    $pos = strrpos($url,"/");
    $pagename = substr($url,$pos+1);
    
    if($pagename == ("blog.php")) {
    $sql = "SELECT article_id, title, body, date, categories.category, author FROM articles
            LEFT JOIN categories ON articles.category = categories.category_id ORDER BY article_id DESC LIMIT 4";
    }
    elseif($pagename == ("blog.php?=1")) {
    $sql = "SELECT article_id, title, body, date, categories.category, author FROM articles
            LEFT JOIN categories ON articles.category = categories.category_id WHERE category_id = 1";
    }
    $result = query($sql);
    if($result===false) {
        echo "query failed";
    }
    else {
        while( $data = mysqli_fetch_array($result))
    {
?>     
    <article>
        <h3 class="title-medium"><?php echo $data['title']; ?></h3>
        <p class="caption-medium"><?php echo $data['author']; ?> <?php echo $data['date']; ?> <?php echo $data['category']; ?></p>
        <img src="img/blog-post-1.jpg" alt="">
        <p><?php echo substr($data['body'],0,450)." ..." ?></p>
        <a href="blog-post.php?id=<?php echo $data['article_id']; ?>"><p class="caption-medium highlight">Read More</p></a>
        <hr>
    </article>

    <?php
    }
}
?>
4

2 に答える 2

0

cat_id次のようなクエリ文字列で使用します。

blog.php?cart_id=1

$_GET[]またはから抽出できます$_REQUEST[]

if (isset($_GET['cat_id']))
    $category_id = intval($_GET['cat_id']);
else
    $category_id = 0;

if($category_id > 0) { //Non-Zero +ve value
    $sql = "SELECT article_id, title, body, date, categories.category, author
            FROM articles LEFT JOIN categories ON articles.category = categories.category_id
            WHERE category_id = $category_id";
} else { //Zero
    $sql = "SELECT article_id, title, body, date, categories.category, author
            FROM articles LEFT JOIN categories ON articles.category = categories.category_id
            ORDER BY article_id DESC LIMIT 4";
}
于 2013-02-10T07:03:12.073 に答える
0

コメントで言われたように、リクエスト全体ではなく、パラメーターのみを使用する必要があります。

connect_to_db();

$where = '';
if (isset($_GET['cat_id'])) {
    $where = "WHERE category_id = ".intval($_GET['cat_id']);
}
$sql = "SELECT article_id, title, body, date, categories.category, author 
        FROM articles LEFT JOIN categories 
        ON articles.category = categories.category_id 
        $where ORDER BY article_id DESC LIMIT 4";

$result = query($sql);
于 2013-02-10T07:05:50.930 に答える