CRÉER DES CATÉGORIES DANS UN BLOG EN UTILISANT PHP ET MYSQL | PARTIE 5

Posted on 13th Sep 2021 in php


Tagged as: comment créer les catégories avec php, créer les catégories des articles de blog avec php, code php catégories, création des catégories avec php et mysql, afficher la liste des catégories des articles de blog en php

Nous créons un CMS de blog à partir du premier tutoriel « comment créer un blog depuis le début en PHP ». Dans ce tutoriel PHP, nous allons créer les catégories avec des articles de blog. Il vous aidera à lier de nombreux articles de blog dans une catégorie. Chaque blog CMS devrait avoir une fonctionnalité de catégorie.Nous allons créer des catégories de blog en utilisant PHP et MYSQL.

Créons des tables de base de données pour les catégories.

Créer un tableau -

 

Nom de la table – dorosk_category

Dans le tableau ci-dessus, nous allons insérer l'identifiant de catégorie, le nom de la catégorie (titre de la catégorie) et la catégorie Slug. Le slug de catégorie sera utilisé pour l'URL conviviale pour le référencement. L'ID de catégorie doit être auto-incrémenté.

Maintenant, créez une autre table -

Nom de la table - dorosk_cat_links

Après avoir ajouté la catégorie de blog, les catégories de blog doivent également être affichées. Laissez-nous afficher la catégorie blog.

Code PHP complet pour les catégories de blog :

admin/blog-categories.php

<?php
//include config
require_once('../includes/config.php');

//if not logged in redirect to login page
if(!$user->is_logged_in()){ header('Location: login.php'); }

//show message from add / edit page
if(isset($_GET['delcat'])){ 

    $stmt = $db->prepare('DELETE FROM dorosk_category WHERE categoryId = :categoryId') ;
    $stmt->execute(array(':categoryId' => $_GET['delcat']));

    header('Location: categories.php?action=deleted');
    exit;
} 

?>
<?php include("head.php");  ?>
  <title>Categories- Dorosk Websoft</title>
  <script language="JavaScript" type="text/javascript">
  function delcat(id, title)
  {
      if (confirm("Are you sure you want to delete '" + title + "'"))
      {
          window.location.href = 'categories.php?delcat=' + id;
      }
  }
  </script>
  <?php include("header.php");  ?>

<div class="content">
 <?php 
    //show message from add / edit page
    if(isset($_GET['action'])){ 
        echo '<h3>Category '.$_GET['action'].'.</h3>'; 
    } 
    ?>

    <table>
    <tr>
        <th>Title</th>
        <th>Operation</th>
    </tr>
    <?php
        try {

            $stmt = $db->query('SELECT categoryId, categoryName, categorySlug FROM dorosk_category ORDER BY categoryName DESC');
            while($row = $stmt->fetch()){
                
                echo '<tr>';
                echo '<td>'.$row['categoryName'].'</td>';
                ?>

                <td>
                  <button class="editbtn">  <a href="edit-blog-category.php?id=<?php echo $row['categoryId'];?>">Edit</a>   </button> 
                        <button class="delbtn">  <a href="javascript:delcat('<?php echo $row['categoryId'];?>','<?php echo $row['categorySlug'];?>')">Delete</a></button>
                </td>
                
                <?php 
                echo '</tr>';

            }

        } catch(PDOException $e) {
            echo $e->getMessage();
        }
    ?>
    </table>

    <p><button class="editbtn"><a href='add-blog-category.php'>Add New Category</a></button></p>
</div>
  <?php include("sidebar.php");  ?>
<?php include("footer.php");  ?>
 

Dans les lignes de code ci-dessus, nous avons ajouté deux boutons pour les opérations de suppression et de modification.

En plus de créer un tableau de catégories de blogs, les articles de blog doivent également être liés dans la catégorie de blog. L'identifiant de la catégorie et l'identifiant de l'article de blog seront stockés dans le tableau ci-dessus. En joignant deux tables, les articles de blog peuvent être affichés dans la catégorie blog.

Créons maintenant un formulaire pour insérer (créer une catégorie de blog) une catégorie de blog dans le panneau d'administration par lequel la catégorie de blog peut être insérée facilement. L'insertion de la catégorie blog est très simple, tous ont appris dans les tutoriels précédents comment insérer des données dans la base de données. Insérez la catégorie en utilisant PHP et MYSQL.

Code PHP complet pour Ajouter une catégorie de blog -

