<?php
  | 
/*---------------------------------------------------------------*/
  | 
/*
  | 
    Titre : Sondage complet MySQLi + PHP                                                                                  
  | 
                                                                                                                          
  | 
    URL   : https://phpsources.net/code_s.php?id=207
  | 
    Auteur           : kof_eve                                                                                            
  | 
    Date Ã©dition     : 23 Jan 2007                                                                                        
  | 
    Date mise Ã  jour : 18 Sept 2019                                                                                      
  | 
    Rapport de la maj:                                                                                                    
  | 
    - refactoring du code en PHP 7                                                                                        
  | 
    - fonctionnement du code vérifié                                                                                
  | 
*/
  | 
/*---------------------------------------------------------------*/?>
  | 
  | 
//================= Table ====================
  | 
-- 
  | 
-- Structure de la table `vote`
  | 
-- 
  | 
  | 
CREATE TABLE `vote` (
  | 
  `id` smallint(10) unsigned NOT NULL auto_increment,
  | 
  `titre` tinytext NOT NULL,
  | 
  `reponse` smallint(1) NOT NULL default '0',
  | 
  `ip` varchar(15) NOT NULL default '',
  | 
  `unix` varchar(25) NOT NULL default '',
  | 
  PRIMARY KEY  (`id`)
  | 
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  | 
      
  | 
  | 
//================== Page vote.php  ===================
  | 
  | 
<html>
  | 
<head>
  | 
<title>Sondage</title>
  | 
</head>
  | 
  | 
<body>
  | 
<?php
  | 
    $db_server = 'localhost'; // Adresse du serveur MySQL
  | 
    $db_name = '';            // Nom de la base de données
  | 
    $db_user_login = 'root';  // Nom de l'utilisateur
  | 
    $db_user_pass = '';       // Mot de passe de l'utilisateur
  | 
  | 
    // Ouvre une connexion au serveur MySQL
  | 
    $conn = mysqli_connect($db_server,$db_user_login, $db_user_pass, $db_name);
  | 
  | 
// ip du client
  | 
    if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
  | 
    $ip = $_SERVER['HTTP_CLIENT_IP'];
  | 
    } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
  | 
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
  | 
    } else {
  | 
    $ip = $_SERVER['REMOTE_ADDR'];
  | 
    }
  | 
  | 
$unix = time(); // temps actuel.
  | 
$temps = time()-3600; // le temps y'as maintenant une heure.
  | 
  | 
// on demande a notre table de nous donné tous les ip qui ressemble a l'ip de
  | 
// notre visiteur actuel, et qui ne sont pas
  | 
// daté de plus d'une heure.
  | 
 
  | 
$q = $conn->query("SELECT ip FROM vote WHERE ip='$ip' AND unix > '$temps'");
  | 
  | 
