TUTORIEL PHP 
Un gestionnaire de liens à base de mots-clefs en PHP
Un script complet reprenant l'idée popularisée par le site del.icio.us pour mieux gérer ses favoris. (26/02/2005)
<< 1. Présentation et mise en place
2. Fonctionnement (1) | 3. Fonctionnement (2)

Le fonctionnement (suite et fin)
Notre code HTML de base n'englobe qu'un appel de fonction, <?=affichage();?>. Cette fonction se présente comme suit :

function affichage() {
  if (
    (isset($_REQUEST['creer']) && $_REQUEST['creer'] == 'oui')
    && (isset($_REQUEST['url']) && !empty($_REQUEST['url']) )
    && (isset($_REQUEST['titre']) && !empty($_REQUEST['titre']) )
    && (isset($_REQUEST['desc']) )
    && (isset($_REQUEST['mots']) && !empty($_REQUEST['mots']) )
    ) {
    enregistrerUrl($_REQUEST['url'], $_REQUEST['titre'], $_REQUEST['desc'], $_REQUEST['mots']);
    afficherLiens();
    }
  elseif (isset($_REQUEST['m']) && !empty($_REQUEST['m']) ) {
    afficherLiensPourMot($_REQUEST['m']);
    }
  else {
    afficherFormulaire();
    afficherLiens();
    }
  }

Le premier if() permet de tester si toutes les variables envoyées par le formulaire sont en place, auquel cas nous pouvons en déduire que l'utilisateur l'a rempli et validé, et qu'il convient donc de placer ces informations dans la base. Cela se fera au moyen d'une fonction enregistrerUrl(), qui prend en compte tous les arguments.

Si ces variables ne sont pas en place, deux solutions : soit l'utilisateur souhaite afficher les liens attachés à un mot-clef (repérable par l'usage de la variable "m"), soit il veut afficher tous les liens de la base. Les fonctions afficherLiensPourMot() et afficherLiens() servent à cela, la seconde étant appelée par défaut (par exemple, au premier chargement de la page), avec le formulaire.

Voyons les fonctions dans l'ordre. enregistrerUrl() contient des appels SQL des plus classiques :

function enregistrerUrl($url, $titre, $desc, $mots) {
  $date = date("Y-m-d h:i:s");
  $req = "INSERT INTO delicieux (id, url, titre, description, mots, datation) ";
  $req .= "VALUES ('', '$url', '$titre', '$desc', '$mots', '$date');";

  if (mysql_query($req))
    {
    ?>Lien correctement ajouté. <a href="index.php">En ajouter un autre</a>.<?
    }
  else
    {
    ?>Raté!<?
    }
  }


Très classique : nous mettons les données du formulaire dans la base. Les données ne sont pas réellement testées ni vérifiées, mais ce n'est pas le but de cet article (lisez pour cela "PHP : Se protéger contre les attaques CSRF").

afficherLiens() est déjà plus intéressante :

function afficherLiens() {
  $req = 'SELECT * FROM delicieux ';
  $req.= 'WHERE 1 GROUP BY datation DESC;';

  $res = mysql_query($req);
  echo '<div class="liens">';
  afficherMots();
  while ($row = mysql_fetch_array($res)) {
    echo "<p><a href='$row[1]'>$row[2]</a><br/>";
    echo !empty($row[3]) ? $row[3].'<br/>':null;
    echo "<small>dans " . separerMots($row[4]) . ", le $row[5]</small></p>";
    }
  echo '</div>';
  }

Dans une balise div (ce qui nous permettra de mettre l'affichage en page via CSS), nous affichons les liens contenus dans la base. Le but étant de rendre les mots-clefs cliquables, nous traitons la chaîne de mots tirés de la base via la fonction separerMots(), qui se chargera de créer les liens, afin de parvenir à ce résultat :

PHP : foreach()
Youhouh, foreach(), de la balle!
dans php foreach code ref , le 2005-02-24 03:18:03

Voici cette fonction :

function separerMots($chaine) {
  $liens = '';
  $mots = explode(' ', $chaine);
  foreach ($mots as $mot) {
    $liens .= "<a href='index.php?m=$mot'>$mot</a> ";
    }
  return $liens;
  }

  Forum

Réagissez dans les forums de JDN Développeurs

Comme vous pouvez le voir, c'est en fait très simple : d'une chaîne contenant des mots-clefs séparés par un espace, nous tirons un tableau dont chaque ligne contient un mot-clef. Il ne nous reste ensuite qu'à afficher ces mots-clefs entourés d'une balise de liaison, et chaque mot-clef affiché aura pour action un lien vers sa propre catégorie.
Nous utilisons un lien brut, index.php?m=$mot. Il suffirait de créer un fichier .htaccess faisant usage de mod_rewrite pour rendre les URLs beaucoup plus lisibles, par exemple mot/$mot.

<< 1. Présentation et mise en place
2. Fonctionnement (1) | 3. Fonctionnement (2)
 
Xavier Borderie, JDN Développeurs
 
Accueil | Haut de page
 
 





Quand achetez-vous le plus en ligne ?
Du lundi au vendredi
Le samedi
Le dimanche

Tous les sondages