mercredi 25 août 2004

Système de news


SYSTÈME DE NEWS

Le système de news est un script très simple à mettre en oeuvre. Il s'agit en fait que d'une table pour la news. Nous avons inclus une référence à la table soussection. Cette référence permet d'afficher la news liée à une section. Par exemple, nous insérons une news relative au Génie logiciel, elle sera affichée sur la page principale du site en plus d'être affichée sur la page de la section Génie logiciel. Si vous ne désirez pas une telle option, il suffit d'enlever la référence à SOU_NOSOUSSECTION dans le code de la table ci-dessus. Si vous désirez de plus amples renseignements sur la table sectio, soussection lisez les autres tutoriels de php.

La table news contient seulement quelques information, si vous désirez ajouter le nom de l'auteur de la news, vous pouvez soit ajouter un champ de type string à la table. Cette façon de faire est simple, mais il y aura de la redondance. Le nom de l'auteur sera inscrit autant de fois qu'il a inscrit de news. Il est préférable de créer une table membre (voir tutoriel forum) et ensuite de faire une référence avec la table news.

DROP TABLE IF EXISTS `news`;
CREATE TABLE `news` (
  `NEW_NONEWS` int(11) NOT NULL auto_increment,
  `SOU_NOSOUSSECTION` int(11) NOT NULL default '0',
  `NEW_TITRE` varchar(120) default NULL,
  `NEW_DATE` date default NULL,
  PRIMARY KEY  (`NEW_NONEWS`),
  KEY `NEW_NONEWS` (`NEW_NONEWS`)
) TYPE=MyISAM AUTO_INCREMENT=39 ;

Le script ci-dessus affiche les news. Seules les 10 dernières nouvelles sont affichées. Ceci afin que la page soit affichée plus rapidement.

function returnnews()
{
  echo '<div id="main"><table class="tab">';
  $requete = mysql_query("SELECT new_titre , new_date, s.sec_nomsection FROM news LIMIT 10");
  if ( mysql_num_rows($requete) != 0 )
  {
    while ($ligne = mysql_fetch_assoc($requete))
    {
      if(''.$ligne['sec_nomsection'].'' != "")
        echo '<tr><td class="newsdate">'.$ligne['new_date'].'</td><td class="newstitre"> '.$ligne['new_titre'].' dans la section '.$ligne['sec_nomsection'].'</td></tr>';
      else
        echo '<tr><td class="newsdate">'.$ligne['new_date'].'</td><td class="newstitre"> '.$ligne['new_titre'].'</td></tr>';
    }
  }
  echo '</table></div><br/>';
}

L'insertion d'une nouvelle est simple, vous devez créer un formulaire. Dans notre cas, nous utilisons une listbox pour afficher les sections ainsi qu'un input pour entrer le texte de la nouvelle.

echo '<br/><div class="titresection">Ajout de new</div>';
  echo'<div id="main">';
  echo'<form id="new" action="ajout" method="post">'; 
  
  //nom de la section et type de la section
  $requete = mysql_query("SELECT sou_nosoussection, ss.sec_nosection, sou_soussection, sec_nomsection from soussection ss inner join section s on s.sec_nosection = ss.sec_nosection"); 
  echo '<div>Nom de la section<br/></div>';
  echo '<div><select name="section">';
  echo '<option value="0" SELECTED>Aucune</option>';
  while ($ligne = mysql_fetch_array($requete)){       
    echo '<option value="'.$ligne["sou_nosoussection"].'">'.$ligne["sec_nomsection"].' - '.$ligne["sou_soussection"].'</option>';
  }
  echo '</select><br/><br/></div>';

  echo "<div>Titre de la new<br/></div>";
  echo '<div><input name="titre" class="txtsub" size="75" maxlength="120"/><br/><br/></div>';  
  echo '<div><input type="hidden" name="form" value="new"/></div>';
  echo '<div><input type="submit" class="butsub" value="Soumettre"/></div>';
  echo '</form>';
  echo'</div>';

Dans la listbox, nous affichons la section ainsi que la sous-section. Par exemple: delphi - tutoriel, delphi - livre, php - tutoriel... Nous avons aussi mis la possibilité de mettre aucune donnée pour cet élément.

Ce cas peut s'avérer utile si vous ajoutez une nouvelle n’ayant aucun lien avec une section. Par exemple un nouveau modérateur, changement de graphisme...
N'oubliez pas de valider vos données avant de les insérer dans la base de données. Voici le code de validation du formulaire qu'on a vue.

function validationnew()
{
  echo '<div class="titresection">Ajout de new</div>';
  echo '<div id="main">';

  if (!empty ($_POST['section']) && !empty ($_POST['titre'])) 
  { 
    mysql_query("INSERT INTO news (new_titre, sou_nosoussection, new_date) VALUES ('" . $_POST['titre'] . "',  '" . $_POST['section'] . "', NOW())");
 
    echo "Merci d'avoir contribué.";
    echo '<br/>La new à été ajouté<br/><br/>';
  }
  else
  {
    echo "La new ne peut être insérée. Un problème a été détecté, il y a soit un champ vide.";
    echo "Veuillez revenir en arrière dans votre navigateur.";
  }
   echo '</div>';
 }