| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

21-05-2009, 21:23
|
|
Cetax
Registrierter Benutzer
|
|
Registriert seit: Feb 2009
Ort: Niedersachsen
Beiträge: 14
|
|
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> " . $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
|

21-05-2009, 21:36
|
|
asp2php
Banned
|
|
Registriert seit: Feb 2004
Beiträge: 11.746
|
|
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.
|

21-05-2009, 22:28
|
|
Cetax
Registrierter Benutzer
|
|
Registriert seit: Feb 2009
Ort: Niedersachsen
Beiträge: 14
|
|
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 ?
Zitat:
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> " . $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
|

21-05-2009, 23:10
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Zitat:
Zitat von Cetax
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.
|

21-05-2009, 23:17
|
|
Edlly
Registrierter Benutzer
|
|
Registriert seit: Apr 2004
Beiträge: 59
|
|
Zitat:
Zitat von Cetax
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> " . $data[$c] . "</TD>\n";
}
echo "</TR>\n";
// Abbruch nach 5 zeilen
if($i >= "4"){
break;
}else{
$i++; }
fclose ($fp);
?>
|

22-05-2009, 00:11
|
|
Cetax
Registrierter Benutzer
|
|
Registriert seit: Feb 2009
Ort: Niedersachsen
Beiträge: 14
|
|
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:
Zitat von Edlly
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> " . $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
|

22-05-2009, 02:27
|
|
Cetax
Registrierter Benutzer
|
|
Registriert seit: Feb 2009
Ort: Niedersachsen
Beiträge: 14
|
|
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 ($fp, 10000, ";")) {
$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> " . $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
|

22-05-2009, 13:25
|
|
Edlly
Registrierter Benutzer
|
|
Registriert seit: Apr 2004
Beiträge: 59
|
|
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 ($fp, 10000, ";")) { $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> '. $data[$c].'</TD>'."\n"; } $output .= '</TR>'."\n";
// Abbruch nach 10 zeilen if($i >= "10"){ break; }else{ $i++; } }
fclose ($fp);
echo $output; ?>
|

22-05-2009, 17:52
|
|
Cetax
Registrierter Benutzer
|
|
Registriert seit: Feb 2009
Ort: Niedersachsen
Beiträge: 14
|
|
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
|

22-05-2009, 18:03
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Zitat:
Zitat von Cetax
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> '. $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.
|

22-05-2009, 18:06
|
|
asp2php
Banned
|
|
Registriert seit: Feb 2004
Beiträge: 11.746
|
|
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à ...
|

23-05-2009, 18:56
|
|
Edlly
Registrierter Benutzer
|
|
Registriert seit: Apr 2004
Beiträge: 59
|
|
Zitat:
Zitat von asp2php
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...
|

24-05-2009, 00:06
|
|
Cetax
Registrierter Benutzer
|
|
Registriert seit: Feb 2009
Ort: Niedersachsen
Beiträge: 14
|
|
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 ($fp, 10000, ";")) {
$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> '. $data[$c] .' </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
|

24-05-2009, 09:06
|
|
Edlly
Registrierter Benutzer
|
|
Registriert seit: Apr 2004
Beiträge: 59
|
|
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  ...
|

24-05-2009, 16:56
|
|
Cetax
Registrierter Benutzer
|
|
Registriert seit: Feb 2009
Ort: Niedersachsen
Beiträge: 14
|
|
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 ($fp, 10000, ";")) { 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> '. $data[$c].' </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
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|