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 :

Requête qui fonctionne à moitié


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 18
    Points : 11
    Points
    11
    Par défaut Requête qui fonctionne à moitié
    Je m'explique, en gros si le joueur n'existe pas on le crée en insérant une ligne dans la table. Pour ce faire je vérifie si le joueur est bien présent dans la table.

    Et si le joueur existe je vérifie que son nombre de connexion est inférieur à 3, si c'est le cas alors j'update la ligne du joueur.

    Le problème j'ai l'impression que ma ligne ne s'update pas vu que la date et l'heure ne changent pas. Ensuite j'ai l'impression que j'insère ma ligne avec un UPDATE. Bref très bizarre. Quelqu'un remarque t'il une erreur?


    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    <?php
    	$joueur = $_POST['Joueur'];
    	$ID_Jeu = $_POST['ID_Jeu'];
    	$nbConnexion = $_POST['nbConnexion'];
     
    	// on se connecte à MySQL
    	$db = mysql_connect('localhost','root','mysql');
     
    	// on sélectionne la base
    	mysql_select_db('TEST',$db);
     
    	// on vérifie l'existance du joueur dans la base
    	$sql = "SELECT Joueur FROM participation WHERE Joueur='".$joueur."'";
    	$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
     
    	$data = mysql_fetch_assoc($req);
     
    	// si le joueur existe
    	if($data['Joueur'] == $joueur) {
    		echo 'update ligne joueur';
    		$sql = "SELECT nbConnexion FROM participation WHERE Joueur='".$joueur."' AND ID_Jeu='".$ID_Jeu."'" ;
    		$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
     
    		$data = mysql_fetch_assoc($req);
     
    		if($data['nbConnexion'] > 3) {
    			echo 'close database';
    			// on ferme la connexion à mysql
    			mysql_close($db);	
    		}
    		else {
    			// on crée la requête SQL
    			echo 'UPDATE JOUEUR';
    			$sql = "UPDATE particpation SET nbConnexion = '".$nbConnexion."', Date_Particpation = NOW() WHERE Joueur ='".$joueur."'";
     
    			// on envoie la requête
    			$req = mysql_query($sql);
    		}
     
    	}
    	else {
    		echo 'insertion ligne joueur';
    		$sql = "INSERT INTO participation (Joueur, ID_Jeu, Date_Participation, nbConnexion, Number_Play_Total) VALUES ('".$joueur."', '".$ID_Jeu."', NOW(),'".$nbConnexion."', '1')";
    		$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());	
    	}
     
    	// on ferme la connexion à mysql
    	mysql_close($db);
    ?>

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Qu'obtiens-tu au niveau de tes echos ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    en faite je ne passe jamais dans l'echo qui dit insertion ligne joueur...

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Que renvoi ton $_POST['Joueur'] dans le cas ou le joueur n'existe pas ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    mon $_POST['Joueur'] renvoie forcément quelques choses car le joueur est logué avant d'acceder ici. Mais c'est après je vérifie s'il est déjà dans la base de données ou pas. S'il y est je fait un UPDATE sinon un insert le problème ca me fait que UPDATE. Je ne rentre jamais dans INSERT.

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    et bien debug pas a pas : que renvoit ta premiere requete select dans ce cas ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre éprouvé Avatar de fenkys
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 376
    Points : 1 054
    Points
    1 054
    Par défaut
    Si tu n'as pas de joueur correspondant dans la base de données, $data n'est pas défini et $data['joueur'] non plus. Le test d'égalité peut donner n'importe quoi.

    La bonne méthode aurait été :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if (data = mysql_fetch_assoc($req))
    {
      // traitement si le joueur a été trouvé
      ...
    }
    else
    {
      // traitement si le joueur n'a pas été trouvé
      ...
    }
    Par ailleur, tu fait un select pour effectuer un update conditionnel. Tu as plus efficace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    echo 'update ligne joueur';
    $sql = "UPDATE particpation 
            SET nbConnexion = nbConnexion+1,
               date_Particpation = NOW() 
            WHERE Joueur ='".$joueur."' 
              AND nbConnexion < 3 
              AND ID_jeu='".$id_jeu."'";
     
    // on envoie la requête
    $req = mysql_query($sql);
    C'est plus court et plus fiable. Dans ta version, rien n'interdit en effet que la base de donnée soit modifié entre le select et l'update (un joueur peut très bien ouvrir la même page simultanément dans deux fenêtre de son navigateur), avec celle que je donne ce genre de problème n'est pas possible puisque la vérification s'effectue dans l'update.

Discussions similaires

  1. [MySQL] Requête qui fonctionne à moitié
    Par Sladix dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 14/09/2009, 14h21
  2. Réponses: 5
    Dernier message: 26/08/2009, 15h40
  3. Requête qui fonctionne sous Access mais pas JDBC
    Par loic911 dans le forum JDBC
    Réponses: 1
    Dernier message: 12/09/2008, 16h46
  4. Réponses: 1
    Dernier message: 03/08/2007, 10h09
  5. Requête qui fonctionne 1 fois sur 100
    Par nicotine002 dans le forum Langage
    Réponses: 1
    Dernier message: 05/08/2006, 11h42

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