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 :

modification d'une fonction


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 329
    Points : 126
    Points
    126
    Par défaut modification d'une fonction
    Bonjour

    J'ai un problème sérieux avec ma fonction php/sql.

    J'ai une table nommé tablature qui contient les tables et les
    champs de chaque table de la base de données.

    Je voudrai exécuter une fonction php pour sélectionner
    toutes les tables et les champs dans tablature et mettre les
    données de chaque table dans un tableau unique.

    J'y arrive si tablature contient qu'une ligne donc une table.
    Mais pour plusieurs tables je n'arrive pas.

    table : tablature
    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
     
    CREATE TABLE `tablature` (
      `n_ic` int(11) NOT NULL,
      `n_table` int(11) NOT NULL auto_increment,
      `parent` int(11) NOT NULL,
      `cle` varchar(50) NOT NULL,
      `of` int(1) NOT NULL,
      `tbl` varchar(250) NOT NULL,
      `cha` text NOT NULL,
      `debut` int(11) NOT NULL,
      `fin` int(11) NOT NULL,
      `cle_pos` int(11) NOT NULL,
      `adr` varchar(250) NOT NULL,
      PRIMARY KEY  (`n_table`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
     
    --
    -- Contenu de la table `tablature`
    --
     
    INSERT INTO `tablature` (`n_ic`, `n_table`, `parent`, `cle`, `of`, `tbl`, `cha`, `debut`, `fin`, `cle_pos`, `adr`) VALUES
    (0, 1, 0, 'n_la', 2, 'langue', 'n_la,n_pa,la_adm,a,b,c,d,e,f,g,h,i,j,k,l', 17, 31, 16, 'sql.php'),
    (0, 2, 0, 'n_nav', 2, 'nav', 'n_nav,of,nav', 32, 34, 32, 'sql.php');
    Je possède une code qui me le fait, mais hélas que pour une seule ligne dans tablature. Donc une seule table.
    Mon problème est que tablature contient plusieurs lignes.

    sql.php
    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
     
    $aaa=mysql_query("SELECT n_ic,n_table,parent,cle,of,tbl,cha,debut,fin,cle_pos,adr FROM tablature");
    $nbr_a=mysql_num_rows($aaa);
    $ara=array();$i=0;$keys_a=range(0,10);
    while($rsa=mysql_fetch_row($aaa)){$ara[$i++]=array_combine($keys_a,$rsa);}
     
    if(($nbr_a=="")||($nbr_a==0)){echo"tablature est vide";}
    elseif($nbr_a>=1){
    for($i=0;$i<=$nbr_a-1;$i++){
    if($ara[$i][1]!=""){
    $aac=mysql_query("SELECT ".$ara[$i][6]." FROM ".$ara[$i][5]."");
    $z=0;
    $arc=array();
    $keys_c=range($ara[$i][7],$ara[$i][8]);
    while($rsc=mysql_fetch_row($aac)){$arc[$z++]=array_combine($keys_c,$rsc);}
                                }
                                                  }
                                 }
    else{echo"grosse erreur";}
    print_r($arc);
    J 'obtiens les données de la table b
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //-----------table b
                    Array ( [0] =>[0] => Array ( [32] => 1 [33] => 2 [34] => ie ) 
                                       [1] => Array ( [32] => 2 [33] => 2 [34] => fi ) 
                                       [2] => Array ( [32] => 3 [33] => 2 [34] => sa )  )
    Mon but c'est d'obtenir un tableau comme ci dessous pour x table dans tablature
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    //-----------table a
                          Array ( [0] => Array ( [17] => 1 [18] => 1 [19] => 2 [20] => 2 [21] => 2 [22] => 2 [23] => 0 [24] => iso-8859-1 [25] => fr [26] => Français [27] => France [28] => 20021102 [29] => 7 [30] => 0 [31] => € )
                                       [1] => Array ( [17] => 2 [18] => 2 [19] => 1 [20] => 1 [21] => 1 [22] => 1 [23] => -1 [24] => iso-8859-1 [25] => en [26] => English [27] => England [28] => 20021102 [29] => 7 [30] =>  [31] => £ ) 
                                       [2] => Array ( [17] => 3 [18] => 3 [19] => 1 [20] => 1 [21] => 1 [22] => 1 [23] => 0 [24] => iso-8859-1 [25] => de [26] => Deutschland [27] => Deutscher [28] => 20021102 [29] => 7 [30] => 0 [31] => € ) 
                                       [3] => Array ( [17] => 4 [18] => 3 [19] => 1 [20] => 1 [21] => 1 [22] => 1 [23] => 0 [24] => iso-8859-1 [25] => esp [26] => Espagne [27] => Espagnol [28] => 20021102 [29] => 7 [30] => 0 [31] => € ) )
    //-----------table b
                                       [4] => Array ( [32] => 1 [33] => 2 [34] => ie ) 
                                       [5] => Array ( [32] => 2 [33] => 2 [34] => fi ) 
                                       [6] => Array ( [32] => 3 [33] => 2 [34] => sa )  )
    Que faut- il modifier pour qu'il me prennent toutes les données des tables?

  2. #2
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 180
    Points : 182
    Points
    182
    Par défaut
    Mdr j'ai rien compris à ton code :s Et le but c'est simplement de récupérer dans un tableau toutes les lignes de ta table tablature?
    Parce que si oui y'a beaucoup plus simple.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 329
    Points : 126
    Points
    126
    Par défaut rep
    J'ai du mal à l'expliqué désole.

    Tablature contient la liste de tables et de ses champs correspondant contenue de la base donnée.

    Je fais une fonction qui sélectionne les tables contenues dans tablature pour les insérées dans une fonction qui va prendre les lignes de chaque table pour les mettre dans le tableau $arc.


    Normalement cela fonctionne si je n'ai qu'une seule ligne dans tablature (donc une table).

    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
     
    // selection de la table tablature
    $aaa=mysql_query("SELECT n_ic,n_table,parent,cle,of,tbl,cha,debut,fin,cle_pos,adr FROM xtab_table");
    $nbr_a=mysql_num_rows($aaa);
    $ara=array();$i=0;$keys_a=range(0,10);
     
    if(($nbr_a=="")||($nbr_a==0)){echo"tablature est vide";}
    elseif($nbr_a>=1){
    // ici on sélectionne chaque ligne de chaque table contenue dans le tableau $ara et on l'insère dans le tableau $arc
    for($i=0;$i<=$nbr_a-1;$i++){
    if($ara[$i][1]!=""){
    $aac=mysql_query("SELECT ".$ara[$i][6]." FROM ".$ara[$i][5]."");
    $z=0;
    $arc=array();
    $keys_c=range($ara[$i][7],$ara[$i][8]);
    while($rsc=mysql_fetch_row($aac)){$arc[$z++]=array_combine($keys_c,$rsc);}
                                }
                                                  }
                                 }
    else{echo"grosse erreur";}
    print_r($arc);
    Par contre si j'ai plusieurs lignes dans la table tablature (donc plusieurs table), je n'arrive pas à toutes les avoir dans $arc.

    En effet je n'ai que la dernière table dans $arc.

    Le but est racourcir ma fonction au lieu d'avoir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $aaa=mysql_query("SELECT n_ic,n_table,parent,cle,of,tbl,cha,debut,fin,cle_pos,adr FROM xtab_table");
    $nbr_a=mysql_num_rows($aaa);
    $ara=array();$i=0;$keys_a=range(0,10);
    while($rsa=mysql_fetch_row($aaa)){$ara[$i++]=array_combine($keys_a,$rsa);}
     
    $aab=mysql_query("SELECT n_ic,n_table,n_cha,of,nom_champ,pos_champ FROM xtab_champ");
    $arb=array();$i=0;$keys_b=range(11,16);
    while($rsb=mysql_fetch_row($aab)){$arb[$i++]=array_combine($keys_b,$rsb);}
     
    .... x table et champ de la base de donnée en dur.
     
    $val=array_merge($ara,$arb,.....etc);

  4. #4
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 180
    Points : 182
    Points
    182
    Par défaut
    Ça veut dire qu'il t'écrase et que l'indice ne s'incrémente pas. Regarde au niveau des indices de ton tableau

  5. #5
    Membre régulier Avatar de s.lennon
    Inscrit en
    Juin 2009
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Juin 2009
    Messages : 66
    Points : 71
    Points
    71
    Par défaut
    Personnellement, j'ai eu pas mal de problème avec mysql_num_rows, essaie de voir la valeur qu'il te retourne peut-être ?

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 329
    Points : 126
    Points
    126
    Par défaut rep
    Je suis coincé à vrai dire. Pour vous montrez si j'enlève les lignes et que j'en laisse une seule.
    Cela fonctionne tres bien. Exemple avec la table langue

    le print_r() me donne ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Array ( [0] => Array ( [17] => 1 [18] => 1 [19] => 2 [20] => 2 [21] => 2 [22] => 2 [23] => 0 [24] => iso-8859-1 [25] => fr [26] => Français [27] => France [28] => 20021102 [29] => 7 [30] => 0 [31] => € ) 
                 [1] => Array ( [17] => 2 [18] => 2 [19] => 1 [20] => 1 [21] => 1 [22] => 1 [23] => -1 [24] => iso-8859-1 [25] => en [26] => English [27] => England [28] => 20021102 [29] => 7 [30] => 0 [31] => £ ) 
                 [2] => Array ( [17] => 3 [18] => 3 [19] => 1 [20] => 1 [21] => 1 [22] => 1 [23] => 0 [24] => iso-8859-1 [25] => de [26] => Deutschland [27] => Deutscher [28] => 20021102 [29] => 7 [30] => 0 [31] => € ) 
                 [3] => Array ( [17] => 4 [18] => 3 [19] => 1 [20] => 1 [21] => 1 [22] => 1 [23] => 0 [24] => iso-8859-1 [25] => esp [26] => Espagne [27] => Espagnol [28] => 20021102 [29] => 7 [30] =>0 [31] => € ) )
    Si je rajoute une ligne de plus la table nav

    Le print_r(); me donne que la dernière table donc les données de la table nav.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Array ( [0] => Array ( [32] => 1 [33] => 2 [34] => ie ) 
                 [1] => Array ( [32] => 2 [33] => 2 [34] => fi ) 
                 [2] => Array ( [32] => 3 [33] => 2 [34] => sa ) )
    Le reste est écrasé je pense.
    J'ai tenté de trifouiller le code en ajouter des array_merge(). Mais dans tous les cas de figure c'est pareil. Sauf si je fais cela. La j'ai les lignes mais c'est pas bon car j'ai une redondance de clé.

    Je rajoute à la suite du array_combine(); ceci $val[$i]=array_merge($arc);. J'obtiens ceci ci-dessous.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Array ( [0] => Array ( [0] => Array ( [17] => 1 [18] => 1 [19] => 2 [20] => 2 [21] => 2 [22] => 2 [23] => 0 [24] => iso-8859-1 [25] => fr [26] => Français [27] => France [28] => 20021102 [29] => 7 [30] => 0 [31] => € ) 
                                         [1] => Array ( [17] => 2 [18] => 2 [19] => 1 [20] => 1 [21] => 1 [22] => 1 [23] => -1 [24] => iso-8859-1 [25] => en [26] => English [27] => England [28] => 20021102 [29] => 7 [30] => 0 [31] => £ ) 
                                         [2] => Array ( [17] => 3 [18] => 3 [19] => 1 [20] => 1 [21] => 1 [22] => 1 [23] => 0 [24] => iso-8859-1 [25] => de [26] => Deutschland [27] => Deutscher [28] => 20021102 [29] => 7 [30] => 0 [31] => € ) 
                                         [3] => Array ( [17] => 4 [18] => 3 [19] => 1 [20] => 1 [21] => 1 [22] => 1 [23] => 0 [24] => iso-8859-1 [25] => esp [26] => Espagne [27] => Espagnol [28] => 20021102 [29] => 7 [30] => 0 [31] => € ) ) 
                 [1] => Array ( [0] => Array ( [32] => 1 [33] => 2 [34] => ie ) 
                                         [1] => Array ( [32] => 2 [33] => 2 [34] => fi ) 
                                         [2] => Array ( [32] => 3 [33] => 2 [34] => sa ) ) )
    Ce que je souhaiterai faire c'est une petite modif de la fonction pour avoir ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Array ( [0] => Array ( [17] => 1 [18] => 1 [19] => 2 [20] => 2 [21] => 2 [22] => 2 [23] => 0 [24] => iso-8859-1 [25] => fr [26] => Français [27] => France [28] => 20021102 [29] => 7 [30] => 0 [31] => € ) 
                  [1] => Array ( [17] => 2 [18] => 2 [19] => 1 [20] => 1 [21] => 1 [22] => 1 [23] => -1 [24] => iso-8859-1 [25] => en [26] => English [27] => England [28] => 20021102 [29] => 7 [30] => 0 [31] => £ ) 
                  [2] => Array ( [17] => 3 [18] => 3 [19] => 1 [20] => 1 [21] => 1 [22] => 1 [23] => 0 [24] => iso-8859-1 [25] => de [26] => Deutschland [27] => Deutscher [28] => 20021102 [29] => 7 [30] => 0 [31] => € ) 
                  [3] => Array ( [17] => 4 [18] => 3 [19] => 1 [20] => 1 [21] => 1 [22] => 1 [23] => 0 [24] => iso-8859-1 [25] => esp [26] => Espagne [27] => Espagnol [28] => 20021102 [29] => 7 [30] => 0 [31] => € )
                  [4] => Array ( [32] => 1 [33] => 2 [34] => ie ) 
                  [5] => Array ( [32] => 2 [33] => 2 [34] => fi ) 
                  [6] => Array ( [32] => 3 [33] => 2 [34] => sa ) )
    Mais je ne trouve pas de solution.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 329
    Points : 126
    Points
    126
    Par défaut rep
    J'ai tenté d'autres fonctions que mysql_fetch_row() sans succés.

    mysql_fetch_object(), mysql_fetch_array(),...

    Cela ne fonctionne pas.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 329
    Points : 126
    Points
    126
    Par défaut rep
    Personne n'a d'idée.

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/04/2008, 10h02
  2. Modification d'une fonction pour selectionner une plage de cellule
    Par jackbauer972 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 01/08/2007, 15h07
  3. Réponses: 13
    Dernier message: 11/12/2006, 14h44
  4. Modification d'une fonction "ShellExit"
    Par The Lord of Nesquik dans le forum C++
    Réponses: 11
    Dernier message: 12/06/2006, 02h57
  5. Aide sur modification d' une fonction.
    Par superadnan3 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 12/01/2006, 17h29

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