Comment faire un script de news en PHP

Comme je vous l'ai dit en introduction, le script de news fait partie des scripts PHP les simples à réaliser.
En effet, en y réfléchissant calmement deux minutes, on se rend compte facilement que des news, ce ne sont que des éléments d'une même table que nous affichons les uns en dessous des autres (soit un affichage basique des tuples d'une table MySQL).

Demandons-nous alors quelles sont les informations récurrentes des news que l'on affiche :
  • le nom de l'auteur de la news
  • la date de publication de la news
  • le texte de la news elle-même
  • un identificateur unique (par exemple un champs id de type AUTO_INCREMENT) qui nous permettra de faire la distinction entre toutes les news.


Et cette petite réflexion nous donne alors tous les attributs dont nous allons avoir besoin pour la création de notre table contenant toutes les news.

En effet, la table que nous allons créer pour notre script de news aura la structure suivante :

table_news.sql
CREATE TABLE news (
id int(6) NOT NULL auto_increment,
auteur VARCHAR(30) NOT NULL,
titre text NOT NULL,
date datetime NOT NULL default '0000-00-00 00:00:00',
texte_news text NOT NULL,
PRIMARY KEY (id)
) TYPE=MyISAM;


Enfin, posons nous ensuite la question suivante :

Combien de pages WEB avons-nous besoin pour mettre en place ce script ?

