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 :

Lire une ligne à la fois dans un tableau


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 26
    Points : 15
    Points
    15
    Par défaut Lire une ligne à la fois dans un tableau
    Bonjour à toutes et à tous.
    J'aurai besoin de votre aide s'il vous plaît pour un petit problème de tableau... J'ai un tableau généré via un foreach qui peut contenir 1 résultat comme 100 ... Ce que je voudrais, c'est pouvoir lire une seule "ligne" de mon tableau à la fois en sachant qu'une fois que l'utilisateur à lu une ligne, il ne peut plus y revenir et dois lire la suivante et ainsi de suite...

    Voici un exemple de mon tableau (la première colonne correspondant à l'ID du texte qui se trouve dans la seconde colonne. La troisième colonne correspondant à une variable $i qui s'incrémente au fur et à mesure pour bien distinguer chaque entrée) :

    001 - Texte1 - 1
    002 - Texte2 - 2
    003 - Texte3 - 3
    003a - Texte4 - 4
    003b - Texte5 - 5
    ...

    Une fois la ligne lue, j'enregistre cette action en base mais là où je coince c'est que je n'arrive pas à faire en sorte de lire celle qui vient ensuite. Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $decoup = explode("/*", $reponse_recherche['contenu']);
    $i = 1;
    foreach($decoup as $entree)
    {
            $tabentree = array(substr($entree,0,3),substr($entree,4),$i);
    	$requete = mysql_query("SELECT * FROM matable WHERE matable_identifiant='".substr($entree,0,3)."'");
    	$reponse = mysql_fetch_array($requete);
            /*C'EST LA QUE JE COINCE
            if($reponse == TRUE)
            {
                   echo $tabdialogues[0]." : ".$tabdialogues[1]." (".$tabdialogues[2].")";
            }*/
    }
    J'espère que c'est assez clair.
    Merci d'avance pour votre aide !

  2. #2
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Bonjour,

    Avant de continuer dans le code:

    Tu peux nous donner plus d'info sur la découpe:
    $decoup = explode("/*", $reponse_recherche['contenu']);
    avec un exemple, parceque pour ma part, je vois pas trop
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Salut et merci de ta réponse.
    En fait, mon champs "contenu" est un TEXT contenant les données de cette façon :

    002='Type(Dial):001'/*
    003='Type(Dial):002'/*
    ...

    Je fais une découpe pour dissocier les lignes et récupérer certains fragments d'informations. Ainsi, pour lire le texte 002 qui est de type "Dial", il faut au préalable avoir lu le texte 001...

    Est-ce plus clair?

  4. #4
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    OK,

    Pour le code et la boucle, petite question:
    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
     
    foreach($decoup as $entree)
    {
            // Pour avoir ton format comme tu as dis, c Ok
            // juste le $i++ pour avoir le bon ordre de ta 3ème colonne
            $tabentree = array(substr($entree,0,3),substr($entree,4),$i++);
     
            // Pourquoi le select? 'matable' contient déjà les index 001, 002 etc ?
     
            // Moi je verrais une requête INSERT INTO avec soit l'index
            // automatiquement incrémenté, ou alors si 'matable' posséde
            // effectivement des index, l'insert into devient un update avec un
            //where telque (dans le même genre):
            $requete = mysql_query("UPDATE matable SETchamp1='".$tabentree[..]."', champ2='" ......." WHERE matable_identifiant='".substr($entree,0,3)."'");
     
    }
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Merci pour ta réponse.
    En fait il m'est impératif d'avoir ces "001", "002"... car plus loin dans le code, cela sert de jointure à une autre partie de mon code. De toute façon cette partie n'est pas très importante ce qui m'intéresse c'est juste l'affichage d'une ligne d'un tableau.

  6. #6
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Je suis d'accord

    Mais ma question était de savoir si 'matable' existait déjà avec ces codes (c la suggestion que j'ai eu sur ton code avec le SELECT) ???
    OU si il faux la créer en même temps que les données contenues dans $tabentree
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Et bien en réalité il existe deux tables une qui contient les textes et l'autre qui contient les conditions remplies par l'utilisateur.

    Dans la première table, il y a deux champs : "contenu" et "conditions à remplir". Les deux sont en TEXT et contiennent (pour exemple) :

    Contenu :
    001:Mon premier texte/*
    002:Mon second texte/*
    003:Mon troisième texte/*
    ...

    Conditions à remplir :
    001='vide'/*
    002='Type(Dial):001'
    003='Type(Dial):002'
    ...

    Je découpe ces deux champs de cette même table pour associer une condition à un texte ce qui veut dire que :
    - Pour lire le texte 001, pas besoin de conditions (vide)
    - Pour lire le texte 002, il faut avoir lu le texte 001
    - Pour lire le texte 003, il faut avoir lu le texte 002
    ...

    Quand mon utilisateur lis un texte, j'enregistre dans une seconde table "conditions" l'action qu'il vient de faire. Ce qui donne :

    Si l'utilisateur lis le texte 001
    {
    J'enregistre dans ma table "conditions" le fait qu'il ai lu ce texte 001
    }
    Si l'utilisateur lis le texte 002
    {
    J'enregistre dans ma table "conditions" le fait qu'il ai lu ce texte 002
    }
    ...

    Donc, pour répondre à ta question, la table "contenu" existe déjà avec les textes bien sûr.

    Est-ce plus clair ainsi?
    Merci de tes réponses en tout cas !

  8. #8
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Euhhhhh, en plus j'suis en vacances ce soir alors

    Résumons:
    Une première table appelons la: Table1 avec deux champs 'contenu', 'conditions à remplir' ..................... Ok

    Une deuxième table disons Table2 avec deux champs 'idUser', 'etape' par exemple avec 'idUser' l'id de l'utilisateur et 'etape' le texte lu.
    EX:
    1 001
    1 002
    etc

    C ça ?
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Exact !

  10. #10
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Ok alors une idée de code:

    Supposons que l'on reçoit la demande dans un tableau, tableReq avec l'id et le texte lu par l'id.

    1er étape: recherche du texte lu dans la table1 sur le champ 'contenu' avec retour du champ 'conditions'
    Code approximatif, faut regarder sur MySQL parceque moi je travaille sur Postgres et c un EXTRACT qui faut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     "SELECT conditions FROM Table1 WHERE LEFT(contenu, 5)= '".tableReq['texte']."'";
    2ème étape suivant la condition, c oui ou non, l'utilisateur peut lire le texte
    Code Approximatif, (en prennant ton code départ)
    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
     
    // $data provient de la première étape :D
    $decoup = explode("/*", $data);
    // $decoup[0] contiendra la condition
    $tabentree = array(substr($decoup[0] ,0,3),substr($decoup[0] ,4));
     
    // reste à tester la condition, retour $estOk à la base true
    $estOk = true;
    // Si $tabentree[1] == 'vide' rien à faire alors $estOk est tjs à true
    // Sinon, je reprend ton code (par ex)
    //      Dans le substr des 3 derniers caractère de $tabentree[1] j'ai le texte
    //      qui devait être lu auparavant que je met dans $aLire
    // Puis
    $requete = mysql_query("SELECT * FROM Table2 WHERE idUser='".tabReq['id]."' AND etape='".$aLire."'");
    $reponse = mysql_fetch_array($requete);
            /*ya plus a coincer
    if(!$reponse) $estOk = false; // pas trouver le texte à lire en condition
    3ème étape l'ecriture en base en fonctio de $estOk
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Merci pour ta réponse. Malheureusement je dois partir mais je vais tester ça demain matin et je te donnerai mes résultats. Je te remercies en tout cas pour ton aide et je te souhaite de bonnes vacances et de bonnes fêtes de fin d'année.

    Cordialement,
    Kenru.

  12. #12
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Merci à toi aussi ...

    Et bon courage pour le codage
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

Discussions similaires

  1. Lire une ligne plusieurs fois
    Par xanix dans le forum Qt
    Réponses: 3
    Dernier message: 24/05/2010, 16h14
  2. Réponses: 1
    Dernier message: 11/11/2009, 11h55
  3. Lire une ligne de texte dans un tFileStream
    Par tixu dans le forum Langage
    Réponses: 2
    Dernier message: 11/06/2009, 11h54
  4. Colorer une ligne sur deux dans un tableau croisé
    Par markoBasa dans le forum iReport
    Réponses: 1
    Dernier message: 25/09/2008, 11h15
  5. Réponses: 3
    Dernier message: 30/08/2007, 08h56

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