javascript, javascripts, js, jscript, scripts, script, html, dhtml, dynamic, cookies, menu, frames, formulaire, source, code, gratuit, exemple, developper, html, php4, php3, php, mysql, liens, php2, forum, livre d'or, pages, web, dynamiques, programmation, webmasters, webmestres, tutorial, tutoriel, annuaires, espace, membres, banniéres, caddies, chats, compteurs, formulaires, forums, gestion, documentations, news, mailing, list, newsletter, moteurs, recherche, sondages, votes, statistiques, autres, agendas, calendriers, mail, annonces, audio, outils, réseaux, graphique, recommandation, site, sécurité, portail, creation, actualité, moteur de recherche, moteur, trucs, astuces, services, flash, action script, actionscript Tutoriaux : Php/MySQL
Script Masters : Javascript, Php, Mysql, html pour Webmasters!
 
    Script Masters
 
    Espace membre
 
    Langages
 
    Autres ressources
 
    Emploi avec Jobintree
 
    Ressources graphiques
 
    Recherche
 
    Kit graphique
 
    Liens
 
    Statistiques


 




Untitled Document
Module de news


Tutorial écrit par : Ordimania - Web Ressources

 

   Introduction

 

 


A travers ce tutorial, je vais vous montrer et vous expliquer comment réaliser un module news. Bien sûr, comme tout tutorial, c'est une version très simpliste d'un tel script qui vous serra exposée. Pour réaliser ce tutorial, nous nous servirons du langage de programmation, le PHP combiné aux base de données MySQL.

 

Le pourquoi du comment du module de news



Notre module de news utilise PHP et MySQL. C'est pourquoi, pour une meilleur appréhension de ce tutorial, je vous conseille d'aller voir ce cours sur MySQL.
De plus, il faut avoir quelques notions de requêtes MySQL, comme INSERT, SELECT et la clause WHERE et connaître les instructions qui permettent l'affichage en boucle car dans ce tutorial nous aurons besoins d'utiliser la boucle WHILE() - voir le cours -
Enfin, ce tutorial ne comportant pas de zones d'administrations disponibles dans certaines versions de ce genre de script en téléchargement, il faut aussi avoir une certaine connaissances de PhpMyAdmin, gestionnaire de base de donnée MySQL.

Voici de quoi est composé le module de news :
- Création d'une table MySQL dans laquelle nous insérerons les nouvelles news
- Une page d'insertion d'une nouvelle news avec un formulaire où plusieurs champs sont obligatoires donc on les vérifiera dans la page d'ajout.
- Un fichier de configuration où se trouvera le pseudo et le mot de passe ainsi que le mon de votre base de données pour la connection avec la table MySQL.
- Un fichier d'ajout de news, dans lequel on vérifie les champs du formulaire mais aussi dans lequel on enregistre les données dans la table MySQL.
- Un fichier d'affichage de toutes les news avec une option : l'affichage d'un certains nombres de caractères seulement.
- Un fichier de lecture de news dans lequel tous les caractères seront affichés.

Dans la fin de ce tutorial, je verrai avec vous comment sécuriser l'affichage de vos news en les accordant avant, ainsi que détourner l'affichage de termes comme <auteur/> pour éviter que le navigateur ne considère ceci comme des balises de scripts. Mais aussi nous verrons comment insérer des smiley, grâce à une fonction très intéressante de PHP.

 

Création de la table MySQL
 


Ici, nous allons créer la table nécessaire au module dans laquelle nous enregistrerons les news. Ils existe plusieurs permettant la gestion des bases de données ; mais PhpMyAdmin par sa très grande puissance est le plus utilisé. ( voir le cours )
Voyons maintenant de quoi est composée la table MySQL :

 

Structure de la table de news :
CREATE TABLE `news` (
`id` smallint(6) NOT NULL auto_increment,
`date` datetime NOT NULL,
`auteur` tinytext NOT NULL,
`email` tinytext NOT NULL,
`site_web` tinytext NULL,
`titre` tinytext NOT NULL,
`news` text NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY (`id`)
);

 

