speedylo
-
8 mars 2015 à 20:17
jordane45
Messages postés38145Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention25 avril 2024
-
9 mars 2015 à 22:26
Bonjour,
j'aurais besoins d'une petite aide pour une script vote en pdo svp?
<?PHP // On se connecte à MySQL $user = 'root'; $pass = ''; $base = 'rec'; try { $dns = 'mysql:host=localhost;dbname='.$base.''; // Options de connection $options = array( PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8", PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ); $connection = new PDO( $dns, $user , $pass, $options ); } catch ( Exception $e ) { echo "Connection à MySQL impossible : ", $e->getMessage(); die(); }
//Retourne la vrai adresse IP function get_ip() { return (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR']; } $ip = get_ip(); //Ip utilisateur $ip_vote = getIp();
//Fonction pour la notation function notation($id_vote,$ip_vote){
//L'utilisateur a t'il déjà voté? // Controle du nom dans la basse de donnée $deja_voter = $connection->prepare('SELECT ip_vote FROM note WHERE ip=:ip AND id_page=:id_page'); $deja_voter->execute(array(':ip'=> $ip_vote,':id_page'=>$ip_vote)); $nb_resultat_vote = $deja_voter->fetch(); //L'utilisateur n'a pas voté, on montre le formulaire if(!$nb_resultat_vote == 0){
//Si action de valider et que la note est différent de vide if(isset($_POST['note']) && $_POST['note'] != NULL){ //On vérifie si le cookie existe et si tel est le cas, c'est que l'utilisateur tente de voter plusieurs fois if(isset($_COOKIE["deja_voter"]) && $_COOKIE["deja_voter"] == $id_vote){ die ("Un seul vote autorisé ... merci!"); } //Note de l'utilisateur $note = $_POST['note']; //Insertion en BDD
//On créer un cookie d'une durée de 20 secondes pour éviter les retours en arrière setcookie('deja_voter',$id_vote,(time() + 20));
echo 'Merci d\'avoir noté cet article!<br/> Chargement en cours <img alt="Loading" src="images-vote/loading.gif" style="width:32px;height:32px;"/> <script type="text/javascript"> document.getElementById("monform").innerHTML = ""; window.setTimeout(function(){self.location.href="'.$_SERVER['REQUEST_URI'].'";},3000); </script>'; } } $nombre_vote = $connection->prepare('SELECT vote_id FROM note WHERE id_page=:id_vote'); $nombre_vote->execute(array(':id_vote'=> $id_vote)); $total_vote = $nombre_vote->fetch(); //L'utilisateur n'a pas voté, on montre le formulaire if($total_vote != 0){ //Combien d'utilisateurs ont votés? echo 'Nombre de vote : '.$total_vote.'<br/>'; }
$calcul_vote = $connection->prepare('SELECT SUM(note) AS totalmoyenne FROM note WHERE id_page=:id_vote'); $calcul_vote->execute(array(':id_vote'=> $id_vote)); $total_vote = $calcul_vote->fetch(); $total_calcul_vote = $total_vote['totalmoyenne']; if($total_calcul_vote != 0){ echo 'Total des votes : '.$total_calcul_vote.'<br/>'; }
//Moyenne des votes des utilisateurs if($total_vote != NULL && $total_calcul_vote != NULL){ $moyenne = number_format($total_calcul_vote/$total_vote, 2, ',', ''); //Si les 2 chiffres après la virgule sont 2 zéros, on les suppriment pour obtenir un entier echo 'Note : '.str_replace(',00','',$moyenne).'/10'; //On affiche les étoiles for($i=1; $i<=$moyenne;$i++){ echo '<img alt="'.$i.'" src="images/etoile.png" style="width:32px;height:32px;"/>'; } } else{ echo 'Aucun vote pour le moment.'; }
jordane45
Messages postés38145Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention25 avril 2024344 9 mars 2015 à 22:26
Bonjour,
testes ceci :
<?php
//-------------------------------------------------------------------------//
// Le temps des tests :
//-------------------------------------------------------------------------//
// Reporte toutes les erreurs PHP (Voir l'historique des modifications)
error_reporting(E_ALL);
//------------------------------------------------------------------------//
// CONNEXION A LA BDD
//-----------------------------------------------------------------------//
// On se connecte à MySQL
$user = 'root';
$pass = '';
$base = 'rec';
try {
$dns = 'mysql:host=localhost;dbname='.$base.'';
// Options de connection
$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);
$connection = new PDO( $dns, $user , $pass, $options );
} catch ( Exception $e ) {
echo "Connection à MySQL impossible : ", $e->getMessage();
die();
}
//------------------------------------------------------------------------//
// FONCTIONS
//-----------------------------------------------------------------------//
//Retourne la vrai adresse IP
function get_ip() {
return (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];
}
//Fonction pour la notation
function notation($id_vote,$ip_vote){
//L'utilisateur a t'il déjà voté?
// Controle du nom dans la basse de donnée
$deja_voter = $connection->prepare('SELECT ip_vote FROM note WHERE ip=:ip AND id_page=:id_page');
$deja_voter->execute(array(':ip'=> $ip_vote,':id_page'=>$ip_vote));
$nb_resultat_vote = $deja_voter->fetch();
//L'utilisateur n'a pas voté, on montre le formulaire
if(!$nb_resultat_vote == 0){
echo '<form name="monform" id="monform" method="post">
<label>Noter cet article</label>
<select name="note" onchange="javascript:submit(this)">
<option value="">Note</option>
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
</select>
</form>';
}
//Si action de valider et que la note est différent de vide
if(isset($_POST['note']) && $_POST['note'] != NULL){
//On vérifie si le cookie existe et si tel est le cas, c'est que l'utilisateur tente de voter plusieurs fois
if(isset($_COOKIE["deja_voter"]) && $_COOKIE["deja_voter"] == $id_vote){
die ("Un seul vote autorisé ... merci!");
}
//Note de l'utilisateur
$note = $_POST['note'];
//Insertion en BDD
$note=array( ':id_vote'=> $id_vote,':note'=>$note,':ip_vote'=> $ip_vote);
$values= join(', ',array_keys($note));
$req=$connection->prepare( 'INSERT INTO note ('.str_replace(':','',$values).') VALUES('.$values.')' );
$req->execute($note);
//On créer un cookie d'une durée de 20 secondes pour éviter les retours en arrière
setcookie('deja_voter',$id_vote,(time() + 20));
echo 'Merci d\'avoir noté cet article!<br/>
Chargement en cours <img alt="Loading" src="images-vote/loading.gif" style="width:32px;height:32px;"/>
<script type="text/javascript">
document.getElementById("monform").innerHTML = "";
window.setTimeout(function(){self.location.href="'.$_SERVER['REQUEST_URI'].'";},3000);
</script>';
}
}// Fin de la fonction notation
//------------------------------------------------------------------------//
// Début du programme :
//-----------------------------------------------------------------------//
$ip = get_ip();
//Ip utilisateur
$ip_vote = getIp();
$nombre_vote = $connection->prepare('SELECT vote_id FROM note WHERE id_page=:id_vote');
$nombre_vote->execute(array(':id_vote'=> $id_vote));
$total_vote = $nombre_vote->fetch();
//L'utilisateur n'a pas voté, on montre le formulaire
if($total_vote != 0){
//Combien d'utilisateurs ont votés?
echo 'Nombre de vote : '.$total_vote.'<br/>';
}
$calcul_vote = $connection->prepare('SELECT SUM(note) AS totalmoyenne FROM note WHERE id_page=:id_vote');
$calcul_vote->execute(array(':id_vote'=> $id_vote));
$total_vote = $calcul_vote->fetch();
$total_calcul_vote = $total_vote['totalmoyenne'];
if($total_calcul_vote != 0){
echo 'Total des votes : '.$total_calcul_vote.'<br/>';
}
//Moyenne des votes des utilisateurs
if($total_vote != NULL && $total_calcul_vote != NULL){
$moyenne = number_format($total_calcul_vote/$total_vote, 2, ',', '');
//Si les 2 chiffres après la virgule sont 2 zéros, on les suppriment pour obtenir un entier
echo 'Note : '.str_replace(',00','',$moyenne).'/10';
//On affiche les étoiles
for($i=1; $i<=$moyenne;$i++){
echo '<img alt="'.$i.'" src="images/etoile.png" style="width:32px;height:32px;"/>';
}
}else{
echo 'Aucun vote pour le moment.';
}
?>