Vote étoile en pdo

speedylo - 8 mars 2015 à 20:17
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 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){

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>';
}
}
$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.';
}

?>

3 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
8 mars 2015 à 20:19
Bonjour


Besoin d'aide ok... mais. ....pour quoi ?
0
rien ne s'affiche je vois par l'erreur une aide serait la bienvenue
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
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.';
	}

?>

0
Rejoignez-nous