La page contenant le formulaire pour insérer une nouvelle news
 

 

Nous allons voir le code du formulaire qui permettra l'insertion d'une nouvelle news dans la base de données. Cette page étant composée principalement de code html, je n'y prêterais pas grande attention, cependant, je vous ferai remarquer l'importance du champs name pour ainsi récupérer les valeurs du formulaire. Pour cela, il existe 2 possibilités, soit la méthode POST, celle utilisée ou encore la méthode GET. Cette dernière ce caractérise par le transfert des informations dans la barre d'adresse alors que POST transmet ses données par les entêtes HTTP. Utilisée pour les pseudo-frames, la méthode GET comporte un gros inconvénient, celui de la taille. En effet, un nombre limite de composant est imposé, contrairement à la méthode POST. De plus, cette dernière est plus sécurisée car aucun webmaster ne peut lire les données passées dans la barre d'adresse ce qui n'est pas le cas de la méthode GET. Nous appellerons cette page ajout_news.php.

ajout_news.php :
<html>
<head>
<title>[ Ajouter un news (1/2) ]</title>
</head>
<body>
<form action="insertion.php" method="post">
<table width="600" border="0">
<tr>
<td colspan="2"><center>
Formulaire d'insertion d'une nouvelle news.</center></td>
</tr>
<tr>
<td width="20%"> <p align="right">Auteur : </p></td>
<td width="80%"><input type="text" name="auteur" class="formulaire" /></td>
</tr>
<tr>
<td><p align="right">E-mail :</p></td>
<td><input type="text" name="email" class="formulaire" /></td>
</tr>
<tr>
<td><p align="right">Site Web :</p></td>
<td><input type="text" name="site_web" class="formulaire" /></td>
</tr>
<tr>
<td><p align="right">Titre de la news :</p></td>
<td><input type="text" name="titre" class="formulaire" /></td>
</tr>
<tr>
<td colspan="2"> <p align="center">Message : </p></td>
</tr>
<tr>
<td colspan="2"><center>
<textarea cols="100" rows="7" name="message" class="formulaire"></textarea></center></td>
</tr>
<tr>
<td colspan="2"> <p align="center">
<input type="reset" value="Annuler" />&nbsp;&nbsp;<input type="submit" value="Envoyer" />
</p></td>
</tr>
</table>
</form>
</body>
</html>


 

Fichier de configuration
 


Voici un simple code de configuration comme vous avez sans doute déjà rencontré. Il est cependant commenté pour vous faciliter le renseignement des variables !
Ce fichier sera appelé : config.inc.php

config.inc.php :
<?php
// Adresse de votre serveur sql (pour free : sql.free.fr)
$serveur = "localhost";
// Votre login chez votre hebergeur
$login = "root";
// Votre mot de passe correspondant à ce login
$mot_passe = "admin";
// Nom de votre base MySQL, elle porte souvent le même nom que votre login
$nom_bdd = "ma_table";
?>

 

La page d'insertion dans la base de donnée
 


Dans cette partie, nous allons voir comment s'assurer que les champs ont bien été vérifié et si certains champs comportent bien des caractères obligatoire. Je vais me contenter de vous commenter le code plutôt que de l'expliquer. Attention dans cette version, tous les champs doivent être renseignés
Pour information, nous allons travailler sur la page insertion.php

insertion.php :
<?php

// on insère le fichier de configuration
require ('config.inc.php');

// on récupère les informations du formulaire
$auteur = $_POST["auteur"];
$email = $_POST["email"];
$site_web = $_POST["site_web"];
$titre = $_POST["titre"];
$message = $_POST["message"];

// on récupère les 7 premiers caractères du champs site_web
$verif_url = substr($site_web,0,7)

// on définit la date au format MySQL (aaaa-mm-jj hh:mm:ss)
$date = date("Y-m-d H:i:s");

// on vérifie que tous les champs soient vérifiés
if (empty($auteur) OR empty($email) OR empty($message) OR empty($site_web) OR empty($titre))
{

// on affiche un message d'erreur si l'un d'eux n'est pas remplis
?>
<html>
<body>
<script language="javascript">
alert('Le formulaire n\'est pas complet !\nVeuillez le compléter.');
</script>
[ <a href="javascript:history.go(-1);">Page précédente</a> ]
</body>
</html>
<?php
exit();
}

