Array und Schleife

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Array und Schleife

    hallo

    hab ein problem mit einer schleife
    PHP Code:
    function CE_readoutFields($db,$gettblname){                                                
    $sqlfield mysql_query("SHOW FIELDS FROM $db.".$gettblname." ");
        
        while(
    $rowfield[] = mysql_fetch_array($sqlfield)){        
            
            
    $t_rowfield $rowfield;
        }
        
        return 
    $t_rowfield;
            
    }

    $showField CE_readoutFields("dbname""tbl_test");

    foreach(
    $showField as $key =>$showFieldName){
        echo 
    $key.$showFieldName['Field'];                        

    rufe ich nun diese funktion auf und lasse es mir mit einer forech schleife
    anzeigen bekomme ich immer einen durchlauf mehr heraus als was für ein ergebnis in der funktion raus kam.

    Ist es weil der Zeiger wieder zurückspringt?Wie kann ich das unterbinden? kann mir da jemand von euch helfen?
    Last edited by kasIQ; 03-02-2008, 17:10.

  • #2
    1. was soll das leerzeichen am ende?
    PHP Code:
    $sqlfield mysql_query("SHOW FIELDS FROM $db.".$gettblname." "); 
    2. wieso arbeitest du hier mit einem array?
    PHP Code:
    while($rowfield[] = mysql_fetch_array($sqlfield)) 
    3. und da nicht?
    PHP Code:
    $t_rowfield $rowfield
    4. in diesem fall brauchst du keine while-schleife, ein einfaches
    PHP Code:
    $rowfield mysql_fetch_array($sqlfield
    reicht völlig aus. und das kannst du zurückgeben

    gruß
    peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Comment


    • #3
      hallo kropff

      danke für die schnelle antwort .

      zu 1. gehört da nicht hin ...hatte vorher noch ne where klausel drin

      zu2. und 3.
      weil es funktioniert ! ;.)
      hier liegt irgendwo der fehler dass bei zb bei 5 einträgen die foreach schleife 6 mal durchlaufen wird

      zu 4.brauch doch ne while schleife, da ja mehrere Spalten in meiner tabelle drin sind, deren namen ich angezeigt bekommen möchte,
      mache ich keine schleife bekomme ich doch nur den ersten eintrag angezeigt. ...aber das weisst du ja

      Comment


      • #4
        PHP Code:
        while($rowfield mysql_fetch_array($sqlfield))
        {        
            
        $t_rowfield[] = $rowfield;
        }

        return 
        $t_rowfield
        so ist zumindest sinnvoll.

        Comment


        • #5
          da ja mehrere Spalten in meiner tabelle drin sind
          deswegen brauchst du aber keine schleife, da es nur ein(!) datensatz ist, bestehend aus einem(!) array.
          PHP Code:
          $sqlfield mysql_query('SHOW FIELDS FROM '.$db.'.'.$gettblname);
          $rowfield mysql_fetch_array($sqlfield);
          print_r($rowfield); 
          gruß
          peter
          Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
          Meine Seite

          Comment


          • #6
            Hallo TobiaZ

            das hätte ich auch gedacht.


            funzt aber net..

            print_r($t_rowfield); ist leer!

            Comment


            • #7
              @kropff

              nein es sind mehrer DS

              zb ID[Field],int(5) unsigned [Type] ,auto_increment [Extra]..
              TableName [Field],varchar(50) [Type] ,.....
              FG_USer[Field], tinyint(1) [Type] ....

              die lese ich alle in de schleife aus und packe das ergebnis in ein array

              welches ich mit der foreach schleife wieder auseinanderpflücke...was auch alles prima funktioniert. bis auf den einen durchlauf zuviel.

              Comment


              • #8
                funzt aber net..

                print_r($t_rowfield); ist leer!
                code zeigen!

                Comment


                • #9
                  nein es sind mehrer DS
                  stimmt, hast recht. habe noch nie mit so einer abfrage gearbeitet.
                  print_r($t_rowfield); ist leer!
                  und was ergibt ein
                  PHP Code:
                  $sqlfield mysql_query('SHOW FIELDS FROM '.$db.'.'.$gettblname) or die (mysql_error()); 
                  gruß
                  peter
                  Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                  Meine Seite

                  Comment


                  • #10
                    PHP Code:
                    function CE_readoutFields($db,$tbl)
                    {
                                                                    
                      
                    $res mysql_query("SHOW FIELDS FROM " $db "." $tbl);
                      while(
                    $row mysql_fetch_array($res))
                      { 
                        
                    $fields[] = $row;
                      }

                      return 
                    $fields;

                    }



                    $fields CE_readoutFields("dbname""tbl_test");

                    foreach(
                    $fields as $fiels)
                      echo 
                    $field['Field'];

                    EDIT:
                    Ungetestet, den erste Tippfehler hab ich schon beseitigt.
                    Last edited by TobiaZ; 03-02-2008, 17:56.

                    Comment


                    • #11
                      PHP Code:

                      //Tabellenattribute wie Field, Type usw einer 
                      //beliebigen Tabelle werden in einem array geparkt
                      function CE_readoutFields($db,$gettblname){  
                                                                    
                      $sqlfield mysql_query("SHOW FIELDS FROM $db.".$gettblname." ");
                          
                          while(
                      $rowfield[] = mysql_fetch_array($sqlfield)){        
                              
                             
                      // $t_rowfield = $rowfield; unnötig
                          
                      }
                          
                          return 
                      $t_rowfield;
                              
                      }


                      //array wird auseinandergepflückt und ich lasse mir 
                      //die Tabellenspalten und deren Typ anzeigen
                      $showField CE_readoutFields("dbname""tbl_test");

                      foreach(
                      $showField as $key =>$showFieldName){
                          echo 
                      $key.$showFieldName['Field'].$showFieldName['Type'];                        

                      wie gesagt alles wunderbar fehler werden nicht angezeigt ..
                      das einzige problm ist der eine durchlauf der foreach schleife zuviel

                      dieser stört bei der weiteren abarbeitung in meinem weteren code.

                      ich hatte das auch alles schon zum funktionieren gebracht , jedoch ist meine platte mit dem code vorgestern gecrasht und ich habe keien Ahnung mehr was das Ausschlaggebende zum funktionieren dieses Codes war. Kommt Zeit kommt Rat..
                      Last edited by kasIQ; 03-02-2008, 18:12.

                      Comment


                      • #12
                        PHP Code:
                            while($rowfield[] = mysql_fetch_array($sqlfield)){        
                                
                                
                        $t_rowfield $rowfield;
                            }
                            
                            return 
                        $t_rowfield
                        Das ist total überflüssig. Unsinnigerweise überschreibst du $_rowfeld immer wieder. Dann lass es lieber ganz raus und verwende nur $rowfeld. (siehe mein snippet)

                        Danach mal ne testausgabe vom Array machen, erhält es die gewünschte Struktur und Inhalt?

                        wie gesagt alles wunderbar fehler werden nicht angezeigt ..
                        das einzige problm ist der eine durchlauf der foreach schleife zuviel

                        dieser stört bei der weiteren abarbeitung in meinem weteren code.
                        Wie gesagt, testausgabe des Arrays (gerne auch mal hier posten)

                        Comment


                        • #13
                          @Tobiaz

                          ja das mit deinem Code ist besser, doch lasse dir mal den

                          $key anzeigen bei der schleife und du wirst feststellen , dass da ein durchlauf zuviel ist.
                          PHP Code:
                          foreach($fields as $key => $fiels){

                          echo 
                          $key.$field['Field'];


                          kannst das ja mal mit ner beliebigen Tabelle versuchen

                          und wehe das klappt bei dir ;-)

                          Comment


                          • #14
                            Hab meinen Code noch mal angepasst, jetzt sollte es besser sein. Und wenn du noch ein mal postest, dass es nicht geht, ohne endlich das Array auszugeben, ...

                            Da wird nämlich wahrscheinlich ein "false" drin stehen, was jedoch kein array ist.

                            Comment


                            • #15
                              PHP Code:

                              ergebnis des arrays
                              ();

                              Array ( 
                              [
                              0] => Array ( [0] => ID [Field] => ID [1] => int(5unsigned [Type
                              => 
                              int(5unsigned [2] => NO [Null] => NO [3] => PRI [Key] => PRI
                               
                              [4] => [Default] => [5] => auto_increment [Extra] => 
                              auto_increment 

                              [
                              1] => Array ( [0] => TableName [Field] => TableName [1] => 
                              varchar(50) [Type] => varchar(50) [2] => NO [Null] => 
                              NO [3] => UNI [Key] => UNI [4] => [Default] => [5] => 
                              [
                              Extra] => ) 

                              [
                              2] => Array ( [0] => FG_SU [Field] => FG_SU [1] => 
                              tinyint(1) [Type] => tinyint(1) [2] => NO [Null] => NO [3] =>
                               [
                              Key] => [4] => [Default] => [5] => [Extra] => )

                              [
                              3] => Array ( [0] => FG_ADMIN [Field] => FG_ADMIN [1] => 
                              tinyint(1) [Type] => tinyint(1) [2] => NO [Null] => NO [3] =>
                               [
                              Key] => [4] => [Default] => [5] => [Extra] => ) 

                              [
                              4] => Array ( [0] => FG_USER [Field] => FG_USER [1] => 
                              tinyint(1) [Type] => tinyint(1) [2] => NO [Null] => NO [3] => 
                              [
                              Key] => [4] => [Default] => [5] => [Extra] => ) 


                              [
                              5] => ) //??? 

                              ergbnis von $key.fiels['Field'];

                              0ID
                              1TableName
                              2FG_SU
                              3FG_ADMIN
                              4FG_USER
                              5
                              //Tabelle hat nur aber nur 5 DS 
                              Last edited by kasIQ; 03-02-2008, 18:09.

                              Comment

                              Working...
                              X