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

Langage PHP Discussion :

Problèmes d'interrogation SQL et de boucle


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 306
    Points : 106
    Points
    106
    Par défaut Problèmes d'interrogation SQL et de boucle
    Bonjour,

    Je dois créer un script de gestion.
    Dès le départ de gros problèmes se posent...
    J'ai actuellement 2 utilisateurs enregistrés en base de données, il est censé recuperer les id de rayons (id_rayon) dont les différentes personnes sont responsables.

    Le script me renvoi uniquement les rayons d'un membre (pas de l'autre) , de plus le dernier id_rayon enregistré en base n'est pas renvoyé.

    Voici le script :
    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
    $sql = "SELECT pseudo FROM membres WHERE etat_compte = 'actif'";
    $stmt = $dbh->prepare($sql);
    $stmt->execute();
    $nbre_membres = $stmt->rowCount();
     
    while($row = $stmt->fetch(PDO::FETCH_NUM))
    	{
    	$pseudo[] = $row[0];	
    	}
    //Correspond a deux utilisateurs
     
    foreach($pseudo as $key => $pseudo2)
    	{
    	//Doit renvoyer la liste des id_rayon des utilisateurs les uns après les autres	
    	$sql = "SELECT id_rayon, remplissage_rayon FROM dispose_rayons WHERE pseudo_membre = :pseudo";
    	$stmt = $dbh->prepare($sql);
    	$stmt->BindParam(':pseudo', $pseudo2);
    	$stmt->execute();
    	while($row = $stmt->fetch(PDO::FETCH_NUM))
    		{			
    		$id_rayon[] = $row[0];
    		$remplissage_rayon[] = $row[1];
    		}	
     
     
    	print($id_rayon[$key]."<br />");
    	}
    si quelqu'un pouvait m'aider pour que le script recupère d'abord tous les rayons d'un utilisateur puis au second tour de bouche tous les rayons du second (si troisième utilisateur il y a au 3ième tour de boucle tous les rayons du 3ième utilisateur etc...)

    Merci d'avance.
    Cordialement,

  2. #2
    Membre expérimenté
    Avatar de Mahefasoa
    Homme Profil pro
    Manager IT
    Inscrit en
    Octobre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Manager IT

    Informations forums :
    Inscription : Octobre 2003
    Messages : 835
    Points : 1 664
    Points
    1 664
    Par défaut Tableau or not
    Bonjour,

    Et comme ceci, cela ne fonctionnerait pas?
    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
    <?php
        $sql = "SELECT pseudo FROM membres WHERE etat_compte = 'actif'";
        $stmt = $dbh->prepare($sql);
        $stmt->execute();
        $nbre_membres = $stmt->rowCount();
     
        while($row = $stmt->fetch(PDO::FETCH_NUM))
        {
            $pseudo[] = $row[0];    
            //Doit renvoyer la liste des id_rayon des utilisateurs les uns après les autres    
            $sql = "SELECT id_rayon, remplissage_rayon FROM dispose_rayons WHERE pseudo_membre = '".$row[0]."' LIMIT 1";
            $stmt_rayon = $dbh->prepare($sql);
            $stmt_rayon->execute();
            while($row_rayon = $stmt_rayon->fetch(PDO::FETCH_NUM))
            {            
                $id_rayon[] = $row_rayon[0];
                $remplissage_rayon[] = $row_rayon[1];
            }    
        }
        echo '<pre>';
        print_r($id_rayon);
        echo '</pre>';
    ?>
    En espérant de t'avoir aidé.
    Bien cordialement,

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 306
    Points : 106
    Points
    106
    Par défaut
    re Bonjour,

    Mahefosa, ta réponse ne m'aide pas.
    En pièce jointe le MLD de la base de données.

    Mon script doit en d'abord interroger table1 pour recuperer la liste des pseudos dont l'état compte est actif, puis, interroger table2 en vue de recuperer tous les remplissage du premier pseudo renvoyé par ma première requete, au second tour de boucle il doit recuperer la liste remplissage du second pseudo enregistré, en 3 le troisième pseudo etc...

    Pour le moment, j'ai réussi à coder le script ci-dessous, seul problème il ne boucle que sur le premier pseudo du tableau... (Si par exemple la première requete SQL recupere 5 pseudos (titi, tata, tutu, toto, pepe) il va à l'aide du seconde interro recuperer uniquement "titi" mais aucun des autres....)

    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
    $sql = "SELECT pseudo FROM table1 WHERE etat_compte = 'actif'";
    $stmt = $dbh->prepare($sql);
    $stmt->execute();
     
    while($row = $stmt->fetch(PDO::FETCH_ASSOC))
    	{
    	foreach($row as $key => $value)
    		{
    		$sql = "SELECT id_rayon, remplissage FROM table2 WHERE pseudo_membre = :value";
    		$stmt = $dbh->prepare($sql);
    		$stmt->BindParam(':value', $value);
    		$stmt->execute();
     
    		while($row = $stmt->fetch(PDO::FETCH_ASSOC))
    			{
    			$id_rayon[] = $row['id_rayon'];
                                          $remplissage = $row['remplissage']
     
    			print("Traitement : ". $row['id_rayon'] ."<br />");
    			}
    		}	
    	}
    En espérant que quelqu'un arrive à trouver la solution au problème
    cordialement,
    Images attachées Images attachées  

  4. #4
    Membre expérimenté
    Avatar de Mahefasoa
    Homme Profil pro
    Manager IT
    Inscrit en
    Octobre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Manager IT

    Informations forums :
    Inscription : Octobre 2003
    Messages : 835
    Points : 1 664
    Points
    1 664
    Par défaut
    Et comme suit?

    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
    <?php
        $sql = "SELECT pseudo FROM table1 WHERE etat_compte = 'actif'";
        $stmt = $dbh->prepare($sql);
        $stmt->execute();
     
        while($row = $stmt->fetch(PDO::FETCH_ASSOC))
        {
            $sql = "SELECT id_rayon, remplissage FROM table2 WHERE pseudo_membre = :value";
            $stmt = $dbh->prepare($sql);
            $stmt->BindParam(':value', $row['pseudo']);
            $stmt->execute();
     
            while($row_table2 = $stmt->fetch(PDO::FETCH_ASSOC))
            {
                $id_rayon[] = $row_table2['id_rayon'];
                $remplissage = $row_table2['remplissage']
                print("Traitement : ". $row_table2['id_rayon'] ."<br />");
            }
        }
    ?>

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 306
    Points : 106
    Points
    106
    Par défaut
    Re

    Merci pour ton devouement.
    Pareil, le script ne boucle que sur le premier membre, pas les autres.


  6. #6
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    bonjour,

    id_rayon n'existe pas dans la vue des tables que tu fournies dans le dernier script. L'erreur ne viendrait pas de là ?

    sinon il faut prendre l'habitude d'afficher les résultats de tes requêtes pour déboguer, et le cas échéant, copier/coller la requête dans phpMyAdmin ou autre afin de vérifier l'intégrité de celle-ci.

    exemple :
    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
     
    $sql = "SELECT id_rayon, remplissage FROM table2 WHERE pseudo_membre = :value";
    $stmt = $dbh->prepare($sql);
    $stmt->BindParam(':value', $value);
    $stmt->execute();
     
    $stmt->debugDumpParams(); // affiche les détails de la requête
     
    while($row = $stmt->fetch(PDO::FETCH_ASSOC))
    {
    ...
    // affiche le résultat des enregistrements retournés
    echo "<pre>";
    print_r($row);
    echo "</pre>";
    ....
    }

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 306
    Points : 106
    Points
    106
    Par défaut
    Re bonjour,

    Pour les curieux, la solution a mon problème est la suivante (pour le moment ca fonctionne en tout cas...)

    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
    $sql = "SELECT pseudo FROM table1 WHERE etat_compte = 'actif'";
    $stmt = $dbh->prepare($sql);
    $stmt->execute();
     
    while($row = $stmt->fetch(PDO::FETCH_ASSOC))
    	{
    	$pseudo[] = $row['pseudo'];
    	}
     
    for($i = 0; $i<count($pseudo); $i++)
    	{
    	$sql = "SELECT id_rayon FROM table2 WHERE pseudo_membre = :value";
    	$stmt = $dbh->prepare($sql);
    	$stmt->BindParam(':value', $pseudo[$i]);
    	$stmt->execute();	
     
    	while($row = $stmt->fetch(PDO::FETCH_ASSOC))
    		{
    		print("id du rayon ".$row['id_rayon']." Chef : ".$pseudo[$i]."<br />");
    		}
     
    	}

  8. #8
    Membre expérimenté
    Avatar de Mahefasoa
    Homme Profil pro
    Manager IT
    Inscrit en
    Octobre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Manager IT

    Informations forums :
    Inscription : Octobre 2003
    Messages : 835
    Points : 1 664
    Points
    1 664
    Par défaut
    Est-ce que toutes les lignes respectent ce critère?
    Si oui, il n'y a pas de raison que les autres ne s'affichent pas

Discussions similaires

  1. problème d'exécution sql dans une boucle
    Par zerros dans le forum SGBD
    Réponses: 3
    Dernier message: 16/01/2013, 15h15
  2. problème avec une simple interrogation sql
    Par scofild20 dans le forum SQL
    Réponses: 8
    Dernier message: 30/04/2009, 21h52
  3. Problème de requête SQL dans une boucle While
    Par Astraya dans le forum VB.NET
    Réponses: 3
    Dernier message: 21/01/2009, 17h18
  4. [MySQL] Problème de SQL dans une boucle
    Par Bozomobile dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 01/11/2008, 20h17
  5. [SQL] Problème d'interrogation de la base de donées
    Par zoukinette76 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 11/11/2007, 14h59

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