admin/add-blog-category.php

<?php 
require_once('../includes/config.php');


if(!$user->is_logged_in()){ header('Location: login.php'); }
?>
<?php include("head.php");  ?>
    <title>Add New Category- Dorosk Websoft</title>
    <?php include("header.php");  ?>

<div class="content">
 <h2>Add Category</h2>

    <?php

    //if form has been submitted process it
    if(isset($_POST['submit'])){

        $_POST = array_map( 'stripslashes', $_POST );

        //collect form data
        extract($_POST);

        //very basic validation
        if($categoryName ==''){
            $error[] = 'Please enter the Category.';
        }

        if(!isset($error)){

            try {

                $categorySlug = slug($categoryName);

                //insert into database
                $stmt = $db->prepare('INSERT INTO dorosk_category (categoryName,categorySlug) VALUES (:categoryName, :categorySlug)') ;
                $stmt->execute(array(
                    ':categoryName' => $categoryName,
                    ':categorySlug' => $categorySlug
                ));

                //redirect to index page
                header('Location: blog-categories.php?action=added');
                exit;

            } catch(PDOException $e) {
                echo $e->getMessage();
            }

        }

    }

    //check for any errors
    if(isset($error)){
        foreach($error as $error){
            echo '<p class="message">'.$error.'</p>';
        }
    }
    ?>

    <form action="" method="post">

        <h2><label>Category Title</label><br>
        <input type='text' name='categoryName' value='<?php if(isset($error)){ echo $_POST['categoryName'];}?>'>
        <p><input type="submit" name="submit" value="Submit"></p>

    

</h2></form></div>
  <?php include("sidebar.php");  ?>



<?php include("footer.php");  ?>


 

Nous allons maintenant apprendre à modifier la catégorie, comment la catégorie de blog peut être modifiée. La modification de la catégorie de blog est identique à la modification de l'article de blog dans lequel la requête de mise à jour est utilisée.

admin/edit-blog-category.php

    $categorySlug = slug($CategoryName);

                //insert into database
                $stmt = $db->prepare('UPDATE dorosk_category SET CategoryName = :CategoryName, categorySlug = :categorySlug WHERE categoryId = :categoryId') ;
                $stmt->execute(array(
                    ':CategoryName' => $CategoryName,
                    ':categorySlug' => $categorySlug,
                    ':categoryId' => $categoryId
                ));

Dans le code ci-dessus, vous pouvez voir que la fonction slug() est utilisée pour convertir le titre de la catégorie en slug. Nous avons créé la fonction slug() dans le fichier functions.php . Dans le code PHP ci-dessus, nous utilisons la requête de mise à jour "UPDATE" pour mettre à jour les champs de catégorie. Nous avons discuté de l'opération de mise à jour dans la première partie du blog PHP.

Code PHP complet pour Editer les catégories de blog –

admin/edit-blog-category.php

 
<?php //include connection file 
require_once('../includes/config.php');


if(!$user->is_logged_in()){ header('Location: login.php'); }
?>

<?php include("head.php");  ?>
    <title>EDIT Category- Dorosk Websoft</title>
    <?php include("header.php");  ?>

<div class="content">
 <h2>Edit Category-Dorosk Websoft</h2>


    <?php

    //if form has been submitted process it
    if(isset($_POST['submit'])){

        $_POST = array_map( 'stripslashes', $_POST );

        //collect form data
        extract($_POST);

        //very basic validation
        if($categoryId ==''){
            $error[] = 'Invalid id.';
        }

        if($CategoryName ==''){
            $error[] = 'Please enter the Category Title .';
        }

        if(!isset($error)){

            try {

                $categorySlug = slug($CategoryName);

                //insert into database
                $stmt = $db->prepare('UPDATE dorosk_category SET CategoryName = :CategoryName, categorySlug = :categorySlug WHERE categoryId = :categoryId') ;
                $stmt->execute(array(
                    ':CategoryName' => $CategoryName,
                    ':categorySlug' => $categorySlug,
                    ':categoryId' => $categoryId
                ));

                //redirect to categories  page
                header('Location: blog-categories.php?action=updated');
                exit;

            } catch(PDOException $e) {
                echo $e->getMessage();
            }

        }

    }

    ?>


    <?php
    //check for any errors
    if(isset($error)){
        foreach($error as $error){
            echo $error.'<br>';
        }
    }

        try {

            $stmt = $db->prepare('SELECT categoryId, CategoryName FROM dorosk_category WHERE categoryId = :categoryId') ;
            $stmt->execute(array(':categoryId' => $_GET['id']));
            $row = $stmt->fetch(); 

        } catch(PDOException $e) {
            echo $e->getMessage();
        }

    ?>

    <form action="" method="post">
        <input type='hidden' name='categoryId' value='<?php echo $row['categoryId'];?>'>

        <p><label>Category Title</label><br>
        <input type='text' name='CategoryName' value='<?php echo $row['CategoryName'];?>'>

        </p><p><input type="submit" name="submit" value="Update"></p>

    </form>


