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 :

[merci à Nnay ;)]Boucle while + SQL -> Affichage des données [MySQL]


Sujet :

PHP & Base de données

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

    Informations forums :
    Inscription : Janvier 2009
    Messages : 21
    Points : 11
    Points
    11
    Par défaut [merci à Nnay ;)]Boucle while + SQL -> Affichage des données
    Bonjour à tous,

    Voilà j'ai un petit problème pour afficher ce que j'ai dans ma base de données.

    Je vous mets dans le contexte : je stocke dans ma base des infos sur le visiteur en 2 tables :

    Table users_ip contient :

    ID | IP | Hostname
    1 | 10.10.10.10 | nra.10.10.10.10.net
    2 | 11.11.11.11 | nra.11.11.11.11.net


    Table ip_logs contient :

    ID | DATE | HEURE | REF
    1 | 15/01/2009 | 8H10 | index.php
    1 | 15/01/2009 | 8H12 | index.php
    2 | 15/01/2009 | 8H15 | page232.php
    2 | 15/01/2009 | 8H16 | index.php
    1 | 15/01/2009 | 8H20 | index.php


    Comme vous avez du le compendre, lors de la première visite d'un visiteur, j'insère dans ma table users_ip son IP, son HOSTNAME et la table lui attribue un ID en auto_increment. De plus j'insère dans la table ip_logs des infos en prenant soit que l'ID corresponde à l'ID de l'ip dans la table users_ip.

    Quand le visiteur revient une deuxième fois, j'ai une fonction qui va vérifier si son ip est déjà présente dans la table, et si elle est déjà là, la fonction va récupérer l'ID de cette IP et ajouter les infos à logs_ip en donnant l'ID de l'IP aux infos.
    Vous me suivez ?

    Là où ça cloche, c'est quand je veux afficher ces données dans une page.
    Je voudrais que ça s'affiche comme tel :


    ID SQL : 1
    IP : 10.10.10.10
    Location : nra.10.10.10.10.net
    Visite : le 15/01/2009 à 8H10 en provenance de index.php
    Visite : le 15/01/2009 à 8H12 en provenance de index.php
    Visite : le 15/01/2009 à 8H20 en provenance de index.php

    ID SQL : 2
    IP : 11.11.11.11
    Location : nra.11.11.11.11.net
    Visite : le 15/01/2009 à 8H15 en provenance de page232.php
    Visite : le 15/01/2009 à 8H16 en provenance de index.php



    Actuellement mon problème c'est que l'affichage est comme tel :

    ID SQL : 1
    IP : 10.10.10.10
    Location : nra.10.10.10.10.net
    Visite : le 15/01/2009 à 8H10 en provenance de index.php
    Visite : le 15/01/2009 à 8H12 en provenance de index.php
    Visite : le 15/01/2009 à 8H15 en provenance de page232.php
    Visite : le 15/01/2009 à 8H16 en provenance de index.php
    Visite : le 15/01/2009 à 8H20 en provenance de index.php

    ID SQL : 2
    IP : 11.11.11.11
    Location : nra.11.11.11.11.net



    Vous aurez donc compris qu'il m'informe bien des visites sous la première IP, mais pour toutes les IP, et il ne m'affiche pas les visites de la seconde ni des autres puisqu'elles sont sous la première...


    Voici mon code pour l'affichage :

    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
     
    <?php
    // Définition de la requête pour ID, IP et HOSTNAME  
    $sql = 'SELECT id,ip,hostname FROM users_ip ORDER BY id';  
     
    // Lancement de la requête 
    $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
     
    // Seconde requête pour ID, DATE, HEURE et REF         
    $sql2 = 'SELECT id,date,heure,ref FROM ip_logs ORDER BY date,heure';  
     
    // Lancement de la requête         
    $req2 = mysql_query($sql2) or die('Erreur SQL !<br />'.$sql2.'<br />'.mysql_error());
     
    // Scan des tuples  
    while ($data = mysql_fetch_array($req)) {
     
    echo 'ID SQL :'.$data['id'].'<br />';
             echo 'IP :'.$data['ip'].'<br />';
             echo 'Location : '.$data['hostname'].'<br />';
     
    while ($data2 = mysql_fetch_array($req2)) {
     
             echo 'Visite : '.$data2['date'].' à'.$data2['heure'].'en provenance de : '.$data2['ref'].'<br />';
               }
             }
               mysql_free_result ($req);
             mysql_close ();
             ?>
    En gros je ne sais pas où placer ma seconde boucle pour qu'elle affiche les visites pour toutes les IP de la table users_ip en correspondant bien à l'IP =(

    Si quelqu'un a la solution... Je lui serai reconnaissant

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 60
    Points : 75
    Points
    75
    Par défaut
    Bonjour,

    Le résultat que tu obtient correspond à ton code.

    Le problème c'est que tu affiche tous les résultats lors de ta 2eme boucle.

    Dans ta 2eme boucle, avant d'afficher la ligne de résultat, fait un test du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if( $data2['ID'] == $data['ID'] )
    cela te permet d'afficher la ligne que si l'ID du résultat de ta 2eme table correspond bien à l'ID de l'IP

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

    Informations forums :
    Inscription : Janvier 2009
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par Nnay_ Voir le message
    Bonjour,

    Le résultat que tu obtient correspond à ton code.

    Le problème c'est que tu affiche tous les résultats lors de ta 2eme boucle.

    Dans ta 2eme boucle, avant d'afficher la ligne de résultat, fait un test du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if( $data2['ID'] == $data['ID'] )
    cela te permet d'afficher la ligne que si l'ID du résultat de ta 2eme table correspond bien à l'ID de l'IP

    Effectivement, je n'avais pas vu ça. Ceci vient de me régler une partie du problème : Sous l'IP, il ne m'affiche plus que les infos concernant cette dernière, mais il reste mon plus gros problème

    Il ne m'affiche les résultats que pour la première IP, rien pour les autres.

    Voilà un screen pour vous en rendre compte :




    Je pense que je n'utilise pas la bonne boucle ou qu'elle est mal placée, mais étant donné que j'ai commencé le PHP ya 2 semaines et que je me suis mis à SQL cette semaine j'vois pas la solution

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 60
    Points : 75
    Points
    75
    Par défaut
    oui, c'est parce que lors de la boucle pour la première IP, PHP parcours complètement les résultats, et n'affiche que ceux correspondant à cette IP.

    mais lors du passage pour la deuxième IP, PHP ne rentre pas dans la deuxième boucle, car au passage d'avant il a déjà complètement parcouru les résultats.

    en fait il vaut mieux utiliser quelque chose dans ce gout là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    requete1 (toutes les ip)
     
    boucle 1 (sur la requete1){
        affichage de l'IP
     
        requete2 (avec un WHERE) (SELECT * FROM ip_logs WHERE ID = $data['ID'])
     
        boucle2 (sur la requete2) {
            affichage de l'info de la visite
        }
    }

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

    Informations forums :
    Inscription : Janvier 2009
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par Nnay_ Voir le message
    oui, c'est parce que lors de la boucle pour la première IP, PHP parcours complètement les résultats, et n'affiche que ceux correspondant à cette IP.

    mais lors du passage pour la deuxième IP, PHP ne rentre pas dans la deuxième boucle, car au passage d'avant il a déjà complètement parcouru les résultats.

    en fait il vaut mieux utiliser quelque chose dans ce gout là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    requete1 (toutes les ip)
     
    boucle 1 (sur la requete1){
        affichage de l'IP
     
        requete2 (avec un WHERE) (SELECT * FROM ip_logs WHERE ID = $data['ID'])
     
        boucle2 (sur la requete2) {
            affichage de l'info de la visite
        }
    }

    Yeaaah effectivement ça marche bien comme ça

    Merci beaucoup, je me doutais bien que j'avais mal placé la boucle, là elle est parfaitement placée et ça marche niquel

    Un grand grand merci.

    PS : Je sais que mon utilisation de SQL est assez inutile mais étant débutant je m'entraîne avec ceci. J'avais tout réussi jusque là, donc merci encore de ton aide

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 60
    Points : 75
    Points
    75
    Par défaut
    de rien

    pense à cliquer sur le bouton "Résolu"

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] requete+sql avec element dans textbox+affichage des données
    Par clem62173 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/09/2011, 18h10
  2. [MySQL] Boucle while qui me fait des misères
    Par joboy84 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 06/08/2009, 14h40
  3. Réponses: 9
    Dernier message: 04/12/2008, 15h22
  4. [SQL] Affichage des données
    Par temperature dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 27/02/2008, 11h31
  5. [SQL] Forum: affichage des sujets, jointure
    Par legender dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 25/07/2007, 14h57

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