COMMENT CRÉER UN BLOG EN UTILISANT PHP ET MYSQL ? | PARTIE 1

Posted on 5th Sep 2021 in php


Tagged as: code source, programmation blog en php, dévelopement web, apprendre à créer un cms de blog, formation php gratuit, comment créer un blog avec php, apprendre créer un cms, apprendre php, cours php, créer un blog avec php, comment créer un cms blog avec php et mysql, créer cms blog en php et mysql, création blog avec php

Dans ce tutoriel, nous allons apprendre à créer un CMS de blog complet en utilisant PHP et MYSQL. Pour créer un CMS de blog, avec PHP et MYSQL, vous devez également avoir des connaissances en CSS et HTML, ce n'est qu'alors qu'un meilleur blog peut être créé. Dans ce tutoriel PHP, nous allons apprendre à créer un CMS de blog simple et avancé en utilisant PHP. Si vous êtes un débutant ou un développeur, vous pourrez facilement créer et exécuter n'importe quel blog grâce à ces tutoriels. Si vous êtes débutant, effacez d'abord les bases et ce n'est qu'alors que vous pourrez créer ce blog.

Dans ce tutoriel, nous comprendrons tous les fichiers, dossiers et tables de base de données depuis le début et créerons un CMS de blog simple. Dans la prochaine série, nous ajouterons les fonctionnalités qui le feront avancer.

Table des matières :

1- Créer des dossiers , une base de données , des utilisateurs , des articles pour le blog | Partie 1

2- URL conviviales pour le référencement "SEO friendly URLS" pour un blog dynamique | Partie 2

3- Barre latérale du blog | Partie 3

4- Afficher les articles récents dans le blog | Partie 4

5- Créer des catégories pour un blog dynamique | Partie 5

6- Tags de blog | Partie 6

7- Icônes de partage sur reseaux sociaux (boutons) pour le blog | Partie 7

8- Afficher les articles de blog recommandés | Partie 8

9- Afficher les articles précédents dans le blog | Partie 9

10- Pages CMS de blog dynamiques | Partie 10

11- Générer Sitemap de blog en PHP | Partie 11

12- Pagination et champ de recherche | Partie 12

13- Blog Commentaire et système de discussion | Partie 13

Créer des tables de base de données MYSQL pour Blog :

Avant de créer un blog, il est important de comprendre la structure de la table de la base de données, ce n'est qu'alors que n'importe quel blog peut être créé avec succès. Dans ce tutoriel, nous créons deux tables. Une table est créée pour l'insertion et l'affichage des articles de blog et une autre table pour les données des utilisateurs administrateurs.

0-Créez une base de données MSYQL.

Nom de la Base de données- doroskcmsblog

1. Créez une table de base de données MSYQL.

Nom de la table - dorosk_blog

L'articleId doit être auto-incrémenté.

2. Créez une table MYSQL pour Blog Admin -

Nom de la table - dorosk_blog_users

Le tableau ci-dessus sera utilisé pour se connecter à un utilisateur, ajouter les nouveaux utilisateurs au blog.

Il est très important de maintenir la sécurité du blog, nous créons donc une sécurité de connexion pour protéger le blog d'une personne inconnue. Après avoir créé la base de données, comprenez également la structure des dossiers et des fichiers, afin de ne pas rencontrer de problème plus tard. Les dossiers et fichiers sont gérés de manière à créer un blog par programmation PHP. Si vous êtes un débutant en PHP, vous devez utiliser l'éditeur de texte Sublime.

Structure des dossiers et fichiers du Blog:


Vous devez avoir compris à partir de la structure ci-dessus qu'il existe des dossiers séparés de l'administrateur dans lesquels tous les fichiers liés à l'administrateur du blog.

Tous les fichiers autres que Admin fonctionneront pour l'interface du blog. Connectez le blog à la base de données MYSQL.

Affichage des articles de blog sur la page en utilisant PHP.

Affichage des articles de blog par liste sur la page d'accueil.

Création de l'en-tête "header "et du pied de page "footer " du blog .etc

Créez un dossier et ces fichiers dans le dossier Admin:

Tous ces fichiers sont créés pour gérer le backend du blog, Comme :

-Ajouter un nouvel utilisateur

-Supprimer l'utilisateur.

-publier un article

-Modifier et supprimer l'article etc -

Toutes ces opérations sont détenues par l'administrateur uniquement.

Vérifiez et créez d'autres dossiers et fichiers. Vous pouvez voir l'image ci-dessous.

L'image ci-dessus permet de créer un autre fichier dans un autre dossier. Veuillez vérifier et créer soigneusement un dossier de blog et des fichiers PHP.

Maintenant, profitez du temps. Vous avez terminé les structures.

Dans tout projet PHP, tout d'abord, un fichier de connexion est créé. Ici, nous utiliserons la connexion PHP PDO. Ce fichier est créé sous le nom de config.php, dont le travail est de connecter la page du blog à la base de données MYSQL. Créez une nouvelle connexion PDO et définissez le fuseau horaire.

blog/includes/config.php :

ob_start();
session_start();

//database details
define('DBHOST','localhost');
define('DBUSER','root');
define('DBPASS','');
define('DBNAME','doroskcmsblog');

$db = new PDO("mysql:host=".DBHOST.";dbname=".DBNAME, DBUSER, DBPASS);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


//set timezone- Asia Kolkata 
date_default_timezone_set('Asia/Kolkata');

Dans le code du fichier config.php ci-dessus, vous devez fournir les détails énumérés ci-dessous -

1. Hôte de base de données -

Localhost : localhost

Serveur live – Vérifiez sur PHPMYADMIN

2. Utilisateur de la base de données –

Localhost : root

Serveur live : définissez votre nom d'utilisateur

3. Mot de passe de la base de données –

Localhost - pas besoin

Serveur live – Définissez votre mot de passe

4. Nom de la base de données - Définissez votre nom de base de données 

date_default_timezone_set('Asie/Kolkata');

Le fuseau horaire par défaut est 'Asia/Kolkata' . Vous pouvez définir votre heure locale 

Maintenant, créez une fonction autoload. La fonction autoload permet de charger les classes si besoin.

La fonction gère la fonctionnalité automatique. Il vérifie que le fichier existe ou non si le fichier existe (vous pouvez voir la condition if ) puis inclut le chemin de classe.

Nous créerons des classes plus tard – La fonction autoload() charge la classe automatiquement sans inclure.

//load classes when needed
function __autoload($class) {
   
   $class = strtolower($class);

    //if call from within assets adjust the path
   $classpath = 'classes/class.'.$class . '.php';
   if ( file_exists($classpath)) {
      require_once $classpath;
    }   
    
    //if call from within admin adjust the path
   $classpath = '../classes/class.'.$class . '.php';
   if ( file_exists($classpath)) {
      require_once $classpath;
    }
    
    //if call from within admin adjust the path
   $classpath = '../../classes/class.'.$class . '.php';
   if ( file_exists($classpath)) {
      require_once $classpath;
    }       
     
}