</div>
  <?php include("sidebar.php");  ?>



<?php include("footer.php");  ?>




    

Maintenant, vous pouvez créer la catégorie de blog et modifier la catégorie de blog.

Associons la catégorie de blog à l'article de blog.

Lorsque l'article est écrit dans le blog, après quoi il est lié à la catégorie, de la même manière, nous insérerons la catégorie du blog en la récupérant et en la liant à l'identifiant de l'article du blog. Nous allons insérer l'identifiant de la catégorie liée et l'identifiant de l'article dans une autre table.

Comprenons le code PHP.

 

admin/add-blog-article.php

Ajoutez le code sous la requête d'insertion MYSQL à la ligne 76 (indice - au-dessus de la fonction header() et sous le commentaire d'ajout de catégorie)

 $articleId = $db->lastInsertId();
if(is_array($categoryId)){
    foreach($_POST['categoryId'] as $categoryId){
        $stmt = $db->prepare('INSERT INTO dorosk_cat_links (articleId,categoryId)VALUES(:articleId,:categoryId)');
        $stmt->execute(array(
            ':articleId' => $articleId,
            ':categoryId' => $categoryId
        ));
    }
}
 

Dans le code PHP ci-dessus, nous insérons l'articleId avec categoryId. Cela vous aidera à récupérer l'article associé sur la page de catégorie.

Maintenant, récupérez et affichez la catégorie de blog dans le formulaire HTML.

Ajoutez le code sous la zone de texte Description longue (Body Content).

 <fieldset>
    <h2><legend>Categories</legend>

    <?php    
$checked = null;
    $stmt2 = $db->query('SELECT categoryId, categoryName FROM dorosk_category ORDER BY categoryName');

    while($row2 = $stmt2->fetch()){

        if(isset($_POST['categoryId'])){

            if(in_array($row2['categoryId'], $_POST['categoryId'])){
               $checked="checked='checked'";
            }else{
               

            }
        }

 echo "<input type='checkbox' name='categoryId[]' value='".$row2['categoryId']."' $checked> ".$row2['categoryName']."<br />";
    }

    ?>
</h2>
</fieldset>

 

Dans le code ci-dessus, nous ajoutons une case à cocher pour les catégories. La case à cocher aidera à lier une ou plusieurs catégories à l'article de blog.

Nous pouvons lier un article de blog à une ou plusieurs catégories à la fois.

Cette fonctionnalité le rend meilleur.

L'opération de mise à jour est la partie la plus importante du blog. Maintenant, nous allons créer une opération de mise à jour pour la catégorie blog. Nous pourrons lier ou dissocier un article de la catégorie blog.

admin/edit-blog-article.php

Ajoutez le code PHP sous la requête "UPDATE" MYSQL à la ligne 70 (indice - au-dessus de la fonction header())

$stmt = $db->prepare('DELETE FROM dorosk_cat_links WHERE articleId = :articleId');
$stmt->execute(array(':articleId' => $articleId));

if(is_array($categoryId)){
    foreach($_POST['categoryId'] as $categoryId){
        $stmt = $db->prepare('INSERT INTO dorosk_cat_links (articleId,categoryId)VALUES(:articleId,:categoryId)');
        $stmt->execute(array(
            ':articleId' => $articleId,
            ':categoryId' => $categoryId
        ));
    }
}

Dans le code ci-dessus, vous pouvez voir que l'ID de l'article a été supprimé. Si vous décochez la case et mettez à jour, le lien de l'article de blog doit être supprimé et s'il ne change aucun, le même identifiant de catégorie et le même identifiant de l'article doivent être insérés.

Maintenant, ajoutez la case à cocher dans le formulaire HTML. Ajoutez le code de la case à cocher après la zone de texte de description longue (Body Content) .

