Actualisation page lors d'un update

Eléphant du PHP | 68 Messages

26 avr. 2009, 09:05

Bonjour à tous,

J'ai un petit problème avec ce bout de code. Lorsque la condition est remplie, la base de données se met à jour correctement mais ma page est automatiquement actualisée à la fin de la requête. De ce fait, le message Bravo, un code... n'apparaît jamais!


Code : Tout sélectionner

$sql = "SELECT SUM(clic) as nb FROM ptc_controle WHERE login='$emailutil' AND clic='1'"; $req=mysql_query($sql) or die(mysql_error()); $data=mysql_fetch_array($req); $nbc=$data['nb']; //on va vérifier si la condition est remplie if ($nbc>=18) {//on met à jour la table !!!C'est cette requête qui pose problème !!!!!!!!!!!!!!!!!!!!!!! $sql = "UPDATE ptc_controle SET clic=2,hconversion=NOW() WHERE login='$emailutil' AND clic=1 LIMIT $ptc_nbclic"; $req = mysql_query($sql) or die(mysql_error()); echo "Bravo, un code de $ptc_cadeau points de fidélité vient de vous être envoyé, $ptc_nbclic clics ont été retirés de votre cagnotte.<br>"; } echo 'Votre cagnotte PTC contient actuellement <b>'.$nbc.'</b> clic(s). Dès que votre cagnotte contiendra '.$ptc_nbclic.' clics, vous recevrez un code de '.$ptc_cadeau.' points de fidélité.<br>';
Mais si je remplace ma deuxième requête par

Code : Tout sélectionner

$sql = "UPDATE ptc_controle SET clic=1,hconversion=NOW() WHERE login='$emailutil' AND clic=1 LIMIT $ptc_nbclic";
Tout fonctionne à la perfection, la requête est effectuée et la boucle se termine avec l'affichage du message (bien sûr, cela ne sert à rien mais si ça peut servir à comprendre le problème)

Un grand merci pour votre aide

PS: Table avec Mysql de structure
CREATE TABLE ptc_controle (
login varchar(50) NOT NULL default '',
ip varchar(25) NOT NULL default '',
idpub int(11) NOT NULL default '0',
gain float(11,6) NOT NULL default '0.000000',
clic varchar(4) NOT NULL default '0',
hverif datetime NOT NULL default '0000-00-00 00:00:00',
hconversion datetime NOT NULL default '0000-00-00 00:00:00'
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

26 avr. 2009, 14:22

[...] ma page est automatiquement actualisée à la fin de la requête.
Bonjour,

Il n'y a rien dans ton code qui demande un rafraichissement de ta page.
Après ta ligne echo "Bravo...", ajoute ceci:
die();
Ainsi tu es sûr que plus aucun code ne s'exécutera :)
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 68 Messages

26 avr. 2009, 14:32

Merci pour ton aide mais même un die() n'arrange pas mon problème :shock:

J'avais déjà essayé cela pour voir où le problème survenait.

Il semble que dès que le script effectue la requête, dès que celle-ci est terminée, il actualise la page... :shock: :shock: :shock:

De plus, j'ai encore du code (pied de page) à effectuer après l'affichage du Bravo :wink:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

26 avr. 2009, 14:49

Il semble que dès que le script effectue la requête, dès que celle-ci est terminée, il actualise la page... :shock: :shock: :shock:
Ce n'est techniquement pas possible vu que la requête s'exécute côté serveur et le rafraichissement côté client.

Par conséquent, reprend ton code à tête reposée et recherche d'où vient le rafraichissement... quelques pistes pour chercher:
1) désactive le javascript (par exemple avec l'extension Firefox WebDeveloper)
2) désactive antivirus, firewall, antipub
3) si le problème persiste, mets juste le code qui pose problème dans une page vierge de tout autre code pour voir si cela se produit encore
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 68 Messages

26 avr. 2009, 14:58

Je viens de tester, le code fonctionne parfaitement sous IE mais bug sous Firefox.

Ce que je ne m'explique pas en effet, c'est que cette requête s'effectue sur le serveur et non pas côté client et devrait donc totalement indépendante du navigateur.

Pourquoi si je remplace le SET clic='2' par SET clic='1' cela ne bug plus?

Cela peut-il être un bug de Firefox? Comment pouvoir expliquer cela?

Tu parles du firewall, antivirus,...etc, quelle piste envisageais-tu pour proposer cela?

Un grand merci pour tes réponses

PS: Problème que j'avais déjà rencontré à d'autres reprises et que j'avais réussi à contourner; mais ici pas moyen de contourner cette requête...