$user = new User($db); 

A la fin du code de configuration ci-dessus, la classe utilisateur est initialisée et passe la connexion à la base de données ($db), la base de données est créée au moment de la nouvelle connexion PDO). Maintenant, la classe peut accéder à la base de données.

Code complet des fichiers de connexion au blog (config.php):

blog/includes/config.php

<?php 
ob_start();
session_start();

//database details
define('DBHOST','localhost');
define('DBUSER','root');
define('DBPASS','');
define('DBNAME','doroskcmsblog');

$db = new PDO("mysql:host=".DBHOST.";dbname=".DBNAME, DBUSER, DBPASS);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


//set timezone- Asia Kolkata 
date_default_timezone_set('Asia/Kolkata');

//load classes as needed
function __autoload($class) {
   
   $class = strtolower($class);

    //if call from within assets adjust the path
   $classpath = 'classes/class.'.$class . '.php';
   if ( file_exists($classpath)) {
      require_once $classpath;
    }   
    
    //if call from within admin adjust the path
   $classpath = '../classes/class.'.$class . '.php';
   if ( file_exists($classpath)) {
      require_once $classpath;
    }
    
    //if call from within admin adjust the path
   $classpath = '../../classes/class.'.$class . '.php';
   if ( file_exists($classpath)) {
      require_once $classpath;
    }       
     
}

$user = new User($db); 

?>

Maintenant, nous allons créer le panneau d'administration -

Créez une page login.php dans le dossier admin. Le système de connexion sécurise le blog des utilisateurs inconnus.

admin/login.php –

Discutons du code:

require_once('../includes/config.php');
// user looged in or not 
if( $user->is_logged_in() ){ header('Location: index.php'); } 

Tout d'abord, nous incluons le fichier config.php par la fonction require_once(). Au lieu de la fonction require_once() , vous pouvez utiliser la fonction PHP require() et la fonction PHP include(). Après cela, nous utilisons la condition PHP PHP include() function if pour vérifier l'utilisateur connecté ou non si l'utilisateur est déjà connecté, il redirige vers une autre page d'index. Nous créerons une page d'index une fois le processus de connexion terminé. Si l'utilisateur ne se connecte pas , redirige vers la page de connexion. C'est le cas par la condition if. Vous pouvez utiliser PHP if else pour une autre instruction.

Discutons d'une autre partie du code de la page de connexion -

//Login form for login 
    if(isset($_POST['submit'])){

        $username = trim($_POST['username']);
        $password = trim($_POST['password']);
        
        if($user->login($username,$password)){ 

            //If loogedin , then redirects to the index page 
            header('Location: index.php');
            exit;
        

        } else {
            $message = '<p class="invalid">Invalid username or Password</p>';
        }

    }

    if(isset($message)){ echo $message; }

Il s'agit du formulaire HTML simple pour contenir les détails de l'utilisateur. Nous utilisons la méthode post pour gérer les détails du formulaire HTML. Si les détails correspondent, l'utilisateur redirige vers la page d'index.

Code complet du fichier de connexion PHP (login.php):

admin/login.php

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


// user looged in or not 
if( $user->is_logged_in() ){ header('Location: index.php'); } 
?>
<!DOCTYPE html>
<head>
  <meta charset="utf-8">
  <title>Admin Login</title>

  <link rel="stylesheet" href="assets/style.css">
</head>
<body>

<div id="login">

<?php 

   //Login form for submit 
    if(isset($_POST['submit'])){

        $username = trim($_POST['username']);
        $password = trim($_POST['password']);
        
        if($user->login($username,$password)){ 

            //If looged in , the redirects to index page 
            header('Location: index.php');
            exit;
        

        } else {
            $message = '<p class="invalid">Invalid username or Password</p>';
        }

    }

    if(isset($message)){ echo $message; }
?>

    <form action="" method="POST" class="form">
   <label>Username</label>
   <input type="text" name="username" value=""  required />
<br>
 <label>Password</label>
 <input type="password" name="password" value="" required />
<br>
    <label></label><input type="submit" name="submit" value="SignIn"  />

    

</div>
</body>
</html>

blog/classes/class.user.php

Créez le fichier class.user.php dans le dossier classesL'utilisateur de classe gérera le processus de connexion par l'utilisateur. Il traite le mot de passe de hachage avec une syntaxe forte.

Discutons du code de la classe -

public function create_hash($value)
    {
        return $hash = crypt($value, '$2a$12.substr(str_replace('+', '.', base64_encode(sha1(microtime(true), true))), 0, 22)');


    }
 

Le code ci-dessus gère le mot de passe converti par hachage. C'est une méthode totalement sécurisée pour créer une connexion au blog.

private function get_user_hash($username){    

        try {

            //echo $this->create_hash('demo');

            $stmt = $this->db->prepare('SELECT password FROM dorosk_blog_users WHERE username = :username');
            $stmt->execute(array('username' => $username));
            
            $row = $stmt->fetch();
            return $row['password'];

        } catch(PDOException $e) {
            echo '<p class="error">'.$e->getMessage().'</p>';
        }
    }
 

La fonction get_user_hash gère la sélection du nom d'utilisateur et du mot de passe à partir de la table dorosk_blog_users.

 public function login($username,$password){    

        $hashed = $this->get_user_hash($username);
        
        if($this->verify_hash($password,$hashed) == 1){
            
            $_SESSION['loggedin'] = true;
            return true;
        }        
    }

La fonction login gère la partie login. Si le nom d'utilisateur et le mot de passe correspondent, la session est créée. Si le nom d'utilisateur et le mot de passe ne correspondent pas, la session ne se crée pas. La fonction login vérifie les détails de l'utilisateur avec un mot de passe converti par hachage.

public function logout(){
  session_destroy();
} 

La fonction logout() gère l'opération de déconnexion de l'utilisateur. Cela détruit la session. Vous pouvez comprendre la session PHP ici avec des informations approfondies.

Code utilisateur complet de la classe (class.user.php):

blog/classes/class.user.php

<?php

class User{

    private $db;
    
    public function __construct($db){
        $this->db = $db; 
    }


    public function is_logged_in(){
        if(isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == true){
            return true;
        }        
    }

    public function create_hash($value)
    {
        return $hash = crypt($value, '$2a$12.substr(str_replace('+', '.', base64_encode(sha1(microtime(true), true))), 0, 22)');


    }

    private function verify_hash($password,$hash)
    {
        return $hash == crypt($password, $hash);
    }