<fieldset>
     <h2><legend>Categories</legend>

    <?php
$checked = null;
    $stmt2 = $db->query('SELECT categoryId, categoryName FROM dorosk_category ORDER BY categoryName');
    while($row2 = $stmt2->fetch()){

        $stmt3 = $db->prepare('SELECT categoryId FROM dorosk_cat_links WHERE categoryId = :categoryId AND articleId = :articleId') ;
        $stmt3->execute(array(':categoryId' => $row2['categoryId'], ':articleId' => $row['articleId']));
        $row3 = $stmt3->fetch(); 

        if($row3['categoryId'] == $row2['categoryId']){
            $checked = 'checked=checked';
        } else {
            $checked = null;
        }

        echo "<input type='checkbox' name='categoryId[]' value='".$row2['categoryId']."' $checked> ".$row2['categoryName']."<br />";
    }

    ?>
</h2>
</fieldset>
  

Dans les lignes de code ci-dessus, nous avons sélectionné l'ID de catégorie qui est lié à l'ID d'article actuel. L'ID actuel est bloqué à partir de l'URL HTTP que vous pouvez voir. La méthode GET est utilisée pour conserver l'identifiant de la page actuelle.

Maintenant, ajoutez le lien dans le 'header'.

Ouvrez le fichier header.php et ajoutez le lien.

admin/header.php

Ajoutez la ligne après le dashboard liste des liens.

  <li><a href="blog-categories.php">Categories</a></li> 

La partie admin est terminée pour les catégories de blogs.

Affichez les catégories avec les articles de blog.

blog/index.php

 echo '<p>Posted on '.date('jS M Y', strtotime($row['articleDate'])).'</p>'; 

Remplacez la ligne de code ci-dessus par

echo '<p>Posted on '.date('jS M Y H:i:s', strtotime($row['articleDate'])).' in ';

$stmt2 = $db->prepare('SELECT categoryName, categorySlug   FROM dorosk_category, dorosk_cat_links WHERE dorosk_category.categoryId = dorosk_cat_links.categoryId AND dorosk_cat_links.articleId = :articleId');
$stmt2->execute(array(':articleId' => $row['articleId']));

$catRow = $stmt2->fetchAll(PDO::FETCH_ASSOC);
$links = array();
foreach ($catRow as $cat){
     $links[] = "<a href='category/".$cat['categorySlug']."'>".$cat['categoryName']."</a>";
}
echo implode(", ", $links);

echo '</p>';

Dans le code ci-dessus, deux tableaux sont réunis par lesquels les catégories liées à l'article de blog sont affichées avec le titre de l'article de blog ainsi qu'un lien est donné.

Maintenant, créez un autre fichier pour la catégorie .

blog/catlinks.php

Tout comme nous avions créé un fichier show pour afficher l'article de blog, de la même manière, nous créons le fichier catlinks.php pour afficher les articles de blog liés à la catégorie.

 

Permet de comprendre le code -

 $stmt = $db->prepare('SELECT categoryId,categoryName FROM dorosk_category WHERE categorySlug = :categorySlug');
$stmt->execute(array(':categorySlug' => $_GET['id']));
$row = $stmt->fetch();

//if post does not exists redirect user.
if($row['categoryId'] == ''){
    header('Location: ./');
    exit;
}

Dans le code ci-dessus, nous sommes récupérés categoryId, categoryName à partir de la table des catégories min. Nous utilisons la méthode GET pour conserver la valeur encodée de l'URL. Si la valeur encodée (identifiant de l'article) est disponible, affichez les articles de blog associés.

Si l'identifiant de catégorie n'est pas trouvé, il doit être redirigé vers la page d'index

Code complet pour catlinks.php

Code PHP complet pour le fichier catlinks.php :

blog/catlinks.php

 <?php require('includes/config.php'); 

$stmt = $db->prepare('SELECT categoryId,categoryName FROM dorosk_category WHERE categorySlug = :categorySlug');
$stmt->execute(array(':categorySlug' => $_GET['id']));
$row = $stmt->fetch();

//if post does not exists redirect user.
if($row['categoryId'] == ''){
    header('Location: ./');
    exit;
}


?>

<?php include("head.php");  ?>

	<title><?php echo $row['categoryName'];?>-Dorosk Websoft</title>
	<?php include("header.php");  ?>
<div class="content">
 