Et bien nous aurons tout simplement besoin de :
  • une page affichant les diverses news (en général il s'agit de la home du site)
  • une page permettant la rédaction de nos news (soit donc une page contenant un formulaire permettant la saisie de ces news)
  • une page insérant les news dans notre base de données


Ce qui nous fait un total de trois pages à écrire.
Ensuite, afin de rendre beaucoup plus convivial notre script, et afin d'améliorer la partie administration de ce script, nous pourrons bien sur réaliser d'autres pages WEB permettant :
  • de modifier une news
  • de supprimer une news


Avant de continuer plus loin le script, nous allons supposer que les news seront affichées sur la page d'accueil de votre site (soit sur la page index.php directement à la racine de votre site).
Ensuite, afin de ne pas trop retoucher le code de votre page index.php (soit la page d'accueil déjà existante de votre site) nous allons placer tout le code permettant d'afficher les news dans une autre page PHP (donc différente de la page d'accueil du site, et que l'on nommera news.php).
Cependant, pas de panique, nous allons quand même pouvoir afficher les news sur la page d'accueil du site via la fonction include() de PHP.

Voyons tout de suite le code de la page news.php :

news.php
<?php
// on se connecte à notre base
$base = mysql_connect ('serveur', 'login', 'password');
mysql_select_db('nom_base', $base);

// lancement de la requête. on sélectionne les news que l'on va ordonner suivant l'ordre "inverse" des dates (de la plus récente à la plus vieille : DESC) tout en ne sélectionnant que le nombre voulu de news à afficher (LIMIT)
$sql = 'SELECT auteur, titre, date, texte_news FROM news ORDER BY date DESC;';

// on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());

// on compte le nombre de news stockées dans la base de données
$nb_news = mysql_num_rows($req);

if ($nb_news == 0) {
echo 'Aucune news enregistrée.';
}
else {
// si on a au moins une news, on l'affiche
while ($data = mysql_fetch_array($req)) {

// on décompose la date
sscanf($data['date'], "%4s-%2s-%2s %2s:%2s:%2s", $an, $mois, $jour, $heure, $min, $sec);

// on affiche les résultats
echo '<br />News de : ' , htmlentities(trim($data['auteur'])) , '<br />';
echo 'Titre : ' , htmlentities(trim($data['titre'])) , '<br />';
echo 'Postée le : ' , $jour , '/' , $mois , '/' , $an , ' à ' , $heure , ':' , $min , ':' , $sec , '<br /><br />';
echo 'News : ' , nl2br(htmlentities(trim($data['texte_news']))) , '<br />';
}
}
// on libère l'espace mémoire alloué à cette requête
mysql_free_result ($req);

// on ferme la connexion à la base de données
mysql_close ();
?>


Et voila :)



Ensuite, en supposant bien que vous ayez appelé cette page news.php et qu'elle se trouve à la racine de votre site WEB, il ne vous restera plus qu'à inclure ce code dans votre page index.php afin que les news apparaissent sur la page d'accueil de votre site.
Pour ce faire, nous allons utiliser la fonction include(), et nous allons la placer (dans la page index.php) à l'endroit exact où vous voulez que les news apparaissent.

Par exemple, on pourrait très bien avoir comme code pour la page index.php :

index.php
<html>
<head>
<title>Index de mon site WEB</title>
</head>
<body>
<!-- code HTML avant l'affiche des news (tout dépend comment est constitué votre site) -->
<?php
// on inclut l'affichage de nos news
include ('news.php');
?>
<!-- code HTML après l'affiche des news (tout dépend comment est constitué votre site) -->
</body>
</html>


Enfin, tout ce qui concerne la partie affichage des news est désormais réglé.
Il ne nous reste plus qu'à écrire notre page nous permettant d'insérer de nouvelles news.

Pour cette page, comme le visiteur n'a pas intérêt à y accéder, nous allons les placer dans un répertoire de votre site WEB (répertoire que vous choisirez vous-même).

Ecrivons alors le code la page nous proposant d'insérer une nouvelle news (la page contenant le formulaire).
Le formulaire de cette page comportera alors un champ texte permettant d'écrire le nom de l'auteur de la news, un second champ texte permettant d'écrire le titre de la news et enfin, une textarea permettant de saisir la news elle-même.

On aura alors, pour la page insert_news.php :

insert_news.php
<?php
// on teste si le formulaire a été validé
if (isset($_POST['go']) && $_POST['go']=='Poster la news') {
// on se connecte à notre base
$base = mysql_connect ('serveur', 'login', 'password');
mysql_select_db('nom_base', $base);

// on teste la déclaration de nos variables
if (!isset($_POST['auteur']) || !isset($_POST['titre']) || !isset($_POST['news'])) {
$erreur = 'Les variables nécessaires au script ne sont pas définies.';
}
else {
if (empty($_POST['auteur']) || empty($_POST['titre']) || empty($_POST['news'])) {
$erreur = 'Au moins un des champs est vide.';
}
// si tout est bon, on peut commencer l'insertion dans la base
else {
// lancement de la requête d'insertion
$sql = 'INSERT INTO news VALUES("", "'.mysql_escape_string($_POST['auteur']).'", "'.mysql_escape_string($_POST['titre']).'", "'.date("Y-m-d H:i:s").'", "'.mysql_escape_string($_POST['news']).'")';

// on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());

// on ferme la connexion à la base de données
mysql_close();

// on redirige vers la page d'accueil du site (attention, cette redirection ne fonctionne qui si vous avez placé cette page dans un répertoire à partir de la racine du site). Si ce n'est pas le cas, veuillez entrer ici le bon chemin d'accès afin de retomber sur la page d'accueil du site.
header('Location: ../index.php');
// on termine le script courant
exit();
}
}
}
?>
<html>
<head>
<title>Insertion d'une nouvelle news</title>
</head>

<body>

<!-- on fait pointer le formulaire vers la page traitant les données -->
<form action="insert_news.php" method="post">
<table>
<tr><td>
[b]Auteur :[/b]
</td><td>
<input type="text" name="auteur" maxlength="30" size="50" value="<?php if (isset($_POST['auteur'])) echo htmlentities(trim($_POST['auteur'])); ?>">
</td></tr><tr><td>
[b]Titre :[/b]
</td><td>
<input type="text" name="titre" maxlength="50" size="50" value="<?php if (isset($_POST['titre'])) echo htmlentities(trim($_POST['titre'])); ?>">
</td></tr><tr><td>
[b]News :[/b]
</td><td>
<textarea name="news" cols="50" rows="10"><?php if (isset($_POST['news'])) echo htmlentities(trim($_POST['news'])); ?></textarea>
</td></tr><tr><td><td align="right">
<input type="submit" name="go" value="Poster la news">
</td></tr></table>
</form>
<?php
// on affiche les erreurs éventuelles
if (isset($erreur)) echo '<br /><br />',$erreur;
?>
</body>
</html>



Enfin :)

Le script de news est à présent plus ou moins achevé.
En effet, je vous laisse le soin de faire vous-même les pages permettant de modifier ou de supprimer une news (ce n'est pas si compliqué que çà, il suffit d'y bien réfléchir sur une feuille de papier avant de se lancer dans une programmation farfelue).

Que faire en plus ?

Pour améliorer le script de news, vous pouvez par exemple l'agrémenter d'un script de gestion de commentaires de news, d'une gestion de simleys ou bien encore d'ajouter à chaque news un petit lien permettant d'envoyer la news à un ami, et ce, par mail.
LoadingChargement en cours