Système d'évaluation d'article

Bonjour,

Il y a quelques temps sur la liste certains s'interrogeaient sur la manière
de procéder pour mettre en place un système d'évaluation plus ou moins
similaire à celui qui existe sur les articles de la FAQ de SPIP. N'ayant pas
trouvé trace de réponse sur la liste, j'ai réalisé moi-même un petit système
d'évaluation qui fonctionne correctement.
J'avais en effet besoin de proposer aux visiteurs de mon site d'évaluer les
épreuves contenus dans une rubrique calendrier. Pour chaque épreuve ils
peuvent attribuer au choix 4 notes (5 / 10 /15 /20) pour 5 critères
d'évaluation (accueil / sécurité / parcours / prestations / ambiance). Un
petit tableau récapitulatif donne alors la note moyenne de chacun de ces 5
critères pour chaque épreuve du calendrier. En personnalisant les critères
on peut faire la même chose pour faire évaluer par exemple la pertinence ou
l'intérêt d'un article publié avec SPIP.

Je vous expose rapidement comment j'ai procédé. J'attire toutefois votre
attention sur le fait que n'étant pas un grand connaisseur du PHP, les
"puristes" en la matière risquent de sourire à la vue de mes lignes de
code...

## Etape 1:
On rajoute à sa base de données une table comportant les champs des critères
d'évaluation (accueil / sécurité / parcours / prestations / ambiance) ainsi
que le champs id_epreuve (qui correspondra au N° de l'article SPIP évalué).
On dispose également d'un champs [ip] afin de stocker l'ip des votants.

## Etape 2:
A partir de article.php3 on crée eval.php3

<?php
$fond = "eval";
$delais = 2 * 3600;
include ("inc-public.php3");
?>

et result.php3

<?php
$fond = "result";
$delais = 2 * 3600;
include ("inc-public.php3");
?>

## Etape 3:
On crée le fichier qui va traiter le formulaire d'évaluation
(envoi_eval.php3)

<?php

// On inclut le fichier de configuration avant tout
require ("global_eval.inc.php3");

// On ouvre une connection à notre serveur
mysql_connect("$host","$login","$pass");

// On selectionne notre base de données
mysql_select_db("$base");

// On definit la variable ip adresse
$ip = $REMOTE_ADDR;

// On vérifie l'IP
$sql_ip = "SELECT ip FROM eval_epreuve WHERE id_epreuve='$id_epreuve' AND
ip='$REMOTE_ADDR'";
$result = mysql_query($sql_ip);
$lignes = mysql_num_rows($result);

// si l'ip n'existe pa
if($lignes == 0)
{
// On créé la requête d'insertion dans la table
$sql = "INSERT INTO eval_epreuve
(id_epreuve,securite,accueil,parcours,prestations,ambiance,ip) VALUES
(\"$id_epreuve\",\"$securite\",\"$accueil\",\"$parcours\",\"$prestations\",\
"$ambiance\",\"$ip\")";

// On execute la requête SQL
mysql_query($sql);
print '<div align=center class=texte>Votre vote est pris en compte !</div>';
}
else
{
print '<div align=center class=texte>Vous avez déjà voté !</div>';
}

// On ferme la connection à mysql
mysql_close();

?>

## Etape 4:
On construit les squelettes eval.html et result.html

=> aperçu de eval.html :

<BOUCLE_principale(ARTICLES){id_article}{doublons}>
<br>
<form action="envoi_eval.php3" method="POST" name=Add_eval>
<input type="hidden" name="id_epreuve" value="#ID_ARTICLE">
<!--- suite du formulaire à choix multiples--->
<INPUT type="submit" name="submit" value="valider">
</BOUCLE_principale>

=> aperçu de result.html

<BOUCLE_principale(ARTICLES){id_article}{doublons}>
<?php

// On inclut le fichier de configuration
include ("global_eval.inc.php3");

// On définit le nom de la table
$table = "eval_epreuve";

// On se connect au serveur sql
mysql_connect("$host","$login","$pass");

// On selectionne notre base de données
mysql_select_db("$base");

// On sélectionne la moyenne des 5 critères d'évaluation de l'épreuve active
$requete = "SELECT TRUNCATE (AVG(accueil),1) accueil,
TRUNCATE(AVG(parcours),1) parcours, TRUNCATE(AVG(securite),1) securite,
TRUNCATE(AVG(prestations),1) prestations, TRUNCATE(AVG(ambiance),1) ambiance
FROM eval_epreuve WHERE id_epreuve='#ID_ARTICLE' ";
  $result = mysql_query($requete);
  $article =mysql_fetch_object($result);
  mysql_free_result($result);

// On selectionne le total des votes de l'épreuve active
$sql = "SELECT id_epreuve FROM eval_epreuve where id_epreuve='#ID_ARTICLE'";

$total = mysql_numrows(mysql_query($sql));
?>

<!-- on affiche les résultats avec la mise en page que l'on veut -->
<!-- exemple--->
<table width=99% align=center cellspacing=0 cellpading=2>
<tr>
<td class=texte align=center>
<b><?php echo $total ?> votes</b>
</td>
</tr>
<tr>
<td class=texte_titre_blanc align=center bgcolor=#000040>
  <b>Accueil</b>
</td></tr>
<tr><td class=note align=center bgcolor=#FFFFFF>
  <?php echo $article->accueil ?>
</td></tr>
<tr><td class=texte_titre_blanc align=center bgcolor=#000040>
  <b>Sécurité</b>
</td></tr>
<tr><td class=note align=center bgcolor=#FFFFFF>
  <?php echo $article->securite ?>
</td></tr>
<tr><td class=texte_titre_blanc align=center bgcolor=#000040>
  <b>Parcours</b>
</td></tr>
<tr><td class=note align=center bgcolor=#FFFFFF>
  <?php echo $article->parcours ?>
</td></tr>
<tr><td class=texte_titre_blanc align=center bgcolor=#000040>
  <b>Prestations</b>
</td></tr>
<tr><td class=note align=center bgcolor=#FFFFFF>
  <?php echo $article->prestations ?>
</td></tr>
<tr><td class=texte_titre_blanc align=center bgcolor=#000040>
  <b>Ambiance</b>
</td></tr>
<tr><td class=note align=center bgcolor=#FFFFFF>
  <?php echo $article->ambiance ?>
</td></tr>

<tr><td class=texte align=center>
Note max : 20
</td></tr>
</table>

</BOUCLE_principale>

## Etape 5:
On inclut le tableau des résultats dans article.html à l'emplacement de son
choix

<? include('result.php3?id_article=#ID_ARTICLE&recalcul=oui'); ?>

On met également un lien vers le formulaire d'évalution :
<a href="eval.php3?id_article=#ID_ARTICLE&recalcul=oui"><b>Votez !</b></a>

## Etape 6:
On teste !
=> http://www.cyclosport.com/v2/article.php3?id_article=323&recalcul=oui

J'espère que cela pourra servir à d'autres...

PG