<?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ù?????