if($q->num_rows > 0){
  | 
// Si oui, ca veut dire que notre visiteur a déjà  voté, on lui affiche
  | 
// alors un
  | 
// message de remerciements, et les résultats.
  | 
  
  | 
  echo 
  | 
'<p style="font-size:20px;text-align:center;color:#660000"><strong>Merci' .
  | 
' d\'avoir voté !</strong></p>';
  | 
  $sql = "SELECT reponse FROM vote WHERE titre='lieu_de_championat'"; 
  | 
//on récupere le résultat des anciens votes.
  | 
  $result = $conn->query($sql);
  | 
  
  | 
  while($resultat = mysqli_fetch_array($result)) {
  | 
    $cadre[] = $resultat['reponse'];  
  | 
//on récupere le résultat de notre requête, et on le stocke dans un
  | 
// tableau.
  | 
  }
  | 
  
  | 
  
  | 
//on stocke le total du vote dans une variable "$totalvote" via la méthode
  | 
// "count" qui parcourt tout notre tableau. 
  | 
  $totalvote= count($cadre); 
  | 
  
  | 
  
  | 
// on stocke le nombre de chaque choix dans un tableau avec la méthode
  | 
// "array_count_values" .. qui retourne par exemple.
  | 
  
  | 
//$array = array(1, "tyty", 1, "slt", "tyty");   array_count_values($array);   
  | 
// retourne array(1=>2, "tyty"=>2, "slt"=>1)
  | 
  $totalreponse = array_count_values($cadre);
  | 
  | 
  
  | 
//Maintenant on calcule le pourcentage de nos votes selon la régle universel
  | 
// pour ca ^^  "p = chifre x 100 / total".
  | 
  
  | 
// pour ca on utilise "bcdiv" qui divise et renvoie le résultat sous forme de
  | 
// chaà®ne de caractères.(en plus qu'on peut la fixé comme ià§i Ã Â  2
  | 
// chiffres après
  | 
// la virgule). sinon on aura parfois des pourcentage genre 65.2323232323% et
  | 
// c'est pas beau >_<
  | 
  
  | 
    $reponse1 = bcdiv($totalreponse[1]*100, $totalvote, 2); 
  | 
    $reponse2 = bcdiv($totalreponse[2]*100, $totalvote, 2);
  | 
    $reponse3 = bcdiv($totalreponse[3]*100, $totalvote, 2);
  | 
    $reponse4 = bcdiv($totalreponse[4]*100, $totalvote, 2);
  | 
  | 
  
  | 
// pour l'affichage on utilise une petite fonction ^^ .. Prenez le temps de la
  | 
// comprendre, c'est facile.
  | 
    
  | 
  function VerifText($text,$valeur,$reponse,$totaldesreponse){  
  | 
      if ($text < '1'){ 
  | 
// on teste si le total des votes est moins qu'un, alors, on n'affiche pas
  | 
// d'image, et on met "0" comme valeur du vote
  | 
        $text1 = '<strong> - '.$valeur.' : </strong>'.$reponse.
  | 
'%      <strong>0</strong> vote.<br />';
  | 
      }
  | 
      if ($text == '1'){ 
  | 
// on teste si le total des votes est Ã©gal a 1, alors, on affiche l'image de
  | 
// la
  | 
// barre avec comme valeur de Width, "la variable du pourcentage", et on met la
  | 
// "valeur du vote".
  | 
        $text1 = '<strong> - '.$valeur.' : </strong>'.$reponse.
  | 
'%   <img src="barre.gif" alt="chargement impossible" height="5" width="'.
  | 
$reponse.'" />   <strong>'.$totaldesreponse.'</strong> vote.<br />';
  | 
      }
  | 
      if ($text > '1'){  
  | 
// on teste si le total des votes est plus grand que 1, alors, on affiche
  | 
// l'image de la barre avec comme valeur de Width, "la variable du pourcentage",
  | 
// et on met la "valeur du vote" avec une "s" a la fin cette fois. c tt
  | 
        $text1 = '<strong> - '.$valeur.' : </strong>'.$reponse.
  | 
'%   <img src="barre.gif" alt="chargement impossible" height="5" width="'.
  | 
$reponse.'" />   <strong>'.$totaldesreponse.'</strong> votes.<br />';
  | 
      } 
  | 
    return $text1;
  | 
  }
  | 
  
  | 
  // la on affiche notre fonction avec ces nouveaux paramètres.
  | 
  
  | 
//VerifText($_variable_du_total_du_vote , 'Valeur a affiché dans notre page'
  | 
// ,
  | 
// $_variable_de_notre_pourcentage , $_variable_du_total_du_vote);
  | 
  //ce qui donne quelque chose comme Ã Â§a.
  | 
  | 
  echo VerifText($totalreponse[1],'valeur 1',$reponse1,$totalreponse[1]).
  | 
VerifText($totalreponse[2],'valeur 2',$reponse2,$totalreponse[2]). VerifText(
  | 
$totalreponse[3],'valeur 3',$reponse3,$totalreponse[3]).VerifText($totalreponse[
  | 
4],'valeur 4',$reponse4,$totalreponse[4]);
  | 
  echo '<strong> Total votes : </strong>'.$totalvote.'<br /><br /><br />';
  | 
  
  | 
// on répète notre fonction n fois nos choix avec une "." Pour la
  | 
// concaténation 
  | 
// , et une autre echo pour le total des votes.
  | 
  | 
  | 
}else{ 
  | 
// Si non, Ã Â§a veut dire que notre visiteur n'as pas encore voté, on lui
  | 
// affiche
  | 
// le formulaire avec les choix.
  | 
  echo 'Quelle Valeur souhaité vous ? <br /><br />';
  | 
  echo 
  | 
'<form method="POST" action="vote.php?vote=ok"><div><input class="zonetext"' .
  | 
' type="radio" value="1" name="choix" /> - Valeur 1<br /><input class="zonetex' 
  | 
.
  | 
't" type="radio" value="2" name="choix" /> - Valeur 2<br /><input class="zonet' 
  | 
.
  | 
'ext" type="radio" value="3" name="choix" /> - Valeur 3<br /><input class="zon' 
  | 
.
  | 
'etext" type="radio" value="4" name="choix" /> - Valeur 4<br /><input class="z' 
  | 
.
  | 
'onetext" type="submit" value=" Ok ! " /></div></form>';      
  | 
      
  | 
}  
  | 
  | 
  | 
