CSV Auslesen mit Hintergrundfarbe...

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

  • CSV Auslesen mit Hintergrundfarbe...

    Hallo,
    ich brauche doch nochmal eine Hilfe bzw. Denkanstoß.
    Ich lasse mir mit folgendem Code eine CSV Tabelle ausgeben:
    Code:
    <?php
    $row = 1;
    $fp = fopen ("test.csv","r");
    echo "<TABLE BORDER=\"1\">\n";
    while ($data = fgetcsv ($fp, 100, ";")) {
    $num = count ($data);
    echo "<TR>\n";
    $row++;
    for ($c=0; $c<$num; $c++) {
    echo "<TD>&nbsp;" . $data[$c] . "</TD>\n";
    }
    echo "</TR>\n";
    }
    fclose ($fp);
    ?>
    Damit wird der komplette Inhalt dargestellt. Was muss ich ändern,wenn ich nur die ersten 5 Zeilen ausgegeben haben möchte?

    Und als zweites,ist es möglich die erste Zeile die Hintergundfarbe "rot" zugeben und den Rest der Tabelle die Hintergrundfarbe "grey" ?

    Vielen Dank für Eure Hilfe

    Greatz
    Cetax

  • #2
    1. Laufvariable definieren und bei jedem Durchlauf inkrementieren, bei 5 Schleifenabbruch

    2. CSS-Klasse definieren, bei Laufvariable == 0 CSS-Klasse für rot zuweisen, sonst für grau.

    Kommentar


    • #3
      Hallo asp2php,
      danke für die schnelle Antwort.
      Also, das mit der Hintergrundfarbe (für die ganze Tabelle) habe ich ja noch hinbekommen, aber der rest
      Ich habe deine beiden Hinweise gegoogelt aber irgendwie nicht das gefunden.
      Wie und wo bau ich das in meinen Code ein ?

      1. Laufvariable definieren und bei jedem Durchlauf inkrementieren, bei 5 Schleifenabbruch

      2. CSS-Klasse definieren, bei Laufvariable == 0 CSS-Klasse für rot zuweisen, sonst für grau.
      Es sei noch angemerkt,das ich in Sachen PHP Anfänger bin.

      Meinst du mit Laufvariable sowas:

      Code:
      For ($i=1; $i <=5; $i+=1)
      Wo kommt das rein in meinen Code:
      Code:
      <?php
      $row = 1;
      $fp = fopen ("test.csv","r");
      echo "<TABLE BORDER=\"1\">\n";
      while ($data = fgetcsv ($fp, 100, ";")) {
      $num = count ($data);
      echo "<TR>\n";
      $row++;
      for ($c=0; $c<$num; $c++) {
      echo "<TD>&nbsp;" . $data[$c] . "</TD>\n";
      }
      echo "</TR>\n";
      }
      fclose ($fp);
      ?>
      Meine CSS-Klasse sieht so aus:
      Code:
      TD {
          background-color : #DCDCDC;
          color : #000000;
          font-size : 14px;
        }
      Ich steh vol aufń schlauch

      Kommentar


      • #4
        Zitat von Cetax Beitrag anzeigen
        Meinst du mit Laufvariable sowas:

        Code:
        For ($i=1; $i <=5; $i+=1)
        Das wäre keine Variable, sondern eine Schleife.

        Laufvariable - ein Zähler, dessen Wert du mit jedem Schleifendurchlauf um eins erhöhst, und dessen Wert du abfragen kannst, um ggf. die Schleife zu verlassen.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Zitat von Cetax Beitrag anzeigen
          Hallo asp2php,

          Meinst du mit Laufvariable sowas:

          Code:
          For ($i=1; $i <=5; $i+=1)
          Hmm du hast doch schon eine Schleife...


          Ist aber Ungetestet!
          Code:
          <?php
          // Zähl Var
          $i = 0;
          
          // Farbwechsler
          $ColorCounter = 0;
          
          $row = 1;
          $fp = fopen ("test.csv","r");
          echo "<TABLE BORDER=\"1\">\n";
          // Deine Schleie
          while ($data = fgetcsv ($fp, 100, ";")) {
          $num = count ($data);
          
          // Farbe Ändern?
          if($ColorCounter == 1){
          
          $ColorCounter = "0"; 
          $bg = "red"; 
          }else{
          
          $bg = "grey"; 
          $ColorCounter = "1"; }
          echo "<TR style="background-color: ".$bg ." ;>\n";
          $row++;
          for ($c=0; $c<$num; $c++) {
          echo "<TD>&nbsp;" . $data[$c] . "</TD>\n";
          }
          echo "</TR>\n";
          // Abbruch nach 5 zeilen
          if($i >= "4"){
          
               break;
          }else{
          
               $i++; }
          fclose ($fp);
          ?>

          Kommentar


          • #6
            Hallo Edlly,
            vielen Dank für die Hilfe,leider gibt der Code nur eine leere Seite aus.
            Ich verstehs net. Einen Fehler habe ich gefunden, bei:
            Code:
            echo "<TR style="background-color: ".$bg ." ;>\n";
            fehlt der \ hinter style=
            Aber mehr seh ich leider nicht, vieleicht kannst du dir den Code,wenn du zeit hast noch mal anschauen.
            Ich arbeite hier mit Linux und Quanta (HTML Editor) und habe keinen PHP Editor.

            Zitat von Edlly Beitrag anzeigen
            Hmm du hast doch schon eine Schleife...

            Ist aber Ungetestet!
            Code:
            <?php
            // Zähl Var
            $i = 0;
            
            // Farbwechsler
            $ColorCounter = 0;
            
            $row = 1;
            $fp = fopen ("test.csv","r");
            echo "<TABLE BORDER=\"1\">\n";
            // Deine Schleie
            while ($data = fgetcsv ($fp, 100, ";")) {
            $num = count ($data);
            
            // Farbe Ändern?
            if($ColorCounter == 1){
            
            $ColorCounter = "0"; 
            $bg = "red"; 
            }else{
            
            $bg = "grey"; 
            $ColorCounter = "1"; }
            echo "<TR style=\"background-color: ".$bg ." ;>\n";
            $row++;
            for ($c=0; $c<$num; $c++) {
            echo "<TD>&nbsp;" . $data[$c] . "</TD>\n";
            }
            echo "</TR>\n";
            // Abbruch nach 5 zeilen
            if($i >= "4"){
            
                 break;
            }else{
            
                 $i++; }
            fclose ($fp);
            ?>
            Vielen Dank für deine Verständlich Hilfe.

            Gruß
            Cetax

            Kommentar


            • #7
              Moin Moin,
              also ich bin schon mal meinem Ziel einen Schritt näher.
              Ich habe es jetzt hinbekommen, das er mir die zweite Zeile in rot ausgibt,
              aber er soll mir dann auch noch Zeile 3 bis 10 ausgeben in grau.

              Das macht er aber nicht, er gibt mir ab Zeile 2 "jede zweite Zeile" aus.

              Und das versteh ich nicht,vieleicht kann da mal jemand drüberschauen
              der sich damit aus kennt und es verbesser versteht.

              Hier mein PHP-Code :
              PHP-Code:
              <?php

              $row 
              1;
              $fp fopen ("Werte.csv","r");
              // Zähl Var
              $i 0;
              // Farbwechsler
              $ColorCounter 0;

              echo 
              "<TABLE BORDER=\"0\">\n";
              // Deine Schleie
              while ($data fgetcsv ($fp10000";")) {
              $num count ($data);

              // Farbe Ändern?
              if($ColorCounter == 0){

              $ColorCounter "1"
              $bg "red"
              }
              else
              {
              $bg "grey"
              $ColorCounter "1"; }
              echo 
              "<TR style=\"background-color: "$bg ." ;>\n";
              $row++;
              for (
              $c=0$c<$num$c++) {
              echo 
              "<TD>&nbsp;" $data[$c] . "</TD>\n";
              }
              echo 
              "</TR>\n";
              // Abbruch nach 10 zeilen
              if($i >= "9")
              {

                   break;
              }
                   else
              {

                   
              $i++; }

              }
              fclose ($fp);
              ?>
              Und hier die CSV Datei:
              Code:
              sep=;
              Typ;Datum;Name;Rufnummer;Nebenstelle;Eigene Rufnummer;Dauer
              
              1;28.01.09 15:17;Bona;0123456;ISDN;12345;0:06
              1;28.01.09 15:13;Buero;01234456;ISDN;23456;0:02
              3;28.01.09 14:10;Luen;02345467;ISDN;345678;0:01
              3;28.01.09 05:28;;0034568855;ISDN;12345678;0:01
              1;26.01.09 17:29;Buero;123456;ISDN;123345656;0:03
              3;25.01.09 20:15;;01234567898;ISDN;12345656;0:01
              3;25.01.09 19:56;Mel;12345677;ISDN;12345656;0:12
              1;25.01.09 19:15;Bona;0123456;ISDN;12345;0:23
              Ich hoffe es sieht und versteht jemand, ich seh irgendwie
              den wald vor lauter bäume nicht.

              Greats
              Stefan

              Kommentar


              • #8
                Also! Ich hab dein Problem missverstaden. ich dachte du willst die Zeilen im Wechselausgeben also Rot, Grau, Rot, Grau...

                Wenn du in den HTML Quelltext geschaut hättest, z.B. mit Firefox wäre die sicherlich aufgefallen das er die Zeilen ausgibt, aber da ein fehler im HTML vorliegt den ein " fehlt er es nicht zeigen kann. Firefox hebt solche sachen Farbig sehr schön hevor.

                PHP-Code:
                echo "<TR style=\"background-color: "$bg ." ;\">\n"
                Besser wäre es eh wenn du dir angewöhnen würdest mit ' zu arbeiten. Dann kannst du dir die \ sparen und die fehlerquote sinkt!

                PHP-Code:
                    $output .= '<TR style="background-color: '$bg .' ;">'."\n"
                Das nächste ist, wofür ist dein $row??

                Dann beim testen, arbeiten usw...
                error_reporting(E_ALL);
                Wäre die sicherlich auch einiges an fehlern aufgefallen.

                Ich habe den Code mal etwas sauberer gemacht. Aber nicht das du dich darauf jetzt ausruhst!

                PHP-Code:
                <?php
                error_reporting
                (E_ALL);

                // ??
                //$row = 1;
                $fp fopen ("Werte.csv","r");

                // Zähl Var
                $i 0;

                $output '<TABLE BORDER="0">'."\n";
                // Deine Schleie
                while ($data fgetcsv ($fp10000";")) {
                 
                    
                $num count ($data);

                    
                // Farbe Ändern?
                    
                if($i == 1){
                        
                $bg "red"
                    }else{
                        
                $bg "grey"; }
                    
                    
                $output .= '<TR style="background-color: '$bg .' ;">'."\n";

                    
                // ??
                    //$row++;

                    
                for ($c=2$c<$num$c++) {
                     
                        
                $output .= '<TD>&nbsp; '$data[$c].'</TD>'."\n"; }
                        
                    
                $output .= '</TR>'."\n";

                    
                // Abbruch nach 10 zeilen
                    
                if($i >= "10"){
                    
                        break;
                    }else{
                    
                        
                $i++; }
                    }

                fclose ($fp);

                echo 
                $output;
                ?>

                Kommentar


                • #9
                  Hallo Edlly,
                  erstmal DANKE !!!!

                  Funktioniert super, aber es werden nicht die ersten beiden Spalten angezeigt. :-(
                  Ich habe die letzten Stunden versucht, mit irgendwelchen veränderungen,
                  herauszufinden was ich ändern muss damit alle Spalten angezeigt werden.
                  Aber ohne erfolg
                  Entweder ich sitze schon zu lange davor oder ich bin einfach zu blöd.

                  Die CSV hat 7 Spalten, angezeigt werden 5. Es fehlen die ersten beiden.
                  Typ und Datum.

                  Code:
                  sep=;
                  Typ;Datum;Name;Rufnummer;Nebenstelle;Eigene Rufnummer;Dauer
                  
                  1;28.01.09 15:17;Bona;0123456;ISDN;12345;0:06
                  1;28.01.09 15:13;Buero;01234456;ISDN;23456;0:02
                  3;28.01.09 14:10;Luen;02345467;ISDN;345678;0:01
                  3;28.01.09 05:28;;0034568855;ISDN;12345678;0:01
                  1;26.01.09 17:29;Buero;123456;ISDN;123345656;0:03
                  3;25.01.09 20:15;;01234567898;ISDN;12345656;0:01
                  3;25.01.09 19:56;Mel;12345677;ISDN;12345656;0:12
                  1;25.01.09 19:15;Bona;0123456;ISDN;12345;0:23
                  Kann mir vieleicht nochmal jemand sagen an welcher schraube ich drehen muss?
                  Und vieleicht auch mit einer kleiner erläuterung ?

                  Ich versteh es nicht....


                  Vielen Dank,
                  speziell noch mal an Edlly


                  Greatz
                  Cetax

                  Kommentar


                  • #10
                    Zitat von Cetax Beitrag anzeigen
                    Funktioniert super, aber es werden nicht die ersten beiden Spalten angezeigt. :-(
                    Ich habe die letzten Stunden versucht, mit irgendwelchen veränderungen,
                    herauszufinden was ich ändern muss damit alle Spalten angezeigt werden.
                    Es wird langsam mal Zeit, dass du blosses "Herumprobieren" durch Nachvollziehen und Verstehen ersetzt.

                    PHP-Code:
                        for ($c=2$c<$num$c++) {
                         
                            
                    $output .= '<TD>&nbsp; '$data[$c].'</TD>'."\n"; } 
                    $data ist das Array, welches die Spalten einer Zeile enthält, und an dieser Stelle werden diese nacheinander in einer Schleife an den Ausgabestring angehängt.

                    So, und jetzt schaust du dir mal an, von wo bis wo diese Schleife läuft - na ...?
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #11
                      OffTopic:
                      Ich glaube fast, dass Edlly mit Absicht so den Code gegeben hat, er will wahrscheinlich testen, ob du den Code blind übernimmst oder nicht, et voilà ...

                      Kommentar


                      • #12
                        Zitat von asp2php Beitrag anzeigen
                        OffTopic:
                        Ich glaube fast, dass Edlly mit Absicht so den Code gegeben hat, er will wahrscheinlich testen, ob du den Code blind übernimmst oder nicht, et voilà ...
                        Ein wenig ... es fehlt auch noch eine If abfrage aber da sollte er vieleicht sleber drauf kommen...

                        Kommentar


                        • #13
                          Guten abend,
                          also so langsam kommt bei mir die erleuchtung.
                          Mein Code sieht jetzt so aus :
                          PHP-Code:
                          <?php
                          // Liest die CSV Tabelle der Fritzbox ein
                          $fp fopen ("Werte.csv","r");

                          // Zähl Var
                          $i 0;

                          $output '<TABLE BORDER="0">'."\n";
                          // Deine Schleife
                          while ($data fgetcsv ($fp10000";")) {

                              

                              
                          $num count ($data);

                              
                          // Farbe Ändern?
                              
                          if($i == 1){
                                  
                          $bg "#BDC89D"
                              }else{
                                  
                          $bg "#E7EBD9"; }


                              
                              
                          $output .= '<TR style="background-color: '$bg .' ;">'."\n";


                              

                              for (
                          $c=0$c<$num$c++) {
                                   if(
                          $i != 2// blendet die dritte zeile aus
                                
                                  
                          $output .= '<TD>&nbsp; '$data[$c] .' &nbsp;</TD>'."\n"; }

                                  
                              
                          $output .= '</TR>'."\n";

                              
                          // Abbruch nach 10 zeilen
                              
                          if($i >= "10"){

                                  break;
                              }else{
                              
                                  
                          $i++; }
                              }

                          fclose ($fp);

                          echo 
                          $output;
                          ?>
                          Jetzt wird mir die Tabelle ab Spalte 1 gezeigt.
                          Nun macht es aber keinen Sinn, das mir alle angezeigt werden (bis Zeile 10),
                          weil das CSV eine Anrufliste ist! Jetzt wäre es super und endlich fertig,
                          wenn mir die 2. Zeile (Typ;Datum;Name;Rufnummer;Nebenstelle;Eigene Rufnummer;Dauer)
                          und dann alle weitereren Zeilen, mit der 2 beim Typ angezeigt werden.

                          Klingt für mich sehr kompliziert, aber durch googeln habe ich folgendes gefunden:
                          PHP-Code:
                              if ( $data[0] != '2' {
                                  continue;
                              } 
                          Damit sollen die Zeilen mit einer 2 beim Typ ($data[0]) angezeigt werden.
                          Nur verstehe ich nicht, an welche Stelle das rein kommt.
                          Und wie bekomme ich am Anfang die zweite Zeile angezeigt?

                          Wäre super,wenn jemand Lust und Zeit hätte mir das zu zeigen, damit ich das vielleicht verstehe.

                          Vielen Dank für Eure Mühe

                          Gruß
                          Cetax

                          Kommentar


                          • #14
                            Hehe.. ;D

                            Ok diesmal sollst du aber Selber drauf kommen. Also du hast eine Var mit der du die Anzahl der Schleifen mitliest?
                            Und du weist welchen Wert du in Typ Spalte erwartest?
                            Dann kannst du das doch zu einer if() abfrage zusammenbasteln.

                            Also zb:

                            PHP-Code:
                            while(...){
                            if(
                            Zeile 2 OR TYP 2...){der Code wo die ausgabe Erstellt wird
                            Jetzt habe ich schon wieder mehr geholfen als ich wollte ...

                            Kommentar


                            • #15
                              Hi,
                              oh man... Ich glaub ich raff das nicht

                              Also, ich habe folgendes zusammen gestellt:

                              PHP-Code:
                              if($i '2' or $data[0] != '2' ){ der Code wo die ausgabe Erstellt wird  
                              Ich bin damit aber voll auf Holzweg glaub ich, denn egal wo ich das einbaue,ändert sich nichts ausser vieleicht mal die farbe.

                              $i -> heißt doch Zeile, oder ?
                              $data[0] -> gibt doch die Spalte 0 aus, oder ?

                              Mann, PHP ist ja echt komplizeirt,wenn man es nicht versteht
                              Wenn ich das von dir (Edlly) richtig verstehe, soll ich das unter der
                              Zeile mit while(...) einbauen, aber es ändert sich nichts.

                              PHP-Code:
                              <?php

                              // Liest die CSV Tabelle der Fritzbox ein
                              $fp fopen ("Werte.csv","r");

                              // Zähl Var
                              $i 0;

                              $output '<TABLE BORDER="0">'."\n";
                              // Deine Schleife
                              while ($data fgetcsv ($fp10000";")) {
                               
                               if(
                              $i '2' or $data[0] != '2' ){   // <<- Ist das hier richtig ? <<  

                                  
                              $num count ($data);

                                  
                              // Farbe Ändern?
                                  
                              if($i == 1){
                                      
                              $bg "#BDC89D"
                                  }else{
                                      
                              $bg "#E7EBD9"; }



                                  
                                  
                              $output .= '<TR style="background-color: '$bg .' ;">'."\n";


                                  for (
                              $c=0$c<$num$c++) {
                                   
                                   

                                      
                              $output .= '<TD>&nbsp; '$data[$c].' &nbsp;</TD>'."\n"; } 


                                      
                                  
                              $output .= '</TR>'."\n";

                                  
                              // Abbruch nach 10 zeilen
                                  
                              if($i >= "9"){

                                      break;
                                  }else{
                                  
                                      
                              $i++; }
                                  }
                              }
                              fclose ($fp);

                              echo 
                              $output;
                              ?>
                              Man ist das Compliziert.
                              Danke das du dir die Mühe machst mir das zu erläutern.

                              Gruss
                              Cetax

                              Kommentar

                              Lädt...
                              X