<p>Article Category:- <?php echo $row['categoryName'];?></p>
        <hr>
       

        <?php    
        try {

            $stmt = $db->prepare('
                SELECT 
                    dorosk_blog.articleId, dorosk_blog.articleTitle, dorosk_blog.articleSlug, dorosk_blog.articleDescrip, dorosk_blog.articleDate 
                FROM 
                    dorosk_blog,
                    dorosk_cat_links
                WHERE
                     dorosk_blog.articleId =  dorosk_cat_links.articleId
                     AND  dorosk_cat_links.categoryId = :categoryId
                ORDER BY 
                    articleId DESC
                ');
            $stmt->execute(array(':categoryId' => $row['categoryId']));
            while($row = $stmt->fetch()){
                
                echo '<div>';
                    echo '<h1><a href="../'.$row['articleSlug'].'">'.$row['articleTitle'].'</a></h1>';
                    echo '<p>Posted on '.date('jS M Y H:i:s', strtotime($row['articleDate'])).' in ';

                        $stmt2 = $db->prepare('SELECT categoryName, categorySlug   FROM dorosk_category, dorosk_cat_links WHERE dorosk_category.categoryId = dorosk_cat_links.categoryId AND dorosk_cat_links.articleId = :articleId');
                        $stmt2->execute(array(':articleId' => $row['articleId']));

                        $catRow = $stmt2->fetchAll(PDO::FETCH_ASSOC);

                        $links = array();
                        foreach ($catRow as $cat)
                        {
                            $links[] = "<a href='".$cat['categorySlug']."'>".$cat['categoryName']."</a>";
                        }
                        echo implode(", ", $links);

                    echo '</p>';
                    echo '<p>'.$row['articleDescrip'].'</p>';                
                
                     echo '<p><button class="readbtn"><a href="../'.$row['articleSlug'].'">Read More</a></button></p>';   

                echo '</div>';

            }

        } catch(PDOException $e) {
            echo $e->getMessage();
        }

        ?>
</div>
<?php include("sidebar.php");  ?>

<?php include("footer.php");  ?> 

Dans le premier tutoriel, nous avons créé le fichier .htaccess. Ouvrez le fichier .htaccess et ajoutez la ligne de code à la ligne numéro 3

 RewriteRule ^category/(.*)$ catlinks.php?id=$1 [L]

Affichez le titre de la catégorie dans le fichier show.php avec le titre d'artcile de blog.

Ouvrez le show.php et modifiez le code ci-dessous.

blog/show.php

 echo '<p>Posted on '.date('jS M Y', strtotime($row['articleDate'])).'</p>'; 

Remplacez le code ci-dessus par

 echo '<p>Posted on '.date('jS M Y H:i:s', strtotime($row['articleDate'])).' in ';

$stmt2 = $db->prepare('SELECT categoryName, categorySlug   FROM dorosk_category, dorosk_cat_links WHERE dorosk_category.categoryId = dorosk_cat_links.categoryId AND dorosk_cat_links.articleId = :articleId');
$stmt2->execute(array(':articleId' => $row['articleId']));

$catRow = $stmt2->fetchAll(PDO::FETCH_ASSOC);
$links = array();
foreach ($catRow as $cat){
     $links[] = "<a href='category/".$cat['categorySlug']."'>".$cat['categoryName']."</a>";
}
echo implode(", ", $links);

echo '</p>';
  echo '<hr>';
 

De cette façon, vous pouvez créer la catégorie avec le titre de l'article de blog en utilisant PHP et MYSQL .

Afficher les catégories de blogs dans la barre latérale –

les catégories peuvent être affichées dans la barre latérale du blog avec les titres des articles de blog. Ouvrez la barre latérale du blog et changez quelque chose -

blog/sidebar.php

<a href="#">Blog Category 1</a>
         <a href="#">Blog Category 2</a>
             <a href="#">Blog Category 3</a>
                 <a href="#">Blog Categories List </a>
 

Remplacez le code ci-dessus par

<?php
$stmt = $db->query('SELECT categoryName, categorySlug FROM dorosk_category ORDER BY categoryId DESC');
while($row = $stmt->fetch()){
    echo '<a href="http://localhost/blog/category/'.$row['categorySlug'].'">'.$row['categoryName'].'</a>';
}
?>
 

Dans le code ci-dessus, nous récupérons toutes les catégories et les affichons à l'aide d'une boucle while avec le chemin d'URL de la catégorie.

Please Share




Scroll to Top