// Enregistrement du vote dans la table si le vote est diffèrent de "0" , ce
  | 
// qui
  | 
// veux dire que le gars a validé le formulaire sans prendre un choix.
  | 
// Et si la variable "vote" récupéré par la méthode $_GET et Ã©gal
  | 
// a "ok", ce qui
  | 
// veut dire que c'est le formulaire qui as envoyé cette page, pas un simple
  | 
// lien.
  | 
  | 
  | 
if ($_GET['vote']=='ok' AND $_POST['choix']!=0){
  | 
  $enregistrer = 
  | 
"INSERT vote SET id='', titre='lieu_de_championat', reponse='".$_POST['choix'].
  | 
"', ip='$ip', unix='$unix'";
  | 
  $conn->query($enregistrer);
  | 
  header("Location: vote.php"); // la on ré-actualise notre page..
  | 
}
  | 
  | 
?>
  | 
     </body>
  | 
     </html>
  | 
  | 
 | 
                            
Invité
18 Aout 2020 à 20:43Bonjour Je n'ai pas trouvé le fichier vote.php Merci pour le code
Invité
09 Mai 2014 à 15:09merci pour le code
Invité
20 Fév 2013 à 14:09ou est le fichier vote.php
merci...........
Invité
07 Juil 2012 à 21:02pour apprendre le php c'est super... rien a dire, merci pour ce post !
Invité
22 Sept 2011 à 17:28Bonjour, Ce script je le trouve super, le hic c'est que je l'ai incorporé dans un bout de page php, et quand je vote, il me rouvre une fen^tre avec le vote et me redemande de voter. Sinon tout marche mais je voudrais que le résultat du vote apparaisse de suite, dans mon 'bout de page' ? Merki!!!
Invité
15 Déc 2010 à 17:06je veux je veux ... gonflé le gars
déjà sympa que les gens aident
Invité
01 Déc 2009 à 15:17je veux un exemple d'un formulaire à remplir avec mail, sécurité, et un bouton envoyer.
merci.
Invité
30 Mars 2009 à 18:58Bonjour,
également vous risquez d'avoir une erreur lors de l'envoi et avoir des "Notice: undefined index" pour choix et vote lors de la dernière instruction servant à vérifier que l'utilisateur a fait un choix et a validé correctement.
En fait c'est la même solution que pour le calcul des pour pourcentages. Le _GET et _POST génère ces erreurs. Pour les éviter, remplacer par le code suivant:
if (isset($_GET['vote']) AND isset ($_POST['choix'])){
if ($_GET['vote']= "ok" AND $_POST['choix']!=0){
$enregistrer =
"INSERT sondage SET id='', titre='lieu_de_championat', reponse='$_POST[choix]'," .
" ip='$ip', unix='$unix'";
mysql_query ($enregistrer, $connection);
header("Location: vote.php"); //la on ré-actualise notre page..
}}
Il y a peut-être plus optimum mais celui là marche
Merci pour ce code en effet!!
Invité
01 Déc 2008 à 03:28Voici une variable à déclarer :
$connection = mysql_connect($sql_serveur, $sql_login, $sql_password);
Merci pour ce code :-)
Mrosel
11 Avril 2007 à 11:51rien compris, le script a installer ,il est où?????