Array und Schleife

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • 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?
    Zuletzt geändert von kasIQ; 03.02.2008, 18: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

    Kommentar


    • #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

      Kommentar


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

        return 
        $t_rowfield
        so ist zumindest sinnvoll.

        Kommentar


        • #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

          Kommentar


          • #6
            Hallo TobiaZ

            das hätte ich auch gedacht.


            funzt aber net..

            print_r($t_rowfield); ist leer!

            Kommentar


            • #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.

              Kommentar


              • #8
                funzt aber net..

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

                Kommentar


                • #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

                  Kommentar


                  • #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.
                    Zuletzt geändert von TobiaZ; 03.02.2008, 18:56.

                    Kommentar


                    • #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..
                      Zuletzt geändert von kasIQ; 03.02.2008, 19:12.

                      Kommentar


                      • #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)

                        Kommentar


                        • #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 ;-)

                          Kommentar


                          • #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.

                            Kommentar


                            • #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 
                              Zuletzt geändert von kasIQ; 03.02.2008, 19:09.

                              Kommentar

                              Lädt...
                              X