Bonjour,
Je suis un peu largué sur les nouveautés de spip. Existe t'il un systeme
de vote ? J'en ai fabriqué un mais il me manque un critère que je vais
chercher dans les scripts de visite. C'est "on ne clique qu'une fois".
$ mysqldump -u spip-admin --password=*******(secret) spip poll
-- MySQL dump 9.09
--
-- Host: localhost Database: spip
---------------------------------------------------------
-- Server version 4.0.15
--
-- Table structure for table `poll`
--
CREATE TABLE poll (
poll_id bigint(20) NOT NULL auto_increment,
poll_active set('o','n') NOT NULL default 'o',
poll_name varchar(32) NOT NULL default '',
poll_desc text NOT NULL,
poll_choices text NOT NULL,
poll_result text NOT NULL,
PRIMARY KEY (poll_id),
UNIQUE KEY poll_name (poll_name)
) TYPE=MyISAM;
--
-- Dumping data for table `poll`
--
INSERT INTO poll VALUES (1,'o','test','Quelle est votre couleur préferée ?','rouge;noir;bleu','2;1;3');
INSERT INTO poll VALUES (2,'n','linux','','bien;pas bien','0;0');
il suffit d'inclure le script par:
<INCLURE(poll.php3)>
lequel est:
<?php
if($action==""){
if($poll_choice==""){
$query = "SELECT * FROM poll WHERE 1 AND poll_active='o'";
$result=spip_query($query);
$row=spip_fetch_array($result);
echo $row['poll_desc']."<br>";
$tmp_choice=split(";",$row['poll_choices']);
$nbre_choice=count($tmp_choice);
echo "<form method=get action=$PHP_SELF name=poll>";
echo "<input type=hidden name=poll_id value=".$row['poll_id'].">";
for($i=0;$i<$nbre_choice;$i++){
echo "<input name=poll_choice value=$i type=radio>".$tmp_choice[$i]."<br>";
}
if($id_rubrique){
echo "<input type=hidden name=id_rubrique value=$id_rubrique>";
}
if($id_article){
echo "<input type=hidden name=id_article value=$id_article>";
}
echo "<input type=submit></form>";
}else{
echo "Merci de votre contribution<br>";
$query="SELECT * FROM poll WHERE 1 AND poll_id=$poll_id";
$result=spip_query($query);
$row=spip_fetch_array($result);
echo "A la question <b>".$row['poll_desc']."</b>, vous avez répondu:<br>";
$tmp_choice=split(";",$row['poll_choices']);
$tmp_field=split(";",$row['poll_result']);
$ancien=$tmp_field[$poll_choice];
$nouveau=( $ancien + 1 );
$tmp_field[$poll_choice]=$nouveau;
$result_field="";
for($i=0;$i<( count($tmp_field) - 1 );$i++){
$text_poll[$i]=$tmp_choice[$i];
$result_field.=$tmp_field[$i].";";
$display_result[$i]=$tmp_field[$i];
}
$text_poll[$i]=$tmp_choice[$i];
$result_field.=$tmp_field[$i];
$display_result[$i]=$tmp_field[$i];
$query="UPDATE poll SET poll_result='$result_field' WHERE poll_id=$poll_id";
$result=spip_query($query);
$result_max=max($display_result);
$result_min=min($display_result);
for($i=0;$i<(count($display_result));$i++){
$result_value=(( $display_result[$i] * 100 ) / $result_max );
echo $text_poll[$i]."(".$display_result[$i].") <img src=images/red.jpg height=2 width=$result_value><br>";
}
echo "<a href=$PHP_SELF?$QUERY_STRING&action=view>voir les autres votes</a>";
}
}else{
if($action=="view"){
$query="SELECT * FROM poll";
$result=spip_query($query);
while($row=spip_fetch_array($result)){
echo $row['poll_id']."-".$row['poll_name']."-".$row['poll_desc']."<br>";
}
}
}
Je vous l'ai copié tel quel, sans commentaires. Sinon, il s'agit de
trouver un vote dont le champs qui représente son activité est à 'o', de
placer le contenu du champs de ce qu'il faut voter dans un tableau à
partir de valeurs séparées par des point-virgules, construire des
boutons radio à partir de ces valeurs, à l'enregistrement, lire le
contenu des résultats précédents, le "désérialiser", ajouter le vote à
la valeur correspondante, "reserialiser" ces résultats et les replacer
dans le champ des résultats. Il me reste à afficher les résultats sous
la forme de barres rouges en face des chiffres sur le choix de "voir les
autres votes", faire choisir avec un <select...> et comme je vous le
disais, trouver le moyen de ne cliquer qu'une fois. Peux pas vous
montrer l'url, c'est derrière la dmz.
Gilles