Double enregistrement pour 1 requette...
Résolu
Sébastien724
-
Sébastien724 -
Sébastien724 -
Bonjour,
Voilà je suis entrain de faire un script de ticket à gratter avec limitation de participation à 3 par jour/par membre
J'enregistre les infos de participations dans ma base.
Je m'y prends comme ceci :
1. Je vérifie si le joueur qui tente de charger la page n'a pas déjà gratter ses 3 tickets
- Si il les a gratté, redirection vers page l'informant qu'il n'a plus de ticket
sinon
2. Au chargement de la page du ticket à gratter, j'enregistre la participation du joueur
Le joueur peut jouer
Une fois qu'il valide son ticket (par clic bannière)
Cela déclenche l'envoi du formulaire de participation qui met à jour la base en ajoutant le gain
et en créditant le compte du membre du gain tiré au hasard.
Jusqu'à là tout est super
Seul problème, au chargement de la page, il m'enregistre 2 fois la participation pour le même membre...
Je vous expose mon code car je vois pas où est le problème :(
Code du script PHP :
Merci de m'aider si vous voyez une anomalie !
Voilà je suis entrain de faire un script de ticket à gratter avec limitation de participation à 3 par jour/par membre
J'enregistre les infos de participations dans ma base.
Je m'y prends comme ceci :
1. Je vérifie si le joueur qui tente de charger la page n'a pas déjà gratter ses 3 tickets
- Si il les a gratté, redirection vers page l'informant qu'il n'a plus de ticket
sinon
2. Au chargement de la page du ticket à gratter, j'enregistre la participation du joueur
Le joueur peut jouer
Une fois qu'il valide son ticket (par clic bannière)
Cela déclenche l'envoi du formulaire de participation qui met à jour la base en ajoutant le gain
et en créditant le compte du membre du gain tiré au hasard.
Jusqu'à là tout est super
Seul problème, au chargement de la page, il m'enregistre 2 fois la participation pour le même membre...
Je vous expose mon code car je vois pas où est le problème :(
Code du script PHP :
<?php session_start(); //Ticket à gratter include ("inc/dbconnect.php"); $date_jour = date ("d/m/Y"); $ip = $_SERVER['REMOTE_ADDR']; //On verifie $sql = "SELECT count(*) FROM cf_grattage WHERE id_membre='".$_SESSION['idmembre']."' AND date = '".$date_jour."'"; $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql1.'<br />'.mysql_error()); if (mysql_num_rows($req)>3) { die ("Désolé mais vous n'avez plus de tickets pour aujourd'hui.<br><br><a href='compte.php'>Cliquez-ici</a> pour retourner à votre compte !"); exit(); } else { session_start(); include ("inc/dbconnect.php"); //Dès le chargement de la page on enregistre la participation $sql = "INSERT INTO cf_grattage (id_membre, date, gain, ip) VALUES ('".$_SESSION['idmembre']."', '".$date_jour."', '', '".$ip."')"; $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); } if (isset($_POST['participation']) && $_POST['participation'] == "oui") { include ("inc/dbconnect.php"); //On met à jour ! $sql = "UPDATE cf_grattage SET gain = '".$_POST['gain']."' WHERE id_membre='".$_POST['idmembre']."'"; $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); //Mise à jour solde membre $sql = "UPDATE cf_solde_membre SET solde = solde + '".$_POST['gain']."' WHERE id_membre = '".$_POST['idmembre']."'"; $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); //Ajout table historique rémunération $sql = "INSERT INTO cf_historique_remuneration (id_membre, programme, date, gain, etat) VALUES ('".$_POST['idmembre']."', 'Ticket à gratter', '".$_POST['date']."', '".$_POST['gain']."', 'Validé')"; $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); $message = $_POST['gain']." ont été crédités sur votre compte !"; } ?>
Merci de m'aider si vous voyez une anomalie !
A voir également:
- Double enregistrement pour 1 requette...
- Double ecran - Guide
- Whatsapp double sim - Guide
- Double driver - Télécharger - Pilotes & Matériel
- Double appel - Guide
- Double boot - Guide
14 réponses
je ne sais pas si ça vient de là mais tu as 2 fois session_start()
et au moins 3 fois include ("inc/dbconnect.php");
et au moins 3 fois include ("inc/dbconnect.php");
Merci de ta réponse Alain, mais non ce n'est pas à cause de ça.
J'avais déjà essayé sans les include mais erreur connexion mysql
et sans les sessions mais ça fait toujours le même problème :=(
J'avais déjà essayé sans les include mais erreur connexion mysql
et sans les sessions mais ça fait toujours le même problème :=(
<?php //Ticket à gratter session_start(); include ("inc/dbconnect.php"); $date_jour = date ("d/m/Y"); $ip = $_SERVER['REMOTE_ADDR']; //On verifie $sql = "SELECT count(*) FROM cf_grattage WHERE id_membre='".$_SESSION['idmembre']."' AND date = '".$date_jour."'"; $req = query_or_die($sql); if (mysql_num_rows($req)>3) { die ("Désolé mais vous n'avez plus de tickets pour aujourd'hui.<br><br><a href='compte.php'>Cliquez-ici</a> pour retourner à votre compte !"); exit(); } elseif (isset($_POST['participation']) && $_POST['participation'] == "oui") { //Dès le chargement de la page on enregistre la participation $sql = "INSERT INTO cf_grattage (id_membre, date, gain, ip) VALUES ('".$_SESSION['idmembre']."', '".$date_jour."', '', '".$ip."')"; $req = query_or_die($sql); //On met à jour ! $sql = "UPDATE cf_grattage SET gain = '".$_POST['gain']."' WHERE id_membre='".$_POST['idmembre']."'"; $req = query_or_die($sql); //Mise à jour solde membre $sql = "UPDATE cf_solde_membre SET solde = solde + '".$_POST['gain']."' WHERE id_membre = '".$_POST['idmembre']."'"; $req = query_or_die($sql); //Ajout table historique rémunération $sql = "INSERT INTO cf_historique_remuneration (id_membre, programme, date, gain, etat) VALUES ('".$_POST['idmembre']."', 'Ticket à gratter', '".$_POST['date']."', '".$_POST['gain']."', 'Validé')"; $req = query_or_die($sql); $message = $_POST['gain']." ont été crédités sur votre compte !"; } function query_or_die($sql) { return mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); } ?>
c'est pas mieux comme ca ?
n'utilise les variables $_POST directement dans tes requetes sans en avoir controlé le contenu !
utilise impérativement la fonction addslashes()
Merci desg pour ton code, cependant j'avais fait ce code au début avant que mon problème arrive.
Oui tout marche comme mon script de départ
Mais tu remarques que la participation s'enregistrera uniquement que si le membre valide le formulaire de participation
si il gratte, vois que c'est perdant et ne valide pas le formulaire mais recharge la page, bah il pourra gagner autant qu'il veut, puisqu'il choisira les tickets à valider et ceux à ne pas valider...
Oui tout marche comme mon script de départ
Mais tu remarques que la participation s'enregistrera uniquement que si le membre valide le formulaire de participation
si il gratte, vois que c'est perdant et ne valide pas le formulaire mais recharge la page, bah il pourra gagner autant qu'il veut, puisqu'il choisira les tickets à valider et ceux à ne pas valider...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
PS :
Je précise que c'est un ticket à gratter des plus basic écrit en javascript et pas en flash... donc pas pareille :s
Je précise que c'est un ticket à gratter des plus basic écrit en javascript et pas en flash... donc pas pareille :s
ok je n'avais pas vu cela comme ca
ta requete
$sql = "UPDATE cf_grattage SET gain = '".$_POST['gain']."' WHERE id_membre='".$_POST['idmembre']."'";
met a jour tout les gain du meme joueur !!
donc cela pose probleme :)
il te faut savoir quelle ligne de la table mettre a jour :)
ta requete
$sql = "UPDATE cf_grattage SET gain = '".$_POST['gain']."' WHERE id_membre='".$_POST['idmembre']."'";
met a jour tout les gain du meme joueur !!
donc cela pose probleme :)
il te faut savoir quelle ligne de la table mettre a jour :)
[...] elseif (isset($_POST['participation']) && $_POST['participation'] == "oui") { //Dès le chargement de la page on enregistre la participation $sql = "INSERT INTO cf_grattage (id_membre, date, gain, ip) VALUES ('".$_SESSION['idmembre']."', '".$date_jour."', '', '".$ip."')"; $req = query_or_die($sql); $idgrattage = mysql_insert_id(); //<< j'ai récupéré l'id du dernier enregistrement et je le retrouve //On met à jour ! $sql = "UPDATE cf_grattage SET gain = '".$_POST['gain']."' WHERE id_membre='".$_POST['idmembre']."' AND idgrattage='".$idgrattage."'"; //<< ici pour savoir ce que je met à jour ! $req = query_or_die($sql); [...]
voilà j'ai changé un peu, je vais tester pour voir
par contre pas compris par rapport à $_POST, comment on peut mettre ce qu'on veut :-/
les données sont envoyées par le naviguateur donc modifiable par l'utilisateur, on trouve des addons par exemple pour modifier les données envoyées via les formulaires sur firefox.
ca peut aussi aider à tester ses scripts ;)
ca peut aussi aider à tester ses scripts ;)
stock ca dans la sessions, c'est stocké coté serveur et presque transparent
essaye ca:
dans un fichier session_1.php
session_start();
$_SESSION['pwet]='coucout';
dans un fichier session_2.php
session_start();
echo $_SESSION['pwet];
tu devrais voir un jolie coucou !
la variable est transmise sans passer par le navigateur ;)
ca marche avec un identifiant de session transmis avec les cookies ou passer dans l'url, le serveur s'occupe de tout tu as juste à utiliser le code comme ca ;)
essaye ca:
dans un fichier session_1.php
session_start();
$_SESSION['pwet]='coucout';
dans un fichier session_2.php
session_start();
echo $_SESSION['pwet];
tu devrais voir un jolie coucou !
la variable est transmise sans passer par le navigateur ;)
ca marche avec un identifiant de session transmis avec les cookies ou passer dans l'url, le serveur s'occupe de tout tu as juste à utiliser le code comme ca ;)
Ok je vais faire comme ça alors, merci
Cependant mon problème de départ ne bouge pas xD enfin bon
mais quant à la sécurité je vais m'y mettre ;-)
Cependant mon problème de départ ne bouge pas xD enfin bon
mais quant à la sécurité je vais m'y mettre ;-)
regarde si tu ne charge pas la page 2 fois sans t'en rendre compte, avec une redirection ou quelques chose comme ca
met un die() a la fin de ton code pour le stoper, et et regarde combien de participation que tu as
met un die() a la fin de ton code pour le stoper, et et regarde combien de participation que tu as
oui enfin dès le chargement de la page
dès que j'enlève ce code ou que je le met dans la condition elseif... soumission du formulaire
bah plus rien s'enregistre dans la base
donc le problème viens de ce bout de code, mais il me semble correct...
moi je veux enregistrer la participation au chargement de la page, pour que le membre ne puisse pas choisir les ticket à valider, puis ensuite après validation, mettre à jour la base !
//Dès le chargement de la page on enregistre la participation $sql = "INSERT INTO cf_grattage (id_membre, date, gain, ip) VALUES ('".$_SESSION['idmembre']."', '".$date_jour."', '0', '".$ip."')"; $req = query_or_die($sql);
dès que j'enlève ce code ou que je le met dans la condition elseif... soumission du formulaire
bah plus rien s'enregistre dans la base
donc le problème viens de ce bout de code, mais il me semble correct...
moi je veux enregistrer la participation au chargement de la page, pour que le membre ne puisse pas choisir les ticket à valider, puis ensuite après validation, mettre à jour la base !
Je viens de faire un exit(); juste après
$sql = "INSERT INTO cf_grattage (id_membre, date, gain, ip) VALUES ('".$_SESSION['idmembre']."', '".$date_jour."', '0', '".$ip."')";
$req = query_or_die($sql);
et là miracle la page reste blanche et dans ma base qu'un seul enregistrement :-D, mais d'où cela peut il venir ??
c'est à dire que ma page se charge deux fois ??
$sql = "INSERT INTO cf_grattage (id_membre, date, gain, ip) VALUES ('".$_SESSION['idmembre']."', '".$date_jour."', '0', '".$ip."')";
$req = query_or_die($sql);
et là miracle la page reste blanche et dans ma base qu'un seul enregistrement :-D, mais d'où cela peut il venir ??
c'est à dire que ma page se charge deux fois ??
Après plusieurs heures passé sur ce script, j'ai enfin trouvé
dans ma page footer.php
après la balise html, j'avais un include d'une page externe pour compter mes stats... c'est cette include qui fouter le caca pour être poli =)
en tout cas merci de m'avoir aider à chercher et surtout sur l'astuce avec les sessions plutôt que les $_post
dans ma page footer.php
après la balise html, j'avais un include d'une page externe pour compter mes stats... c'est cette include qui fouter le caca pour être poli =)
en tout cas merci de m'avoir aider à chercher et surtout sur l'astuce avec les sessions plutôt que les $_post