    private function get_user_hash($username){    

        try {

            //echo $this->create_hash('demo');

            $stmt = $this->db->prepare('SELECT password FROM dorosk_blog_users WHERE username = :username');
            $stmt->execute(array('username' => $username));
            
            $row = $stmt->fetch();
            return $row['password'];

        } catch(PDOException $e) {
            echo '<p class="error">'.$e->getMessage().'</p>';
        }
    }

    
    public function login($username,$password){    

        $hashed = $this->get_user_hash($username);
        
        if($this->verify_hash($password,$hashed) == 1){
            
            $_SESSION['loggedin'] = true;
            return true;
        }        
    }
    
        
    public function logout(){
        session_destroy();
    }
    
}

?>

Insérez les informations de connexion :

Vous devez insérer le nom d'utilisateur et le mot de passe pour accéder au panneau d'administration. Utilisez la requête ci-dessous.

INSERT INTO `dorosk_blog_users` (`userId`, `username`, `password`, `email`) VALUES
(1, 'admin', '0,6Rbsehdf.9I', 'doroskdorosk@gmail.com');
 

Maintenant, connectez-vous au panneau d'administration en utilisant les détails ci-dessous.

Nom d'utilisateur - admin

Mot de passe - admin

Maintenant, concevez le formulaire de connexion au blog , Ajoutez le style dans le dossier admin/assets :

admin/assets/style.css

input[type=text] {
  width: 15%;
  padding: 10px 20px;
  margin: 5px 0;
 border: 1px solid black; 
}
input[type=password] {
  width: 15%;
  padding: 10px 20px;
  margin: 5px 0;
 border: 1px solid black; 
}

input[type=submit] {
  width: 10%;
  margin-left:100px;
  padding: 12px 20px;
border: 1px solid #555;
 background-color: green;
 color:white;
    
}
.form{ 
margin-left: 500px; 
width: 100%;

 }

 .invalid { 
color:red; 
font-family: arial; 
margin-left: 500px; 

}


  }
  

Le code CSS est utilisé pour concevoir le formulaire de connexion et le message d'erreur avec une couleur rouge.

Maintenant, créez un fichier PHP dans le dossier admin et enregistrez-le sous index.php

Admin/index.php :

Ceci est le premier fichier , s'ouvrira après la connexion.

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

//check login or not 
if(!$user->is_logged_in()){ header('Location: login.php'); }