// on vérifie la présence du "http://" en début d'url
// on vérifie aussi la présence du '@' et du '.' dans l'email
elseif($verif_url != 'http://' OR !ereg('@',$email) OR !ereg('.',$email))
{
?>
<html>
<body>
<script language="javascript">
alert('Le formulaire est mal renseigné !\nVeuillez le vérifier.');
</script>
[ <a href="javascript:history.go(-1);">Page précédente</a> ]
</body>
</html>
<?php
exit();
}

// si aucune des conditions n'est vérifiées, on exécute le script
else
{

// on se connecte au serveur MySQL
$connection = mysql_connect($serveur, $login, $mdp);
// on sélectionne la base de donnée
$select_bdd = mysql_select_db($nom_bdd);

// on insère les données dans la table 'news'
$insertion = "INSERT INTO news (date,auteur,email,site_web,titre,news) VALUES ('$date','$auteur','$email','$site_web','$titre','$message')";

// en cas d'erreur, on affiche un message avec le nom de l'erreur
mysql_query($insertion) OR die('Impossible d\'enregistrer dans la base de donnée !<br />Veuillez renouveler votre envoie.<br /><a href=\'javascript:history.go(-1);\'>Page précédente</a><br />L\'erreur MySQL est :'.mysql_error());

// l'enregistrement s'est bien passé, on affiche un message de remerciement
?>
<html>
<head>
<title>[ Ajouter un news (2/2) ]</title>
</head>
<body>
<script language="JavaScript">
alert('Votre news a été enregistrée dans la base de donnée.');
</script>
Voici votre news :
<table width="600" border="0">
<tr>
<td width="20%"> <p align="right">Auteur : </p></td>
<td width="80%"><?php echo $auteur; ?></td>
</tr>
<tr>
<td><p align="right">E-mail :</p></td>
<td><?php echo $email; ?></td>
</tr>
<tr>
<td><p align="right">Site Web :/p></td>
<td><?php echo $site_web; ?></td>
</tr>
<tr>
<td width="20%"><p align="right">Date : </p></td>
<td><?php echo $date_news; ?> (au format MySQL : aaaa-mm-jj hh:mm:ss)</td>
</tr>
<tr>
<td colspan="2"> <p align="center">Message : </p></td>
</tr>
<tr>
<td colspan="2"><center><?php echo $message; ?></center></td>
</tr>
<tr>
<td colspan="2"><center>[ <a href="affichage.php">Voir les news</a> ]</center></td>
</tr>
</table>
</font>
</body>
</html>
<?php

// on ferme la connection au serveur MySQL
mysql_close();
}
?>

 

L'affichage de toutes les news
  Une fois que nous avons vu comment enregistrer une nouvelle news dans la base de donnée, nous allons afficher, pour chaque news, l'auteur, la date d'écriture, l'email de l'auteur et son site internet.

affichage.php :
<?php

// on inclut le fichier de configuration
require ('config.inc.php');

// connection à la base donnée
$connection = mysql_connect($serveur, $login, $mdp);
$select_bdd = mysql_select_db($nom_bdd);

// on récupère les info des table news
$affi_news = mysql_query("SELECT *,DATE_FORMAT(date, '%d/%m/%Y @ %H:%i') AS date_news FROM news");

echo '<html>';
echo '<head>';
echo '<title>[ Afficher les news ]</title>';
echo '</head>';
echo '<body>';

