Créer un chat en PHP avec une base de données

Catégorie Programmation PHP : Accueil du site

Vous êtes ici : Créer un chat en PHP avec une base de données

Publié par Mikiman

Nous allons voir dans cet article comment réaliser facilement et rapidement un chat simple à l'aide des technologies PHP et MySQL (base de données).

Tout d'abord nous allons commencer par réaliser la structure du chat en xHtml avec le code suivant :

Code source :

<h1>Les messages</h1>
<p>Aucun message</p>
<h3>Poster un message</h3>
<form action="#" method="post">
<p>Pseudo : <input type="text" name="pseudo" /></p>
<p>Message : <input type="text" name="message" size="50" /></p>
<p><input type="submit" name="submit" value="Envoyer le message" />
</form>



On a désormais la structure de notre chat.
Petite précision :

Code source :

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


L'attribut action à comme argument #, cela permet simplement de dire à la page d'envoyer le contenu du formulaire sur la même page.

Voyons maintenant du coté PHP, nous allons commencer par créer notre table dans la base de données :

Code source :

CREATE TABLE `chat` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`pseudo` VARCHAR( 250 ) NOT NULL ,
`message` VARCHAR( 250 ) NOT NULL
) ENGINE = innodb;



Maintenant nous allons gérer l'ajout de message et l'affiche des données, voyons les réflexions qu'il va nous être nécessaire d'effectuer pour cela :

  • Le bouton a-t'il été activé ?
  • Protéger les données envoyées par le formulaire
  • Contrôler si les données envoyées par le formulaire sont vides
  • Contrôler s'il n'y a pas déjà 10 ou plus messages dans la table
  • Envoyer les données dans MySQL
  • Afficher les messages



Voyons maintenant à quoi ressemble notre page PHP :

Code source :

<h1>Les messages</h1>
<?php
if(isset($_POST['submit'])){ #On contrôle si le bouton "submit" a été déclanché
    #On va mettre htmlentities pour éviter que le visiteur entre du code (sécurité)
    
$pseudo htmlentities($_POST['pseudo'], ENT_QUOTES); #On récupère le contenu du composant "pseudo"
    
$message htmlentities($_POST['message'], ENT_QUOTES); #On récupère le contenu du composant "message"
    
    
if(empty($pseudo) or empty($message)){ #Si Pseudo ou Message sont vides
        
echo '<p>Données invalides</p>';
    }else{
        
$connexion mysql_connect('localhost','root','pass'); #On se connecte à la base de données
        
mysql_select_db('basededonnee'$connexion); #On sélectionne une base de données
        
        
$rechercheMessage mysql_query('SELECT id FROM chat'); #On séléctionne toutes les entrées de la table chat
        
$comptageMessage mysql_num_rows($rechercheMessage); #On compte le nombre d'entrée
        
        
if($comptageMessage >= 10){ #On contrôle s'il n'y a pas déjà 10 messages ou plus
            
mysql_query("DELETE FROM chat ORDER BY id ASC LIMIT 0,1"); #On supprime le message le plus ancien
        
}
        
        
mysql_query("INSERT INTO chat VALUES('','$pseudo','$message') "); #On insere le nouveau message
        
echo '<p>Message ajouté</p>';
    }
}

$rechercheMessages mysql_query('SELECT pseudo,message FROM chat'); #On séléctionne les messages
$comptageMessages mysql_num_rows($rechercheMessages); #On compte les messages

if($comptageMessages == 0){ #S'il n'y a aucun message, on affiche le résultat
    
echo '<p>Aucun message</p>';
}else{ 
#Sinon on affiche les données
    
while($reponseMessages mysql_fetch_assoc($rechercheMessages)){
        echo 
'<p><strong>Posté par '.$reponseMessages['pseudo'].' :</strong><br />'.$reponseMessages['message'].'</p>';
    }
}
?>
<h3>Poster un message</h3>
<form action="#" method="post">
<p>Pseudo : <input type="text" name="pseudo" /></p>
<p>Message : <input type="text" name="message" size="50" /></p>
<p><input type="submit" name="submit" value="Envoyer le message" />
</form>



Notre chat PHP est maintenant fonctionnel !
Toutes les étapes ont été indiquées sous forme de commentaire (# suivit du commentaire)

Notez que le système qui contrôle les données d'ajout de message a été placé volontairement avant l'affichage afin que l'affichage prend en compte le dernier message ajouté.