if(isset($_GET['delpost'])){ 

    $stmt = $db->prepare('DELETE FROM dorosk_blog WHERE articleId = :articleId') ;
    $stmt->execute(array(':articleId' => $_GET['delpost']));

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

Incluez le fichier de connexion .

Après cela, nous utilisons la condition if pour vérifier la connexion ou non.

Si l'utilisateur ne se connecte pas, il redirige vers la page de connexion.

Si la condition gère ce processus.

Un utilisateur inconnu ne peut pas ouvrir la page index.php sans connexion.

Après cela, nous supprimons le message par id.

Nous supprimons l'article de blog par l'identifiant. Nous avons déjà créé l'identifiant comme articleId dans la table.

Maintenant, discutons d'une autre partie du code -

<?php
try {

            $stmt = $db->query('SELECT articleId, articleTitle, articleDate FROM dorosk_blog ORDER BY articleId DESC');
            while($row = $stmt->fetch()){
                
                echo '<tr>';
                echo '<td>'.$row['articleTitle'].'</td>';
                echo '<td>'.date('jS M Y', strtotime($row['articleDate'])).'</td>';
        ?>

                <td>
                    <button class="editbtn"><a href="edit-blog-article.php?id=<?php echo $row['articleId'];?>">Edit </button></td>
 

Dans le code ci-dessus, nous sélectionnons les données par l'identifiant et les affichons dans un tableau HTML. Nous avons déjà discuté de la façon d'insérer des données et de les afficher dans un tableau HTML. Les données complètes sont sélectionnées par l'articleId et avec la commande DESC. Il affiche le dernier message à la première ligne du tableau HTML. Nous créons deux boutons pour éditer et supprimer les données de la ligne par id .

Code complet pour le fichier index.php –

admin/index.php

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

//check login or not 
if(!$user->is_logged_in()){ header('Location: login.php'); }


if(isset($_GET['delpost'])){ 

    $stmt = $db->prepare('DELETE FROM techno_blog WHERE articleId = :articleId') ;
    $stmt->execute(array(':articleId' => $_GET['delpost']));

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

?>

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

  <title>Admin Page </title>
  <script language="JavaScript" type="text/javascript">
  function delpost(id, title)
  {
      if (confirm("Are you sure you want to delete '" + title + "'"))
      {
          window.location.href = 'index.php?delpost=' + id;
      }
  }
  </script>
  <?php include("header.php");  ?>

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

    <table>
    <tr>
        <th>Article Title</th>
        <th>Posted Date</th>
        <th>Update</th>
         <th>Delete</th>
    </tr>
    <?php
        try {

            $stmt = $db->query('SELECT articleId, articleTitle, articleDate FROM techno_blog ORDER BY articleId DESC');
            while($row = $stmt->fetch()){
                
                echo '<tr>';
                echo '<td>'.$row['articleTitle'].'</td>';
                echo '<td>'.date('jS M Y', strtotime($row['articleDate'])).'</td>';
                ?>

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

            }

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

    <p> <button class="editbtn"><a href='add-blog-article.php'>Add New Article</a></button></p>       
</p></div>




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


 

Si vous vous connectez maintenant, vous obtiendrez une erreur de fichier du head, header et de footer sur la page d'index. Ces fichiers d'erreurs doivent être créés pour supprimer ces erreurs. Créons le premier fichier.

Créez un fichier PHP dans le dossier admin -

admin/head.php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
 

admin/header.php

 <link href="http://localhost/blog/assets/style.css" rel="stylesheet" type="text/css">
<link href="assets/css-min.css" rel="stylesheet" type="text/css">
    
</head>
<body>
    <ul class="ulclass">
   <li><a href='index.php'>Dashboard</a></li>
    <li><a href='blog-users.php'>Users</a></li>
    <li><a href="../" target="_blank">Visit Blog </a></li>
    <li><a href='logout.php'><font color="red">Logout</font></a></li>
</ul>

Dans le code du fichier header.php ci-dessus, nous avons ajouté un style provenant de l'extérieur du dossier admin -

<link href="http://localhost/blog/assets/style.css" rel="stylesheet" type="text/css">

Vous pouvez voir le chemin

blog/assets/style.css

Pour voir l'effet CSS sur la page d'index admin, ajoutez le style dans le dossier blog qui se trouve en dehors du dossier admin

Créez une feuille de style dans les assets du dossier blog.

blog/assets/style.css

 
body {
  margin: 0;
  font-family: "Lato", sans-serif;
}
h1{ 
color:black;
  text-decoration: none;
 }
 p{ 
text-align: justify;
  }

.container{
  


   width: 100%;
    background-color: #FEFEFE;
    margin: 0 auto;
    overflow: hidden;

 
}
.content{ 
 padding: 10px 100px;
    width: 60%;
    float: left;
    border-left-color: #FFF;
    border-right-color: #FFF;
 }
 .content h1{ 
 text-decoration: none;
  }

.sidebar a {
  display: block;
  color: black;
  padding: 16px;
  text-decoration: none;

}
 
.sidebar a.active {
  background-color: #4CAF50;
  color: white;
}

.sidebar a:hover:not(.active) {
  background-color: #555;
  color: white;
}

.sidebar {
  float: right;
    width: 20%;
    padding-bottom: 10px;
    background-color: #eee;


}
.footer{ 
 background-color: #555;
    color: #fff;
    clear: both;
 }
 .footer a{ 
   color: #F272EC;
   text-decoration: none;
  }

 .readbtn{ 
    transition: all linear 0.2s;
    background: #66ad44;
   
    border: none;
    font-size: 13px;
    line-height: 22px;
    border-radius: 0;
    padding: 6px 14px;
    font-family: 'Montserrat', sans-serif;
    border-radius: 2px;

  color: white;
  }
  .readbtn a{
text-decoration: none;
color: #FEFEFE;
   }

@media screen and (max-width: 700px) {
  .sidebar {
    width: 100%;
    height: auto;
    position: relative;
    display: none;
  }
  .sidebar a {float: left;}
  div.content {margin-left: 0;}
}

@media screen and (max-width: 400px) {
  .sidebar a {
    text-align: center;
    float: none;
  }
}



.ulclass {
  list-style-type: none;
  margin: 0;
  padding: 0;
  overflow: hidden;
  background-color: #333;
}


li {
  float: left;
}

li a {
  display: block;
  color: white;
  text-align: center;
  padding: 14px 16px;
  text-decoration: none;
}

li a:hover {
  background-color: #111;
}

Le stylehseet ci-dessus concevra le header, footre et le tableau sur les pages d'administration et de blog.

Complétons la partie CSS du blog. Créez le fichier css-min.css dans le dossier admin/assets/ .

admin/assets/css-min.css

 
 .message { 
color:red; 
font-family: arial; 
margin-left: 500px; 

}

table {
    border-collapse: collapse;
    border-spacing: 0;
    width: 100%;
    border: 1px solid #ddd;
}

th, td {
    text-align: left;
    padding: 8px;
}

tr:nth-child(even){background-color: #E6DEDC}


.editbtn{ 
    transition: all linear 0.2s;
    background: #66ad44;
   
    border: none;
    font-size: 13px;
    line-height: 22px;
    border-radius: 0;
    padding: 6px 14px;
    font-family: 'Montserrat', sans-serif;
    border-radius: 2px;

  color: white;
  }
 .editbtn a{
text-decoration: none;
color: #FEFEFE;
   }

.delbtn{ 
    transition: all linear 0.2s;
    background: #FC0527;
   
    border: none;
    font-size: 13px;
    line-height: 22px;
    border-radius: 0;
    padding: 6px 14px;
    font-family: 'Montserrat', sans-serif;
    border-radius: 2px;

  color: white;
  }
 .delbtn a{
text-decoration: none;
color: #FEFEFE;
   }

.subbtn{ 
    transition: all linear 0.2s;
    background: #66ad44;
   
    border: none;
    font-size: 13px;
    line-height: 22px;
    border-radius: 0;
    padding: 6px 14px;
    font-family: 'Montserrat', sans-serif;
    border-radius: 2px;
  }
 .subbtn a{
text-decoration: none;
color: #FEFEFE;
   }

Cette feuille de style CSS concevra les différents boutons et tableaux des pages d'administration.

admin/footer.php

Créez un fichier footer.php et utilisez le code ci-dessous

 <div class="footer">
    <center><h2>Blog Powered By <a target="_blank"href="https://dorosk.com">Dorosk Websoft</a></h2></center>
</div>
</body> 
</html> 

admin/index.php(Screenshot)admin/index.php(Screenshot)

admin/logout.php

Le fichier logout.php a détruit la session d'un utilisateur. Créez un fichier PHP et enregistrez-le dans le dossier admin:

admin/logout.php

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

//log user out
$user->logout();
header('Location: index.php'); 

?> 

Après la déconnexion, vous serez redirigé sur la page index.php.

Admin/blog-users.php

Dans le blog, il y a un rôle très important des utilisateurs. Dans ce fichier PHP, tous les utilisateurs du blog sont affichés et avec la création d'un bouton supprimer et modifier à partir duquel les utilisateurs du blog peuvent être supprimés ou modifiés. Comprenons le code du fichier PHP des utilisateurs du blog –

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

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

// add / edit page
if(isset($_GET['deluser'])){ 

    
    if($_GET['deluser'] !='1'){

        $stmt = $db->prepare('DELETE FROM techno_blog_users WHERE userId = :userId') ;
        $stmt->execute(array(':userId' => $_GET['deluser']));

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

    }
} 

?> 

1. Tout d'abord, incluez le fichier de configuration en utilisant la méthode require_once() .

2. Si la condition vérifie l'utilisateur connecté ou non. Si l'utilisateur s'est connecté, utilisez rester sur la même page si la session utilisateur est détruite (déconnexion), l'utilisateur redirige vers la page de connexion. Nous utilisons la fonction PHP header() pour rediriger via header http .

3. Supprimez l'utilisateur par identifiant . Nous pouvons supprimer l'utilisateur par une ligne. 

4. Après avoir supprimé l'utilisateur, il redirige vers la page de l'utilisateur (même page) à l'aide de la fonction header .

<?php
try {

            $stmt = $db->query('SELECT userId, username, email FROM dorosk_blog_users ORDER BY userId');
            while($row = $stmt->fetch()){
                
                echo '<tr>';
                echo '<td>'.$row['username'].'</td>';
                echo '<td>'.$row['email'].'</td>';
                ?>

                <td>
                    <button class="editbtn"><a href="edit-blog-user.php?id=<?php echo $row['userId'];?>">Edit</a> </button>
                    <php if($row['userId'] != 1){>
                    </td>
                        <td><button class="delbtn"><a href="javascript:deluser('<php echo $row['userId'];?>','<?php echo $row['username'];?>')">Delete</a></button>
 

Dans le code ci-dessus, nous sélectionnons les données de la table MYSQL dorosk_blog_users en utilisant PHP. Nous sélectionnons les données par identifiant. Nous affichons le nom d'utilisateur et l'e-mail avec le bouton modifier et supprimer.

Nous discutons déjà de ce processus -

Code complet pour le fichier blog-users.php –

Créez un fichier blog-users.php dans le dossier admin -

admin/blog-users.php

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

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

// add / edit page
if(isset($_GET['deluser'])){ 

  
  if($_GET['deluser'] !='1'){

    $stmt = $db->prepare('DELETE FROM dorosk_blog_users WHERE userId = :userId') ;
    $stmt->execute(array(':userId' => $_GET['deluser']));

    header('Location: blog-users.php?action=deleted');
    exit;

  }
} 

?>

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

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

  <table>
  <tr>
    <th>Username </th>
    <th>Email </th>
    <th>Edit </th>
    <th>Delete </th>

  </tr>
   <?php
    try {

      $stmt = $db->query('SELECT userId, username, email FROM dorosk_blog_users ORDER BY userId');
      while($row = $stmt->fetch()){
        
        echo ' <tr>';
        echo ' <td>'.$row['username'].' </td>';
        echo ' <td>'.$row['email'].' </td>';
        ?>

        <td>
          <button class="editbtn"><a href="edit-blog-user.php?id=<?php echo $row['userId'];?>">Edit</a> </button>
          <?php if($row['userId'] != 1){?>
          </td>
            <td><button class="delbtn"><a href="javascript:deluser('<?php echo $row['userId'];?>','<?php echo $row['username'];?>')">Delete</a></button>

          <?php } 

          ?>
        </td>
        
        <?php 
        echo '</tr>';

      }

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

  <p><button class="editbtn"><a href='add-blog-user.php'>Add User</a></button></p>


</div>
  



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


admin/blog-users.php(screenshot)

admin/add-blog-user.php

L'utilisateur principal du blog peut ajouter d'autres utilisateurs. Pour ajouter plus d'utilisateurs, nous créons une autre page.

Comprenons la partie fonctionnelle de cette page –

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

        //collect form data
        extract($_POST);

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

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

        if($passwordConfirm ==''){
            $error[] = 'Please confirm the password.';
        }

        if($password != $passwordConfirm){
            $error[] = 'Passwords do not match.';
        }

        if($email ==''){
            $error[] = 'Please enter the email address.';
        }

        if(!isset($error)){

            $hashedpassword = $user->create_hash($password);

            try {

                //insert into database
                $stmt = $db->prepare('INSERT INTO dorosk_blog_users (username,password,email) VALUES (:username, :password, :email)') ;
                $stmt->execute(array(
                    ':username' => $username,
                    ':password' => $hashedpassword,
                    ':email' => $email
                ));

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

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

        }

    }

1. Soumettez les données en cliquant sur le bouton. Si la condition permet de conserver les données du formulaire jusqu'à ce que le bouton soit enfoncé.

2. Vérifiez que les champs du formulaire sont vides ou n'utilisent pas d'instructions if imbriquées. Si les champs du formulaire sont vides, affichez le message sur la page et n'exécutez jamais la requête d'insertion. Si tous les champs sont remplis, exécutez la requête.

3. Utilisez la requête d'insertion MYSQL avec PHP et insérez les champs du formulaire dans la table de la base de données.

C'est une partie importante de cela. Ce formulaire insère le mot de passe au format de hachage. Vous devez créer un mot de passe class.password dans le dossier classes. Le class.password convertit le texte brut au format de hachage.

Tout d'abord, créez class.password dans le dossier classes. Le dossier classes est situé en dehors du dossier admin.

Code PHP Complet pour le fichier class.password.php

blog/classes/class.password.php –

 <?php
if (!defined('PASSWORD_DEFAULT')) {
        define('PASSWORD_BCRYPT', 1);
        define('PASSWORD_DEFAULT', PASSWORD_BCRYPT);
}

    Class Password {

        public function __construct() {}


        /**
         * Hash the password using the specified algorithm
         *
         * @param string $password The password to hash
         * @param int    $algo     The algorithm to use (Defined by PASSWORD_* constants)
         * @param array  $options  The options for the algorithm to use
         *
         * @return string|false The hashed password, or false on error.
         */
        function password_hash($password, $algo, array $options = array()) {
            if (!function_exists('crypt')) {
                trigger_error("Crypt must be loaded for password_hash to function", E_USER_WARNING);
                return null;
            }
            if (!is_string($password)) {
                trigger_error("password_hash(): Password must be a string", E_USER_WARNING);
                return null;
            }
            if (!is_int($algo)) {
                trigger_error("password_hash() expects parameter 2 to be long, " . gettype($algo) . " given", E_USER_WARNING);
                return null;
            }
            switch ($algo) {
                case PASSWORD_BCRYPT :
                    // Note that this is a C constant, but not exposed to PHP, so we don't define it here.
                    $cost = 10;
                    if (isset($options['cost'])) {
                        $cost = $options['cost'];
                        if ($cost < 4 || $cost > 31) {
                            trigger_error(sprintf("password_hash(): Invalid bcrypt cost parameter specified: %d", $cost), E_USER_WARNING);
                            return null;
                        }
                    }
                    // The length of salt to generate
                    $raw_salt_len = 16;
                    // The length required in the final serialization
                    $required_salt_len = 22;
                    $hash_format = sprintf("$2y$%02d$", $cost);
                    break;
                default :
                    trigger_error(sprintf("password_hash(): Unknown password hashing algorithm: %s", $algo), E_USER_WARNING);
                    return null;
            }
            if (isset($options['salt'])) {
                switch (gettype($options['salt'])) {
                    case 'NULL' :
                    case 'boolean' :
                    case 'integer' :
                    case 'double' :
                    case 'string' :
                        $salt = (string)$options['salt'];
                        break;
                    case 'object' :
                        if (method_exists($options['salt'], '__tostring')) {
                            $salt = (string)$options['salt'];
                            break;
                        }
                    case 'array' :
                    case 'resource' :
                    default :
                        trigger_error('password_hash(): Non-string salt parameter supplied', E_USER_WARNING);
                        return null;
                }
                if (strlen($salt) < $required_salt_len) {
                    trigger_error(sprintf("password_hash(): Provided salt is too short: %d expecting %d", strlen($salt), $required_salt_len), E_USER_WARNING);
                    return null;
                } elseif (0 == preg_match('#^[a-zA-Z0-9./]+$#D', $salt)) {
                    $salt = str_replace('+', '.', base64_encode($salt));
                }
            } else {
                $buffer = '';
                $buffer_valid = false;
                if (function_exists('mcrypt_create_iv') && !defined('PHALANGER')) {
                    $buffer = mcrypt_create_iv($raw_salt_len, MCRYPT_DEV_URANDOM);
                    if ($buffer) {
                        $buffer_valid = true;
                    }
                }
                if (!$buffer_valid && function_exists('openssl_random_pseudo_bytes')) {
                    $buffer = openssl_random_pseudo_bytes($raw_salt_len);
                    if ($buffer) {
                        $buffer_valid = true;
                    }
                }
                if (!$buffer_valid && is_readable('/dev/urandom')) {
                    $f = fopen('/dev/urandom', 'r');
                    $read = strlen($buffer);
                    while ($read < $raw_salt_len) {
                        $buffer .= fread($f, $raw_salt_len - $read);
                        $read = strlen($buffer);
                    }
                    fclose($f);
                    if ($read >= $raw_salt_len) {
                        $buffer_valid = true;
                    }
                }
                if (!$buffer_valid || strlen($buffer) < $raw_salt_len) {
                    $bl = strlen($buffer);
                    for ($i = 0; $i < $raw_salt_len; $i++) {
                        if ($i < $bl) {
                            $buffer[$i] = $buffer[$i] ^ chr(mt_rand(0, 255));
                        } else {
                            $buffer .= chr(mt_rand(0, 255));
                        }
                    }
                }
                $salt = str_replace('+', '.', base64_encode($buffer));
            }
            $salt = substr($salt, 0, $required_salt_len);

            $hash = $hash_format . $salt;

            $ret = crypt($password, $hash);

            if (!is_string($ret) || strlen($ret) <= 13) {
                return false;
            }

            return $ret;
        }

        /**
         * Get information about the password hash. Returns an array of the information
         * that was used to generate the password hash.
         *
         * array(
         *    'algo' => 1,
         *    'algoName' => 'bcrypt',
         *    'options' => array(
         *        'cost' => 10,
         *    ),
         * )
         *
         * @param string $hash The password hash to extract info from
         *
         * @return array The array of information about the hash.
         */
        function password_get_info($hash) {
            $return = array('algo' => 0, 'algoName' => 'unknown', 'options' => array(), );
            if (substr($hash, 0, 4) == '$2y && strlen($hash) == 60) {
                $return['algo'] = PASSWORD_BCRYPT;
                $return['algoName'] = 'bcrypt';
                list($cost) = sscanf($hash, "$2y$%d$");
                $return['options']['cost'] = $cost;
            }
            return $return;
        }

        /**
         * Determine if the password hash needs to be rehashed according to the options provided
         *
         * If the answer is true, after validating the password using password_verify, rehash it.
         *
         * @param string $hash    The hash to test
         * @param int    $algo    The algorithm used for new password hashes
         * @param array  $options The options array passed to password_hash
         *
         * @return boolean True if the password needs to be rehashed.
         */
        function password_needs_rehash($hash, $algo, array $options = array()) {
            $info = password_get_info($hash);
            if ($info['algo'] != $algo) {
                return true;
            }
            switch ($algo) {
                case PASSWORD_BCRYPT :
                    $cost = isset($options['cost']) ? $options['cost'] : 10;
                    if ($cost != $info['options']['cost']) {
                        return true;
                    }
                    break;
            }
            return false;
        }

        /**
         * Verify a password against a hash using a timing attack resistant approach
         *
         * @param string $password The password to verify
         * @param string $hash     The hash to verify against
         *
         * @return boolean If the password matches the hash
         */
        public function password_verify($password, $hash) {
            if (!function_exists('crypt')) {
                trigger_error("Crypt must be loaded for password_verify to function", E_USER_WARNING);
                return false;
            }
            $ret = crypt($password, $hash);
            if (!is_string($ret) || strlen($ret) != strlen($hash) || strlen($ret) <= 13) {
                return false;
            }

            $status = 0;
            for ($i = 0; $i < strlen($ret); $i++) {
                $status |= (ord($ret[$i]) ^ ord($hash[$i]));
            }

            return $status === 0;
        }

    }

Code complet pour add-blog-user.php–

Maintenant, utilisez le code ci-dessous pour ajouter plus d'utilisateurs de blog.

admin/add-blog-user.php

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

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

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

<div class="content">
 

    <h2>Add User</h2>

    <?php

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

        //collect form data
        extract($_POST);

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

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

        if($passwordConfirm ==''){
            $error[] = 'Please confirm the password.';
        }

        if($password != $passwordConfirm){
            $error[] = 'Passwords do not match.';
        }

        if($email ==''){
            $error[] = 'Please enter the email address.';
        }

        if(!isset($error)){

            $hashedpassword = $user->create_hash($password);

            try {

                //insert into database
                $stmt = $db->prepare('INSERT INTO dorosk_blog_users (username,password,email) VALUES (:username, :password, :email)') ;
                $stmt->execute(array(
                    ':username' => $username,
                    ':password' => $hashedpassword,
                    ':email' => $email
                ));

                //redirect to user page 
                header('Location: blog-users.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">

        <p><label>Username</label><br>
        <input type="text" name="username" value="<?php if(isset($error)){ echo $_POST['username'];}?>"></p>

        <p><label>Password</label><br>
        <input type="password" name="password" value="<?php if(isset($error)){ echo $_POST['password'];}?>"></p>

        <p><label>Confirm Password</label><br>
         <input type="password" name="passwordConfirm" value="<?php if(isset($error)){ echo $_POST['passwordConfirm'];}?>"></p>

        <p><label>Email</label><br>
        <input type="text" name="email" value="<?php if(isset($error)){ echo $_POST['email'];}?>"></p>
        
        <button name="submit" class="subbtn"> Add User</button>

    


</div>




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



 

admin/edit-blog-user.php –

Il devrait y avoir une option pour ajouter des données de blog à la table MYSQL ainsi que pour les modifier. Maintenant, comprenez la ligne principale du fichier edit-blog-user.php

if(!isset($error)){

            try {

                if(isset($password)){

                    $hashedpassword = $user->create_hash($password);

                    //update into database
                    $stmt = $db->prepare('UPDATE dorosk_blog_users SET username = :username, password = :password, email = :email WHERE userId = :userId') ;
                    $stmt->execute(array(
                        ':username' => $username,
                        ':password' => $hashedpassword,
                        ':email' => $email,
                        ':userId' => $userId
                    ));


                } else {

                    //update database
                    $stmt = $db->prepare('UPDATE dorosk_blog_users SET username = :username, email = :email WHERE userId = :userId') ;
                    $stmt->execute(array(
                        ':username' => $username,
                        ':email' => $email,
                        ':userId' => $userId
                    ));

                }
                

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

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

Dans le code PHP ci-dessus, nous utilisons la fonction create_hash() pour convertir le texte brut en hashcode.

Nous utilisons l'instruction if-else pour exécuter les deux instructions. Si le mot de passe est modifié, exécutez le premier bloc if si l'utilisateur ne modifie pas le mot de passe, puis exécutez le bloc else.

Comme vous le savez, nous utilisons la requête UPDATE pour mettre à jour les données de l'utilisateur du blog par identifiant.

Code PHP complet pour le fichier edit-blog-user.php –

admin/edit-blog-user.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'); }
?>

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

<div class="content">
 
<h2>Edit User</h2>


    <?php

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

        //collect form data
        extract($_POST);

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

        if( strlen($password) > 0){

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

            if($passwordConfirm ==''){
                $error[] = 'Please confirm the password.';
            }

            if($password != $passwordConfirm){
                $error[] = 'Passwords do not match.';
            }

        }
        

        if($email ==''){
            $error[] = 'Please enter the email address.';
        }

        if(!isset($error)){

            try {

                if(isset($password)){

                    $hashedpassword = $user->create_hash($password);

                    //update into database
                    $stmt = $db->prepare('UPDATE dorosk_blog_users SET username = :username, password = :password, email = :email WHERE userId = :userId') ;
                    $stmt->execute(array(
                        ':username' => $username,
                        ':password' => $hashedpassword,
                        ':email' => $email,
                        ':userId' => $userId
                    ));


                } else {

                    //update database
                    $stmt = $db->prepare('UPDATE dorosk_blog_users SET username = :username, email = :email WHERE userId = :userId') ;
                    $stmt->execute(array(
                        ':username' => $username,
                        ':email' => $email,
                        ':userId' => $userId
                    ));

                }
                

                //redirect to users page
                header('Location: blog-users.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 userId, username, email FROM dorosk_blog_users WHERE userId = :userId') ;
            $stmt->execute(array(':userId' => $_GET['id']));
            $row = $stmt->fetch(); 

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

    ?>

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

        <p><label>Username</label><br>
        <input type="text" name="username" value="<?php echo $row['username'];?>"></p>

        <p><label>Password (only to change)</label><br>
        <input type="password" name="password" value=""></p>

        <p><label>Confirm Password</label><br>
        <input type="password" name="passwordConfirm" value=""></p>

        <p><label>Email</label><br>
        <input type="text" name="email" value="<?php echo $row['email'];?>"></p>

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

    </form>

</div>



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

Concentrez-vous maintenant sur les articles du blog. Vous pourrez créer un nouvel article de blog, modifier l'article de blog et supprimer l'article de blog avec l'éditeur HTML.

admin/add-blog-article.php

Ajouter un fichier d'article de blog sera votre page d'ajout d'article. Cela vous aidera à insérer facilement les articles du blog. Dans ce fichier, nous utiliserons l'éditeur HTML pour éditer le contenu de la page.

Discutons du code PHP -

    //insert into database
   $stmt = $db->prepare('INSERT INTO dorosk_blog (articleTitle,articleDescrip,articleContent,articleDate) VALUES (:articleTitle, :articleDescrip, :articleContent, :articleDate)') ;
  
$stmt->execute(array(
    ':articleTitle' => $articleTitle,
    ':articleDescrip' => $articleDescrip,
    ':articleContent' => $articleContent,
    ':articleDate' => date('Y-m-d H:i:s'),
    
));

 

Nous avons déjà discuté de l'opération d'insertion à l'aide de PHP PDO. Dans ce fichier d'ajout d'article , nous insérons l'article de blog dans la table dorosk_blog.

Code complet pour le fichier add-blog-article.php

admin/add-blog-article.php

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

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

<?php include("head.php");  ?>
<!-- On page head area--> 
  <title>Add New Article - Dorosk Websoft</title>
    <script src="//tinymce.cachefly.net/4.0/tinymce.min.js"></script>
    <script>
          tinymce.init({
             mode : "specific_textareas",
    editor_selector : "mceEditor",
              plugins: [
                  "advlist autolink lists link image charmap print preview anchor",
                  "searchreplace visualblocks code fullscreen",
                  "insertdatetime media table contextmenu paste"
              ],
              toolbar: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image"
          });
  </script>

  <?php include("header.php"); 

   ?>

<div class="content">
 
    <h1>Add New Article</h1>

    <?php

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

 

        //collect form data
        extract($_POST);

        //very basic validations
        if($articleTitle ==''){
            $error[] = 'Please enter the title.';
        }

        if($articleDescrip ==''){
            $error[] = 'Please enter the description.';
        }

        if($articleContent ==''){
            $error[] = 'Please enter the content.';
        }

        if(!isset($error)){

          try {



    //insert into database
   $stmt = $db->prepare('INSERT INTO dorosk_blog (articleTitle,articleDescrip,articleContent,articleDate) VALUES (:articleTitle, :articleDescrip, :articleContent, :articleDate)') ;
  



$stmt->execute(array(
    ':articleTitle' => $articleTitle,
    ':articleDescrip' => $articleDescrip,
    ':articleContent' => $articleContent,
    ':articleDate' => date('Y-m-d H:i:s'),
    
));
//add categories
 


    //redirect to index page
    header('Location: index.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>Article Title</label><br>
        <input type="text" name="articleTitle" style="width:100%;height:40px" value="<?php if(isset($error)){ echo $_POST['articleTitle'];}?>"></h2>

        <h2><label>Short Description(Meta Description) </label><br>
        <textarea name="articleDescrip" cols="120" rows="6"><?php if(isset($error)){ echo $_POST['articleDescrip'];}?></textarea></h2>

        <h2><label>Long Description(Body Content)</label><br>
        <textarea name="articleContent" id="textarea1" class="mceEditor" cols="120" rows='20'><?php if(isset($error)){ echo $_POST['articleContent'];}?></textarea></h2>
        

       
        <button name="submit" class="subbtn">Submit</button>


    </form>



</div>

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

 

Dans le code du fichier PHP, nous avons spécifié le sélecteur d'éditeur pour le contenu teaxtarea uniquement. Nous n'avons pas besoin d'ajouter un éditeur pour une courte description. La description courte sera affichée dans la méta description, pas sur la page. Cela aidera au référencement de l'article de blog.

Maintenant, créez un fichier PHP d'édition d'article de blog pour éditer un article de blog.

admin/edit-blog-article.php

Nous avons déjà discuté de l'opération d'édition dans le fichier PHP d'édition utilisateur. Ne comprenons que les lignes principales -

 $stmt = $db->prepare('UPDATE dorosk_blog SET articleTitle = :articleTitle,  articleDescrip = :articleDescrip, articleContent = :articleContent WHERE articleId = :articleId') ;

La ligne de UPDATE ci-dessus aidera à mettre à jour les données du champ de formulaire par articleId .

$stmt = $db->prepare('SELECT articleId,articleTitle, articleDescrip, articleContent FROM dorosk_blog WHERE articleId = :articleId') ;
            $stmt->execute(array(':articleId' => $_GET['id']));
 

Tout d'abord, nous sélectionnons les données par identifiant en utilisant la méthode PHP GET via  HTTP header de la page.

Nous sélectionnons l'article de blog (post) par l'identifiant unique car nous avons déjà ajouté le bouton d'édition sur la page index.php.

Code PHP complet pour le fichier edit-blog-article.php –

admin/edit-blog-article.php

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

if(!$user->is_logged_in()){ header('Location: login.php'); }
?>
<?php include("head.php");  ?>
    <title>Update Article - Dorosk Websoft</title>
    <script src="//tinymce.cachefly.net/4.0/tinymce.min.js"></script>
  <script>
          tinymce.init({
           mode : "specific_textareas",
    editor_selector : "mceEditor",
              plugins: [
                  "advlist autolink lists link image charmap print preview anchor",
                  "searchreplace visualblocks code fullscreen",
                  "insertdatetime media table contextmenu paste"
              ],
              toolbar: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image"
          });
  </script>
    <?php include("header.php");  ?>

<div class="content">
 
<h2>Edit Post</h2>


    <?php

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


        //collect form data
        extract($_POST);

        //very basic validation
        if($articleId ==''){
            $error[] = 'This post is missing a valid id!.';
        }

        if($articleTitle ==''){
            $error[] = 'Please enter the title.';
        }

        if($articleDescrip ==''){
            $error[] = 'Please enter the description.';
        }

        if($articleContent ==''){
            $error[] = 'Please enter the content.';
        }
        


        if(!isset($error)){
try {

   

    //insert into database
    $stmt = $db->prepare('UPDATE dorosk_blog SET articleTitle = :articleTitle,  articleDescrip = :articleDescrip, articleContent = :articleContent WHERE articleId = :articleId') ;
$stmt->execute(array(
    ':articleTitle' => $articleTitle,
    ':articleDescrip' => $articleDescrip,
    ':articleContent' => $articleContent,
    ':articleId' => $articleId,
  
));

    //redirect to index page
    header('Location: index.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 articleId,articleTitle, articleDescrip, articleContent FROM dorosk_blog WHERE articleId = :articleId') ;
            $stmt->execute(array(':articleId' => $_GET['id']));
            $row = $stmt->fetch(); 

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

    ?>

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

           <h2><label>Article Title</label><br>
        <input type='text' name='articleTitle' style="width:100%;height:40px" value="<?php echo $row['articleTitle'];?>"></h2>
        



       <h2><label>Short Description(Meta Description) </label><br>
        <textarea name='articleDescrip' cols='120' rows='6'><?php echo $row['articleDescrip'];?></textarea></h2>

       <h2><label>Long Description(Body Content)</label><br>
        <textarea name='articleContent' id='textarea1' class='mceEditor' cols='120' rows='20'><?php echo $row['articleContent'];?></textarea></h2>
        


       
        <button name='submit' class="subbtn"> Update</button>

    </form>

</div>
  



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

 

L'opération d'administration est terminée. Maintenant, créez l'interface de blog pour le public.

blog/index.php –

Le fichier d'index contiendra la liste des articles avec les boutons Lire la suite.

 

Ceci est la page d'accueil du blog CMS. Nous sélectionnerons l'article de blog par identifiant. Nous avons déjà évoqué l'opération de sélection et d'affichage.

Code PHP complet pour le fichier index.php –

blog/index.php

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

<?php 
//include head file for language preference 
include("head.php");  ?>
    <title>Dorosk Websoft</title>

    <?php 
//header content //navbar 
    include("header.php");  ?>

<div class="container">
<div class="content">
 
        <?php
            try {   
                    //selecting data by id 
               $stmt = $db->query('SELECT articleId, articleTitle,articleDescrip, articleDate FROM dorosk_blog ORDER BY articleId DESC');

                while($row = $stmt->fetch()){
                    
                    echo '<div>';
                        echo '<h1><a href="show.php?id='.$row['articleId'].'">'.$row['articleTitle'].'</a></h1>';
                             echo '<hr>';
                      //Display the date 
                     echo '<p>Posted on '.date('jS M Y', strtotime($row['articleDate'])).'</p>';


                        echo '<p>'.$row['articleDescrip'].'</p>';                
                        echo '<p><button class="readbtn"><a href="show.php?id='.$row['articleId'].'">Read More</a></button></p>';                
                    echo '</div>';

                }

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

        
</div>

</div>

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

 

Il y a beaucoup d'erreurs sur la page d'index. Pour supprimer l'erreur, créez head.php, header.php et footer.php dans le dossier du blog. Ne confondez pas. Maintenant, nous travaillons sur l'interface du blog.

blog/head.php 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
 

blog/header.php

 <link href="http://localhost/blog/assets/style.css" rel="stylesheet" type="text/css">
</head>
<body>
<ul class="ulclass">
<li><a href="http://localhost/blog/">Home>/a<</li>

</ul>

blog/footer.php

<div class="footer">
    <center><h2>Blog Powered By <a target="_blank"href="https://dorosk.com">Dorosk Websoft </a></h2></center>
</div>

</body>
</html>

 

 

blog/index.php(Screenshot)

blog/show.php

La page d'index contient la liste des articles avec le bouton Lire la suite. Si vous cliquez sur le bouton Lire la suite, il redirige vers le fichier show.php avec un numéro d'identification.

L'identifiant est GET sur la page d'affichage et affiche le contenu de l'article sur la page.

Comprenons le fichier PHP show.php

$stmt = $db->prepare('SELECT articleId,articleDescrip,articleTitle, articleContent, articleDate FROM dorosk_blog WHERE articleId = :articleId');
$stmt->execute(array(':articleId' => $_GET['id']));
$row = $stmt->fetch();

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

Il s'agit d'une opération similaire à l'opération d'édition. Dans le code ci-dessus, nous sélectionnons les données par identifiant. L'identifiant est obtenu à partir de header Http par la méthode GET. Nous récupérons toutes les données par identifiant et si elles n'existent pas, redirigé vers la page d'accueil du blog.

<meta name="description" content="<?php echo $row['articleDescrip'];?>">    

"SEO" est plus important pour tous les blogs. Les balises HTML Meta sont utilisées pour le classement SEO. Nous affichons la brève description dans la balise Meta description.

La méta description sera affichée sous le titre de la page sur Google ou un autre moteur de recherche comme celui-ci :

Code PHP complet pour le fichier show.php

blog/show.php

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

$stmt = $db->prepare('SELECT articleId,articleDescrip,articleTitle, articleContent, articleDate FROM dorosk_blog WHERE articleId = :articleId');
$stmt->execute(array(':articleId' => $_GET['id']));
$row = $stmt->fetch();

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

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

    <title><?php echo $row['articleTitle'];?>-Dorosk Websoft</title>
  <meta name="description" content="<?php echo $row['articleDescrip'];?>">    
<meta name="keywords" content="Article Keywords">

<?php include("header.php");  ?>
<div class="container">
<div class="content">


<?php
            echo '<div>';
                echo '<h1>'.$row['articleTitle'].'</h1>';

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

            echo '</div>';
        ?>
       
   </div>
     </div>
<?php include("footer.php");  ?

Le premier tutoriel Blog est terminé. Ceci est le blog simple en PHP. Dans le prochain tutoriel, nous allons créer une URL conviviale pour le "SEO"en utilisant PHP et MYSQL.

Please Share



Previous Postes


Scroll to Top