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 :

Besoin d'aide pour faire une boucle


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 81
    Points : 35
    Points
    35
    Par défaut Besoin d'aide pour faire une boucle
    Bonjour,
    Grâce à ce forum et aux différents tutos, mon projet avance bien.
    Toutes fois j'ai encore une question à vous poser :p

    Dans ma table de rendez vous, j'indique un Id client.
    Mais lorsque je présente les rendez vous, dans un tableau, pour le moment cela affiche l'id du client.
    J'aimerais afficher le nom du client à la place de son Id dans le tableau tout en gardant l'id dans la table.

    Voici mon script en cours :

    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
     
    <?php
    ////////////////////////////////////////////////////////////////
    //Calcul du nbre de rendez vous le jour en cours.
    // définir le jour en cours.
    $jour = date('Y-m-d');
     
    // sélectionner les rdv.
    $totalrdv=mysql_query('SELECT COUNT(*) AS total FROM rdv_date WHERE date="'.$jour.'"'); 
    $donnees_totalrdv=mysql_fetch_assoc($totalrdv); 
    $totalrdv=$donnees_totalrdv['total']; 
     
    echo 'Rendez vous aujourdhui : '.$totalrdv.'<br>';
    echo '<a href="clients.php?action=consulter_rdv&condition=cejour"> Afficher les rendez vous de ce jour </a><br>';
     
    ///////////////////////////////////////////////
    // Fonction d'affichage de tous les rendezvous
    ///////////////////////////////////////////////
    if (isset($_POST['id'])) afficher_rdv($_POST['id']);
    $retour_total=mysql_query('SELECT COUNT(*) AS total FROM rdv_date'); 
    $donnees_total=mysql_fetch_assoc($retour_total); 
    $total=$donnees_total['total']; 
    $messagesParPage=10; 
    $nombreDePages=ceil($total/$messagesParPage);
     
    if(isset($_GET['page'])) // Si la variable $_GET['page'] existe...
    {
         $pageActuelle=intval($_GET['page']);
         if($pageActuelle>$nombreDePages) // Si la valeur de $pageActuelle (le numéro de la page) est plus grande que $nombreDePages...
         {
              $pageActuelle=$nombreDePages;
         }
    }
     
    else // Sinon
    {
         $pageActuelle=1; // La page actuelle est la n°1    
    }
     
    //Fonction de calcul pour la pagination.
    $premiereEntree=($pageActuelle-1)*$messagesParPage; // On calcul la première entrée à lire
     
    //Listing des conditions //
    if ((empty($_GET["condition"])))
            {
                    $select = 'SELECT 
                    id,
                    date,
                    collaborateur,
                    duree,
                    texte,
                    client,
                    heure,
                    raison,
                    magasin
                    FROM rdv_date ORDER BY date DESC LIMIT '.$premiereEntree.', '.$messagesParPage.'';
                    $result = mysql_query($select) or die ('Erreur : '.mysql_error() );
                    $total = mysql_num_rows($result);
                    echo 'pas d\'options de tri sélectionnée';   
     
            }
     
    // si on a récupéré un résultat on l'affiche.
    if($total) {
        // debut du tableau
        echo '<table width="700" class="client" border="0" cellspacing="0" cellpadding="0">'."\n";
            // première ligne on affiche les titres prénom et surnom dans 2 colonnes
            echo '<tr class="toprow">';
                    echo '<td class="toprow"><b><u>DATE</u>
                    <a href="clients.php?action=consulter_rdv&condition=dateasc"> + </a></b> -----
                    <a href="clients.php?action=consulter_rdv&condition=datedesc"> - </a> </td>';
            echo '<td class="toprow"><b><u>Heure</u></b> - </td>';
            echo '<td class="toprow"><b><u>Nom</u></b> - </td>';
            echo '<td class="toprow"><b><u>Raison</u></b> - </td>';
            echo '<td class="toprow"><b><u>texte</u></b> - </td>';
                    echo '<td class="toprow"><b><u>modif</u></b> - </td>';
                    echo '<td class="toprow"><b><u>consult</u></b> - </td>';
            echo '</tr>'."\n";
        // lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne.    
     
    while($row = mysql_fetch_array($result)) 
            {
     
                    while($row2 = mysql_fetch_array($result)) 
                    {       
                            //$idclient=1387;
                            $idclient=$row2["client"];
     
                            $requetteclient=mysql_query('SELECT nom FROM clients WHERE id='.$idclient.';')
                            or die('<span style="color:#F00;">Erreur lors d\'une requette MYSQL !<br />
                            <img src="imgs/messagebox_critical.png" alt="ERREUR" />
                            l\'erreur s\'est produite à la ligne : <u>'.__LINE__.'</u>, dans le fichier <u>"'.
                            __FILE__.'"</u>.</span><br />'.mysql_error());
     
                    $dataclient=mysql_fetch_array($requetteclient);
                    }               
     
     
            echo '<tr>';
            echo '<td class="leftcol"><div class="intro">'.$row["date"].'</div></td>';
            echo '<td class="data"><div class="intro">'.$row["heure"].'</div></td>';
            echo '<td class="data"><div class="intro">'.$row["client"].' '.$dataclient['nom'].' '.$dataclient['prenom'].'</div></td>';
            echo '<td class="data"><div class="intro">'.$row["raison"].'</div></td>';
                    echo '<td class="data"><div class="intro">'.$row["texte"].'</div></td>';
                    echo '<td class="data"><div class="intro"><a href="clients.php?action=modifier_clients&id='.$row["id"].'">Modifier</a>';
                    echo '<td class="data"><div class="intro"><a href="clients.php?action=consulter_rdv&id='.$row["id"].'">Consulter</a>';
            echo '</tr>'."\n";
        }
     
        echo '</table>'."\n";
            echo '' . $total .' rendez vous sur cette page.';
        // fin du tableau.
     
    echo '<p align="center">Page : '; //Pour l'affichage, on centre la liste des pages
    for($i=1; $i<=$nombreDePages; $i++) //On fait notre boucle
    {
         //On va faire notre condition
         if($i==$pageActuelle) //Si il s'agit de la page actuelle...
         {
             echo ' [ '.$i.' ] '; 
         }  
         else //Sinon...
         {
    echo ' <a href="clients.php?action=consulter_rdv&page='.$i.'">'.$i.'</a> ';
         }
    }
    echo '</p>';
     
    }
    else echo 'Pas d\'enregistrements dans cette table...';
     
     
     
    // on libère le résultat
    mysql_free_result($result);
     
    ?>        
    </td>
    </tr>
    <tr>
    <td></td>
     
    </form>
    La 2eme boucle permets de voir la requete SQL mais ca ne fonctionne pas du tout en fait.
    C'est comme si l'id client n'était pas récupéré.

    Est ce que quelqu'un pourrais me donner un coup de pouce s'il vous plait ?
    Merci par avance,

    Marc

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 57
    Points : 50
    Points
    50
    Par défaut
    Salut Plex,
    pour voir ta requête il suffit de faire un print :
    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
    while($row = mysql_fetch_array($result)) 
            {
    print( $select);
     /* neutralisation de la seconde boucle
     
                    while($row2 = mysql_fetch_array($result)) 
                    {       
                            //$idclient=1387;
                            $idclient=$row2["client"];
                            
                            $requetteclient=mysql_query('SELECT nom FROM clients WHERE id='.$idclient.';')
                            or die('<span style="color:#F00;">Erreur lors d\'une requette MYSQL !<br />
                            <img src="imgs/messagebox_critical.png" alt="ERREUR" />
                            l\'erreur s\'est produite à la ligne : <u>'.__LINE__.'</u>, dans le fichier <u>"'.
                            __FILE__.'"</u>.</span><br />'.mysql_error());
                    
                    $dataclient=mysql_fetch_array($requetteclient);
                    }               
      */
    Quand à afficher le nom du client tu fais une jointure entre l'id du client de 'rdv_date' et la table où se trouve la liste de tes clients.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 81
    Points : 35
    Points
    35
    Par défaut
    Merci pour ta réponse Spaccio
    Super pour le Print
    Je vois maintenant la requete, ligne par ligne Hihi

    Au sujet de la jointure,
    Je dois la faire dans la requette $select je pense ?
    Mais comment je dois la faire aussi ?
    C'est assez compliqué avec le ORDER By.

    Pourrais tu m'aider un peu s'il te plait ?
    Merci par avance

    Marc

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 57
    Points : 50
    Points
    50
    Par défaut
    Pour la jointure ça devrait donner un truc de ce genre la :
    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
     $select = 'SELECT 
                    id,
                    date,
                    collaborateur,
                    duree,
                    texte,
                    client,
                    heure,
                    raison,
                    magasin
                    FROM rdv_date R
                    INNER JOIN tableClient T ON R.client = T.idclient
                    ORDER BY date DESC LIMIT '.$premiereEntree.', '.$messagesParPage.'';
                    $result = mysql_query($select) or die ('Erreur : '.mysql_error() );
                    $total = mysql_num_rows($result);
                    echo 'pas d\'options de tri sélectionnée';
    Je suis partie de l'idée d'une table qui liste les clients comme celle-ci :
    tableClient (#idclient, nomclient etc...).
    et que le champ 'rdv_date.client' contient l'id du client de la table 'tableClient.idclient'.
    Tu remplaceras par les vrais noms de ta table
    Pour que la jointure marche il est préférable que les types des champs joints soit de même nature (int).

    Pour plus de détails sur les jointures :
    http://sql.developpez.com/sqlaz/jointures/

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 81
    Points : 35
    Points
    35
    Par défaut
    Merci beaucoup pour ton aide Spaccio.
    J'ai modifier les noms des champs comme tu me l'as demandé mais j'ai une erreur qui s'affiche :

    Erreur : Champ: 'id' dans field list est ambigu

    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
    		 $select = 'SELECT 
                    id,
                    date,
                    collaborateur,
                    duree,
                    texte,
                    client,
                    heure,
                    raison,
                    magasin
                    FROM rdv_date R
                    INNER JOIN clients C ON R.client = C.id
                    ORDER BY date DESC LIMIT '.$premiereEntree.', '.$messagesParPage.'';
                    $result = mysql_query($select) or die ('Erreur : '.mysql_error() );
                    $total = mysql_num_rows($result);
                    echo 'pas d\'options de tri sélectionnée';
    Sait tu d'où peut venir cette erreur?
    J'ai vérifier les types des champs id et client, c'est bien du INT et en 10 pour tous.
    J'ai testé en rajoutant AS R et AS C mais ca ne change rien.

    Merci encore pour ton aide.
    PlEx

  6. #6
    Membre confirmé Avatar de SphynXz
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 439
    Points : 547
    Points
    547
    Par défaut
    Le fait qu'il y ait une jointure sur deux table ayant deux champs nommé "id", le fait de selectionner ID rend MySQL quelque peu confus

    Vue que Spaccio à très bien modifié ta requête tu ne vas avoir besoin que de rajouter deux petit caractère comme ceci :

    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
    		 $select = 'SELECT 
                    R.id,
                    date,
                    collaborateur,
                    duree,
                    texte,
                    client,
                    heure,
                    raison,
                    magasin
                    FROM rdv_date R
                    INNER JOIN clients C ON R.client = C.id
                    ORDER BY date DESC LIMIT '.$premiereEntree.', '.$messagesParPage.'';
                    $result = mysql_query($select) or die ('Erreur : '.mysql_error() );
                    $total = mysql_num_rows($result);
                    echo 'pas d\'options de tri sélectionnée';
    De ce fait, MySQl saura que le champ id qu'il doit selectionner appartient à la table R qui est un alias de la table rdv_date .

    Et à l'avenir si tu as une selection à faire sur deux table comportant des champs identiques, il te faudra les préciser de cette manière
    I don't know what will be used in the next world war, but the 4th will be fought with stones. - Albert Einstein
    Pour détourner un avion, il faut monter dedans - Frédéric beigbeder

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 81
    Points : 35
    Points
    35
    Par défaut
    Merci beaucoup pour ton aide SphynXz
    Ca va un peu mieux maintenant et j'y voit un peu plus clair.

    Par contre, comment dois je fais pour afficher le nom et le prenom du client dans mon tableau ?
    Car dans la table des rendez vous sont stockées les Id des clients et non leur nom / prenom.

    Dois je créer une seconde boucle ?
    Merci encore pour votre aide à tous.

    PlEx

  8. #8
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Hmmm j'ai une petite question justement concernant les jointures, je me permet donc de continuer ce post...

    Je reprends le code de base :
    Code php : 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
     
    $select = 'SELECT 
                    R.id,
                    date,
                    collaborateur,
                    duree,
                    texte,
                    client,
                    heure,
                    raison,
                    magasin
                    FROM rdv_date R
                    INNER JOIN clients C ON R.client = C.id
                    ORDER BY date DESC LIMIT '.$premiereEntree.', '.$messagesParPage.'';
                    $result = mysql_query($select) or die ('Erreur : '.mysql_error() );
                    $total = mysql_num_rows($result);
                    echo 'pas d\'options de tri sélectionnée';

    Et je me demandais s'il était mieux de donner un indice à la table (ici : R) et donc plus optimisé de l'écrire plutot que de nommer la table à chaque fois genre :
    Code php : 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
     
    $select = 'SELECT 
                    rdv_date.id,
                    rdv_date.date,
                    rdv_date.collaborateur,
                    rdv_date.duree,
                    rdv_date.texte,
                    rdv_date.client,
                    rdv_date.heure,
                    rdv_date.raison,
                    rdv_date.magasin
                    FROM rdv_date
                    INNER JOIN clients ON rdv_date.client = clients.id
                    ORDER BY date DESC LIMIT '.$premiereEntree.', '.$messagesParPage.'';
                    $result = mysql_query($select) or die ('Erreur : '.mysql_error() );
                    $total = mysql_num_rows($result);
                    echo 'pas d\'options de tri sélectionnée';

    En fait, la premiere solution est juste moins lourdes niveau utilisateur mais je suppose qu'il n'y a pas de changement côté serveur, est-ce bien ça ?

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 81
    Points : 35
    Points
    35
    Par défaut
    darkstar123456, effectivement, cela n'influt pas sur le résultat.
    Il est identique.

    Toutes fois, la requete est un peu plus "lourde" oui mais plus simple.

    Par contre je n'arrive toujours pas a bien afficher les informations dans mon tableau de présentation des rendez vous

Discussions similaires

  1. [XL-2003] Besoin d'aide pour faire une boucle loop sur une macro
    Par spacesheep dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 14/04/2010, 11h42
  2. Réponses: 22
    Dernier message: 20/05/2008, 10h25
  3. Besoin d'aide pour faire une string formatée
    Par fab032 dans le forum Langage
    Réponses: 2
    Dernier message: 24/04/2008, 14h37
  4. Besoin d'aide pour faire une procédure stockée
    Par PoichOU dans le forum SQL
    Réponses: 17
    Dernier message: 30/04/2007, 17h55
  5. [VBA-E]besoin d'aide pour faire une boucle
    Par mikazounette dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/04/2006, 14h04

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