// on se sert de la boucle while pour afficher toutes les news
while ($news = mysql_fetch_array($affi_news))
{

// ici, on prend les 200 premier caractères de la news
// pour les afficher
$message = substr($news["news"],0,200);

// puis on afficher pour chaque news, un tableau
// avec toutes les informations dedans
echo '<table width="570" border="1" bordercolor="#000000" bgcolor="70809f">';
echo '<tr>';
echo '<td>';
echo '<table width="570" border="0">';
echo '<tr>';
echo '<td colspan="2">';
echo '<table width="570" border="0">';
echo '<tr>';

// on met la premier lettre de chaque mot en Majuscule
echo '<td width="65%">'.ucwords($news["titre"]).'</td>';
// on affiche la date d'insertion de la news
echo '<td>'.$news["date_news"].'</td>';
echo '</tr>';
echo '</table></td>';
echo '</tr>';
echo '<tr>';
// on met un lien vers l'email du posteur qui a pour sujet le titre de la news
echo '<td width="50%"> <a href="mailto:'.$news["email"].'?subject='.$news["titre"].'"> '.ucwords($news["auteur"]).' </a></td>';
// on met un lien vers le site internet du posteur
echo '<td width="50%"><a href="'.$news["site_web"].'" target="_blank">'.$news["site_web"].'</a></td>';
echo '</tr>';
echo '<tr>';
echo '<td colspan="2"><hr></td>';
echo '</tr>';
echo '<tr>';
// on met affiche les 200 premiers caratères de la news en remplacant les saut de ligne du
// formulaire par des retour à la ligne : <br>
echo '<td colspan="2">'.nl2br($message).' ...<br />[ <a href="lire.php?id='.$news["id"].'">Lire la suite ...</a> ]</td>';
echo '</tr>';
echo '<tr>';
echo '<td colspan="2"><hr><br /><br /></td>';
echo '</tr>';
echo '</table';
echo '</td>';
echo '</tr>';
echo '</table>';
echo '<br /><br /><br />';
}
echo '</body>';
echo '</html>';

// on ferme la connection à la base de donnée
mysql_close();
?>

Comme vous avez pu le voir, la fonction substr() permet de retourner un nombre prédéfinit de caractères, ici les 200 premiers. Il y a aussi l'utilisation de la fonction nl2br() qui permet le remplacement des sauts de lignes par des <br>.
Nous venons de voir comment afficher une petite partie de toutes les news, nous allons maintenant voir comment en afficher une seule en entier.

 

La page pour lire les news
 


Enfin, je vais vous montrer comment afficher une news en entier. Premièrement, vous avez sûrement remarqué l'apparence du lien différente avec un champs id. Celui-ci sert à définir quelle news sera affichée. Comme nous passons une informations par le barre d'adresse, il est assuré d'avoir la présence d'un $_GET, pour récupérer l'id et la rechercher dans la base de donnée pour afficher la news correspondante. Mais comme je le dite toujours, la pratique est dix fois mieux que la théorique donc, fini les explications et bienvenue au code commenté !

lire.php :
<?php

// on inclut le fichier de configuration
require ('config.inc.php');

// on récupère l'id de la barre d'adresse
$id_news = $_GET["id"];

// on se connecte à la base de donnée
$connection = mysql_connect($serveur, $login, $mdp);
$select_bdd = mysql_select_db($nom_bdd);

// on utilise la clause where pour rechercher
// l'id de la news correspondant à notre requête
$affichage = mysql_query("SELECT *,DATE_FORMAT(date, '%d/%m/%Y @ %H:%i') AS date_news FROM news WHERE id = '$id_news'");
$news = mysql_fetch_array($affichage);

echo '<html>';
echo '<head>';
echo '<title> [ Lire une news ]</title>';
echo '</head>';
echo '<body>';
echo '<table width="570" border="1" bordercolor="#000000" bgcolor="70809f">';
echo '<tr>';
echo '<td>';
echo '<table width="570" border="0">';
echo '<tr>';
echo '<td colspan="2">';
echo '<table width="570" border="0">';
echo '<tr>';

