IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Comprend pas! requete qui ne modifie plus la base au bout d'un certain nombre d'essai


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 41
    Par défaut Comprend pas! requete qui ne modifie plus la base au bout d'un certain nombre d'essai
    Bonjour,

    j'ai une fonction qui marche très bien, jusqu'à un certain nombre d'exécution,
    tout d'abord voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    	$pseudo="admin";
    	$sql = "SELECT C.Case FROM COMPTE C WHERE C.Pseudo = '".addslashes($pseudo)."'";
    	$req = mysql_query($sql) or die('Erreur SQL : <br />'.$sql);
     
    	if (mysql_num_rows($req) > 0) {
    		$data = mysql_fetch_assoc($req);
    		$caseJoueur =  $data['Case'];
    	}
     
    	// Si c'est un changement de case 
    	if(isset ($_GET['NvelleCase'])){  
     
    		$NewCase=$_GET['NvelleCase'];
    		$caseJoueur = $NewCase;
    		$sql = "UPDATE COMPTE C SET C.Case=$NewCase WHERE Pseudo = '".$pseudo."'";
    		$req = mysql_query($sql) or die('Erreur SQL : <br />'.$sql);
    		echo "vérification execution";
     
    	}
    Donc en fait, ce code est utilisé lors d'un changement de case sur une map,
    j'effectue plusieurs déplacement, tout marche bien, sauf qu'au bout d'un moment la requete UPDATE ne marche plus, il n'y a pas d'erreur d'execution mais dans la base de donnée la valeur de la case n'est plus modifiée!!! pourtant ça a marché plein de fois! donc je disais au bout d'un moment sa ne marche plus, ou alors ça marche de temps en temps après de nombreux déplacement...

    j'ai ajouté "echo "vérification execution";" pour vérifier que le code à bien été exécuté, c'est le cas à chaque déplacement, mais c'est comme si la requete avait échouée...

    Je ne comprend pas du tout là!!!!

    Une idée??? Merci d'avance

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 344
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 344
    Billets dans le blog
    17
    Par défaut
    Ce que je ferais à ta place :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if(isset ($_GET['NvelleCase'])){  
        $NewCase=$_GET['NvelleCase'];
        $caseJoueur = $NewCase;
        $sql = "UPDATE COMPTE C SET C.Case=$NewCase WHERE Pseudo = '".$pseudo."'";
        $req = mysql_query($sql) or die('Erreur SQL : <br />'.$sql);
        echo 'sql[', $sql, ']erreur[', mysql_error( ), ']n°[', mysql_errno( ), ']' ;
    }
    Simplifie également ta requête en :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "UPDATE COMPTE SET Case=$NewCase WHERE Pseudo = '$pseudo'";
    Sinon tu utilises quelle version de MySQL ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 41
    Par défaut
    Ok j'ai simplifié sauf pour le "C." il ne marche pas sans...,
    par contre ton code m'affiche ça :

    sql[UPDATE COMPTE C SET C.Case=9 WHERE Pseudo = 'admin']erreur[]n�[0]


    et sinon j'ai testé le retour de la requête par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $req = mysql_query($sql) or die('Erreur SQL : <br />'.$sql);
    if ($req) { echo "update fait"; }
    et il me dit bien que l'update a réussi, et pourtant quand je vérifie dans la base la valeur n'a pas changé. Pourtant quand je me déplace sur la carte au début ça marche bien, dans la base sql la valeur est bien changé, et puis à un moment ça commence à déconner, et la valeur de la change ne change que de temps en temps... vraiment bizarre! (j'ai aussi vérifié qu'il avait bien la bonne valeur de la case dans la requête)


  4. #4
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Par défaut
    Tu utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    or die(mysql_error());
    L'erreur devrait déjà être plus clair

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 41
    Par défaut
    Ok j'ai modifié, mais sinon y'a pas d'erreur
    et il me dit bien que l'update a reussi à chaque changement de case, mais desfois la base de données n'est pas modifié... ça dépend quand

  6. #6
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Par défaut
    Hum Hum, embêtant
    Repasse ton code tout modifié STP

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 39
    Par défaut
    Apparemment, la requête SQL est toujours syntaxiquement bonne puisque mysql_query n'échoue jamais. Peut-être que sa sémantique dévie avec le temps ?
    Je pense que tu peux regarder si ta requête agit en utilisant la fonction mysql_affected_rows, qui renvoie le nombre d'enregistrements affectés par ta requête. À priori, il doit toujours valoir 1. S'il vaut 0, c'est le début de ton bug.
    Enfin, je constate que tu utilises addslashes($pseudo) pour le SELECT et $pseudo pour l'UPDATE. Est-ce que tu utilises toujours "admin" comme pseudo ? Est-ce que le pseudo que tu utilises comporte des quotes ou backslashs ?

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 41
    Par défaut
    Je vais tester avec mysql_affected_rows.

    Pour le pseudo, comme je débute la création du site, temporairement je n'utilise que ce pseudo, qui s'ecrit tout simplement "admin"

    le "addslashes" j'ai oublié de l'enlever, ça vient d'une morceau de code d'un autre site que j'avais fait.

    Ma version de MySql : 4.1.9

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 41
    Par défaut


    Merci beaucoup!!!
    En effet ça marche mieux maintenant
    Je vais étudier ça! Merci encore pour le temps consacré à mon problème


    EDIT :

    Sur internet j'ai vu une "solution" qui permet d'interdire la mise en cache de la page, avec ces balises à mettre dans le header :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 
    <META HTTP-EQUIV="Expires" CONTENT="-1">
    Mais ça ne marche pas, je l'ai ai mise dans index.php,
    je me demandais si ce'est parce que l'adresse concerné est : map.php?case=numCase et non index.php ?
    mais map.php n'étant qu'un morceau de index.php, il n'a pas de header ni rien...
    Je cherche

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 39
    Par défaut
    C'est bien ta page map.php qui doit contenir ce genre d'instructions, car c'est elle qui est rechargée (par XHR) et mise en cache par le navigateur. Mais comme elle n'a pas d'en-tête HTML et que les navigateurs ne sont pas tenus de respecter les diverses <meta>, essaye :
    dans map.php.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 41
    Par défaut
    Warning: Cannot modify header information - headers already sent by (output started at c:\progs\easyphp1-8\www\index.php:7) in c:\progs\easyphp1-8\www\map.php on line 1

    Pas encore ça

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 39
    Par défaut
    Ah oui, c'est vrai qu'au début, tu l'includes ; tu te retrouves alors avec une instruction header() après avoir écrit du texte, ce qui ne va pas.
    Je te propose la petite bidouille suivante : dans index.php, avant l'include, mets une petite variable $mettre_headers = true;.
    Dans map.php, rajoute if (isset($mettre_headers)) devant ton instruction header().
    Ça permettra de n'exécuter l'instruction header() que lorsque la page est appelée par XHR.

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 41
    Par défaut
    Toujours le même message d'erreur

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/09/2010, 00h02
  2. Requete qui ne marche plus avec firebird 2.5
    Par dehorter olivier dans le forum SQL
    Réponses: 6
    Dernier message: 17/04/2010, 13h46
  3. Réponses: 16
    Dernier message: 25/03/2010, 10h09
  4. Réponses: 1
    Dernier message: 07/08/2008, 10h36
  5. (UNION) Requete qui ne fonctionne plus avec mysql4
    Par kreatik dans le forum Requêtes
    Réponses: 0
    Dernier message: 13/11/2007, 13h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo