<?php
/*------------------------------*/
/*
Titre : Sondage complet MySQLi + PHP
Auteur : kof_eve
Date édition : 23 Jan 2007
Date mise a 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);
$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 Août 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ù?????