Systeme de vote par jour en php et PDO

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Systeme de vote par jour en php et PDO

Re: Systeme de vote par jour en php et PDO

par ISoon » 07 mars 2014, 13:29

salut,

Je ne sais pas qu'elle est la ligne 22 mais en tous cas celles ci ne présente pas une requête SQL valide :
il manque la parenthèse fermante.
 SELECT COUNT(*) AS nb_occurences FROM vote1 WHERE IP = :ip AND  date_passage >= (NOW() - INTERVAL 1 DAY
la c'est c'est extrême revoie la syntaxe de l'insert ;)
<?php
  $req2 = $bdd->prepare( ' INSERT INTO vote1 (idduel, date_passage) VALUES ,:idduel ,:ip, NOW()' );
peux être que si tu nous indique la ligne 22 (l'execute ?) ce serait plus simple.


vu la connexion ($bdd = new PDO('mysql:host=localhost;dbname=TBP', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));) je t'invite à utiliser, aussi, un try / catch pour le reste du code histoire d'avoir un message d'erreur plus correct.

@+
Merci pour votre réponse,

Voici la ligne 22 :
$req->execute();
J'ai corrigées les erreurs et voici le message de ma page :
Erreur : SQLSTATE[HY000] [2002] No such file or directory
Merci

Re: Systeme de vote par jour en php et PDO

par moogli » 05 mars 2014, 23:28

salut,

Je ne sais pas qu'elle est la ligne 22 mais en tous cas celles ci ne présente pas une requête SQL valide :
il manque la parenthèse fermante.
 SELECT COUNT(*) AS nb_occurences FROM vote1 WHERE IP = :ip AND  date_passage >= (NOW() - INTERVAL 1 DAY
la c'est c'est extrême revoie la syntaxe de l'insert ;)
<?php
  $req2 = $bdd->prepare( ' INSERT INTO vote1 (idduel, date_passage) VALUES ,:idduel ,:ip, NOW()' );
peux être que si tu nous indique la ligne 22 (l'execute ?) ce serait plus simple.


vu la connexion ($bdd = new PDO('mysql:host=localhost;dbname=TBP', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));) je t'invite à utiliser, aussi, un try / catch pour le reste du code histoire d'avoir un message d'erreur plus correct.

@+

Systeme de vote par jour en php et PDO

par ISoon » 05 mars 2014, 22:08

Bonsoir,

Donc voilà, je fais un site en php et j'aimerais faire un systeme de vote avec 1 vote par jour par ip

Voici mon code :
<?php
session_start();
$id = htmlspecialchars(intval($_GET['id']));


try
{
    $bdd = new PDO('mysql:host=localhost;dbname=TBP', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
catch (Exception $e)
{
        die('Erreur : ' . $e->getMessage());
}
 
 
  
$ip = $_SERVER['REMOTE_ADDR'];
$idduel = $id;
  
$req = $bdd->prepare( ' SELECT COUNT(*) AS nb_occurences FROM vote1 WHERE IP = :ip AND  date_passage >= (NOW() - INTERVAL 1 DAY') ;
$req->bindValue(':ip',$ip, PDO::PARAM_STR);
$req->execute();
$donnees = $req->fetch();
  
if($donnees['nb_occurences'] == 0)
{
    // cette ip ne s'est pas connectée ces dernières 24h
    // on l'insère en BDD
    $req2 = $bdd->prepare( ' INSERT INTO vote1 (idduel, date_passage) VALUES ,:idduel ,:ip, NOW()' );
    $req2->bindValue(':ip',$ip, PDO::PARAM_STR);
    $req2->execute();
    $req2->closeCursor();
    // et on affiche le lien
    echo '<a href = "acceuil.php">Lien</a>';
}
else
{
    echo 'Rien...'; // le membre s'est connecté il y a moins de 24 heures, on n'affiche rien
}
$req->closeCursor();
 
?>
Mais voici mon erreur qui s'affiche :
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1' in C:\xampp\htdocs\TBP\test\vote1.php:22 Stack trace: #0 C:\xampp\htdocs\TBP\test\vote1.php(22): PDOStatement->execute() #1 {main} thrown in C:\xampp\htdocs\TBP\test\vote1.php on line 22
Voici la table vote1 :

Image

Merci beaucoup