// on met la première lettre de chaque mot en Majuscule
echo '<td width="65%">'.ucwords($news["titre"]).'</td>';
// on affiche la date d'insertion de la news
echo '<td>'.$news["date_news"].'</td>';
echo '</tr>';
echo '</table></td>';
echo '</tr>';
echo '<tr>';
// on met un lien vers l'email du posteur qui a pour sujet le titre de la news
echo '<td width="50%"> <a href = "mailto:'.$news["email"].'?subject='.$news["titre"].'"> '.ucwords($news["auteur"]).' </a></td>';
// on met un lien vers le site internet du posteur
echo '<td width="50%"><a href="'.$news["site_web"].'" target="_blank">'.$news["site_web"].'</a></td>';
echo '</tr>';
echo '<tr>';
echo '<td colspan="2"><hr></td>';
echo '</tr>';
echo '<tr>';
// on met affiche les 200 premiers caractères de la news en remplaçant les saut de ligne du
// formulaire par des retour à la ligne : <br>
echo '<td colspan="2">'.nl2br($news["news"]).'<br /><br /></td>';
echo '</tr>';
echo '<tr>';
echo '<td colspan="2"><hr><br /><br /></td>';
echo '</tr>';
echo '</table>';
echo '</td>';
echo '</tr>';
echo '</table>';
echo '<br /><br /><br /><br />';
echo '</body>';
echo '</html>';

// on ferme la connection à la base de donnée
mysql_close();
?>

 

Sécuriser et Personnaliser l'affichage de news
 


Pour éviter que n'importe quelles news soient publiées sur votre site, il existe une méthode pour les accorder au préalable. Il suffit juste de créer un champs supplémentaire dans la table MySQL, que vous nommé affichage, qui a pour valeur défaut 0 et qui ne peut passer à un qu'en modifiant cette valeur via le web par votre gestionnaire de base de données. Et pour afficher les news, il faut que le champs affichage soit à 1. Voici un exemple.

Champs à rajouter dans la création de votre table de news :
`affichage` int(1) default `0`

La valeur par défaut sera 0 , il n'y aura qu'a modifier directement sur le web grâce à PhpMyAdmin par exemple en spécifiant 1 à la place de 0 et donc afficher la news. Vous pouvez également ajouter une page de gestion de news, où vous aurez la possibilité de valider les nouvelles news.

Voyons maintenant pour l'affichage des toutes les news :
Maintenant, nous allons afficher que les news où le champs affichage sera 1 ; pour ce faire, nous utiliserons la clause WHERE :

Restriction d'affichage :
$affi_news = mysql_query("SELECT *,DATE_FORMAT(date, '%d/%m/%Y @ %H:%i') AS date_news FROM news WHERE affichage = '1'");

De même pour la page où nous affichons une news seule, il faut aussi mettre WHERE affichage = '1', comme on se sert déjà d'un WHERE, nous allons mettre un AND (et) :

Restriction d'affichage :
$affichage = mysql_query("SELECT *,DATE_FORMAT(date, '%d/%m/%Y @ %H:%i') AS date_news FROM news WHERE id = '$id_news' AND affichage = '1'");

Peut-être un utilisateur a pour pseudo quelque chose du genre <pseudo/>, et si vous le laisser comme ceci, rien ne va s'afficher. Il vous faut donc coder les informations en html avant de les enregistrer dans la base de données. htmlentities() est la fonction qui permet le codage d'une chaîne en html. Voici comment l'utiliser :

Conseil :
$pseudo = htmlentities($_POST["pseudo"]);
$message = htmlentities($_POST["message"]);

Vous pouvez aussi afficher des smileys dans vos news, pour cela, vous devez vous servir de la fonction str_replace(). Voici comment l'utiliser après la lecture des données dans la base MySQL :

Conseil :
$news["news"] = str_replace(':-)','<img src="smiley/smiley.gif" />',$news["news"]);

 

Conclusion
 

 

Une fois encore, le php nous a montré sa puissance à travers ce script. J'espère qu'à travers ce tutorial, vous avez compris ce qu'est et comment fonctionne un module de news. Alors maintenant, à vos claviers et bonne progr' !! ;-)

 

- Un problème? Posez vos questions sur le forum Php/MySQL!
- Ce tutorial a été consulté 10386 fois
- Afficher ce tutorial au format imprimable


Script Masters © Ce texte est la propriété de son auteur.
Toute reproduction est interdite.

 




 
 
Fabien Daniel - © 2001-2009 | Hebergement : OVH | CNIL : 796128