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 :

Lecture d'un tableau dans un autre [PHP 5.3]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de alain78
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2008
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 160
    Par défaut Lecture d'un tableau dans un autre
    Bonjour,

    Désolé de vous déranger, mais je craque car après plusieurs heures de recherches je ne trouve pas ce qui cloche et pourtant je suis sur qu'il s'agit d'une poussière de rien du tout.

    Merci par avance pour votre aide

    Voilà
    J'ai récupéré des valeurs dans 2 tableaux.
    Je lis le premier tableau et chaque valeur trouvée dans le deuxième tableau est affichée dans une liste SELECT.
    Seulement le résultat est faux: une seule valeur est affichée au lieu de 5 attendues. J'ai vérifié le contenu des 2 tableaux. Tout est correct. Ils contiennent bien les bonnes valeurs.

    les tableaux sont
    $ref_responsabilité (défini plus haut) qui contient une reference numerique
    et $ref_referentiel défini dans le code ci dessous qui contient une reference numerique et un libelle.

    $resultat1 est le resultat (positif) d'une requete

    Voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        echo "<select name='responsabilites[]'>";
     
    		while ($ref_referentiel = mysql_fetch_assoc($resultat1)) { 
    			$tt_ref_referentiel=$ref_referentiel[ref_referentiel];
    			if (in_array($tt_ref_referentiel,$ref_responsabilite)) {
    		    		$ttmission =stripslashes($ref_referentiel[libelle]);
    				echo "<option value=>$ttmission</option>";	
    			}					    
    		}
        echo '</select>';

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    fait une var_dump de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($ref_responsabilite);
    et un echo de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ref_referentiel['ref_referentiel'];
    ,ensuite compare.

    je viens de faire un test et ça marche très bien

    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 name='responsabilites[]' >
        <?php
        $ref_referentiel = array(1,2,3,4,5);
        $ref_responsabilite = array(1,2,3,4,5);
        $count = count($ref_referentiel);
        for($i=0;$i<$count;$i++) {
            $tt_ref_referentiel=$ref_referentiel[$i];
            if (in_array($tt_ref_referentiel,$ref_responsabilite)) {
                $ttmission =$tt_ref_referentiel;
                echo "<option>$ttmission</option>";
            }
        }
     
        ?>
    </select>

  3. #3
    Membre confirmé Avatar de alain78
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2008
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 160
    Par défaut OK mais
    Merci cela fonctionne.

    Le seul souci qui me reste est le suivant :
    tableau1[] ($responsabilite) contient un ensemble de valeurs numériques
    tableau2[] ($referentiel) contient un ensemble de valeurs numériques, mais je ne sais pas comment associer une valeur alphanumérique à chaque valeur numérique de ce tableau du style tableau1[]= ref_num et ref_alpha.

    puis ensuite je souhaite afficher dans mon select non pas la référence numérique du tableau2 mais la correspondance alphanumérique.

    J'ai bien trouvé une solution (ci dessous) mais elle ne me satisfait pas car elle utilise trop de requêtes sur le serveur pour aller récupérer la valeur alpha dans la table d'origine.

    Avez vous une simplification ?

    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
     
    echo "<select name='responsabilites[]' >";
     
        $count = count($referentiel);
        for($i=0;$i<$count;$i++) {
            $tt_ref_referentiel=$referentiel[$i];
            if (in_array($tt_ref_referentiel,$responsabilite)) {
    		$sql="SELECT * FROM $table WHERE `ref_referentiel` = $tt_ref_referentiel ";
    		$resultat2=mysql_query($sql);
    	 	$aff_result=mysql_fetch_object($resultat2);
    		$libelle=$aff_result->libelle;
              echo "<option>$libelle</option>";
            }
        }
     
    echo "</select><br>";

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    de son bon matin je n'ai point l'esprit clair et je ne comprend pas bien votre demande !

  5. #5
    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
    Par défaut
    Bonjour,

    Je connais pas d'autres solutions à moins d'avoir construit une table de tes références avant la construction de ta page (avec ton select option).

    Juste une modif mais c minime comme simplification, c de faire un SELECT du référentiel alphanum et non un *

  6. #6
    Membre confirmé Avatar de alain78
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2008
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 160
    Par défaut Optimiser le code
    Bonjour,
    C'est justement ce que j'essaye de faire;

    1° construction de 2 tables,
    l'une contenant une référence numérique associé à une chaine alphanumérique, l'autre contenant une référence numérique nommée "reference"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    	$sql="SELECT * FROM $table WHERE `prog` = 7 ORDER BY libelle";
    	$resultat=mysql_query($sql);
    	while($tt = mysql_fetch_assoc($resultat)) {
    		$ref_referentiel=$tt[ref_referentiel];
    		$lib_referentiel=$tt[libelle];
    		$tab_referentiel_lib=array($ref_referentiel => $lib_referentiel)  ;
    		$tab_referentiel_ref=array("reference" => $ref_referentiel)  ;
    	}
    2° lecture de la table ($tab_referentiel_ref) et si une de ses valeurs ("reference") est contenu dans une autre table déjà construite préalablement ($responsabilité) alors afficher dans mon select le libellé correspondant ($ref_referentiel de la table $tab_referentiel_lib).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    echo "<select name='responsabilites[]'  >";
        $count = count($tab_referentiel_ref);
        for($i=0;$i<$count;$i++) {
            $tt_ref_referentiel=$tab_referentiel_ref["reference"];
            if (in_array($tt_ref_referentiel,$responsabilite)) {
    		$libelle=$tab_referentiel_lib[$tt_ref_referentiel];
              echo "<option>$libelle</option>";
            }
        }
    echo "</select>";
    pour résoudre mon problème j'ai 2 solutions :

    1- le code ci dessus avec 2 tables mais cela ne fonctionne pas. J'ai un souci dans la fabrication puis lecture des tables mais je ne sais pas où.

    2- améliorer le code ci et n'utiliser qu'une seule table au lieu de 2.

    Si je résous ce problème, je pense que cela pourra intéresser plus d'un débutant et surtout, cela me servira ...à vie.

    Merci à tous pour votre concours.


    Donnes un poisson à un homme tu le nourris un jour, apprend lui à pécher, tu le nourris toute sa vie.

  7. #7
    Membre confirmé Avatar de alain78
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2008
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 160
    Par défaut eureka, eureka
    Ça y est, j'ai (enfin) trouvé.
    Comme je le pressentais, c'est finalement simple

    Contruction d'un seul tableau ($tab_referentiel) qui comporte les 2 valeurs ($ref_referentiel associée à $lib_referentiel) à partir du résultat d'une requête sur une table du serveur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	$resultat=mysql_query($sql);
    	while($tt = mysql_fetch_assoc($resultat)) {
    		$ref_referentiel=$tt[ref_referentiel];
    		$lib_referentiel=$tt[libelle];
    		$tab_referentiel[$ref_referentiel]=array("libelle"=>$lib_referentiel)  ;
    	}
    Puis recherche dans le tableau $responsabilite (construit préalablement) des valeurs contenues dans le tableau $tab_referentiel. Affichage dans la liste SELECT si elles existent.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    echo "<select name='responsabilites[]";
    	foreach ($tab_referentiel as $key => $value) {
    		$lib=$tab_referentiel[$key]["libelle"];
         		if (in_array($key,$responsabilite)) {
              		echo "<option>$lib</option>";
    			}
    	}
    echo "</select><br>";
    Voilà, CQFD.
    J'espère que ma solution pourra servir à quelqu'un d'autre.

    Bonne journée à tous.

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

Discussions similaires

  1. création de tableau dans un autre tableau
    Par freestyler dans le forum Delphi
    Réponses: 2
    Dernier message: 02/11/2006, 08h54
  2. Lecture d'un tableau dans un fichier
    Par Sachiel31 dans le forum C++
    Réponses: 30
    Dernier message: 19/07/2006, 19h57
  3. C++ lecture d'un tableau dans un fichier
    Par nicoss dans le forum C++
    Réponses: 1
    Dernier message: 28/05/2006, 10h26
  4. Réponses: 4
    Dernier message: 12/10/2005, 21h22
  5. Pb pour se servir d'un tableau dans une autre unité
    Par libititi dans le forum Langage
    Réponses: 7
    Dernier message: 08/06/2005, 11h40

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