Durchnummerieren lässt oberste Zeile verschwinden
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
code
datenbank
datum
ergebnis
fehler
fehlermeldung
holen
klasse echo
klasse schule
nachname
ordern
schleife
schule
set
treffer
variable schreiben
vorname
zeile
ziehen
-
Seit dem ich die Zeilen in meiner Tabelle durchzählen lasse, fehlt die oberste Zeile.
Woran kann das liegen?
Hier mal der passende Codeausschnit:
for($i=1; $row = mysql_fetch_array($result); $i++) { //Daten in Variable schreiben $Vorname = $row['Vorname']; $Nachname = $row['Nachname']; $Klasse = $row['Klasse']; $Schule = $row['Schule']; $schuesse = $row['schuesse']; echo"<tr>"; echo '<th>'.$i.'</th>'; echo"<th>$Vorname</th>"; echo"<th>$Nachname</th>"; echo"<th>$Klasse</th>"; echo"<th>$Schule</th>"; echo"<th>$schuesse</th>"; echo "</tr>"; }
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Lass doch mal die Schleife bei Null anfangen…for($i=1; $row = mysql_fetch_array($result); $i++
-
werktags schrieb:
Lass doch mal die Schleife bei Null anfangen…for($i=1; $row = mysql_fetch_array($result); $i++
Habe ich schon versucht, ändert aber nichts an dm Problem.
Dann fängt er mit der Zweiten zeile bei 0 an.
Von der Ersten ist jedoch immer noch nichts zu sehen.
Beitrag zuletzt geändert: 29.3.2010 23:27:50 von no-smoke -
An dem wenigen Code kann ich keinen Fehler erkennen, ob du nun mit 1 oder mit 666 zu zählen beginnst, ist eigentlich egal.
Du solltest allerdings mal die SQL-Abfrage prüfen, die zu $result führt, also ob dort überhaupt alle Zeilen vertreten sind.
Außerdem kannst du dir innerhalb der Schleife mit
print_r ($row);
den Inhalt von $row darstellen lassen (dazu in den Quelltext gucken, damit es mit der Formatierung klappt).
-
iniquitius schrieb:
den Inhalt von $row darstellen lassen (dazu in den Quelltext gucken, damit es mit der Formatierung klappt).
Ich habe alles überprüft, doch es ändert sich nichts.
Nehme ich die Nummerierungszeile raus, funktioniert alles.
<html> <head> <link rel="stylesheet" href="./css/style.css" type="text/css" /> </head> <body> <?php //die Konfigurationsdateien lesen error_reporting(E_ALL); include "inc/config.php"; //Datebnbanklogin @mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR die(mysql_error()); mysql_select_db(MYSQL_DATABASE) OR die(mysql_error()); ?> <table width="100%" border="0" cellpadding="0" cellspacing="2"> <tr bgcolor='B2DFEE'> <th>Platz</th> <th>Vorname</th> <th>Nachname</th> <th>Klasse</th> <th>Schule</th> <th>Anzahl der Treffer</th> </tr> <?php //Datensätze aus Datenbank holen $holen = "SELECT Vorname, Nachname, Klasse, Schule, id, date, schuss1+schuss2+schuss3+schuss4+schuss5+schuss6 AS schuesse FROM teilnehmer ORDER BY schuesse DESC;"; $result = mysql_query($holen) OR die(mysql_error()); if($result) { echo ""; if(mysql_num_rows($result)) { while($row = mysql_fetch_assoc($result)) { for($i=1; $row= mysql_fetch_array($result); $i++) { //Daten in Variable schreiben $Vorname = $row['Vorname']; $Nachname = $row['Nachname']; $Klasse = $row['Klasse']; $Schule = $row['Schule']; $schuesse = $row['schuesse']; echo"<tr>"; echo '<th>'.$i.'</th>'; echo"<th>$Vorname</th>"; echo"<th>$Nachname</th>"; echo"<th>$Klasse</th>"; echo"<th>$Schule</th>"; echo"<th>$schuesse</th>"; echo "</tr>"; } }} } else { echo "Die Datensätze konnten nicht aus der Datenbank geholt werden"; } ?> </table> </body> </html>
-
Korrigiert:
<html> <head> <link rel="stylesheet" href="./css/style.css" type="text/css" /> </head> <body> <?php //die Konfigurationsdateien lesen error_reporting(E_ALL); include "inc/config.php"; //Datebnbanklogin @mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR die(mysql_error()); mysql_select_db(MYSQL_DATABASE) OR die(mysql_error()); ?> <table width="100%" border="0" cellpadding="0" cellspacing="2"> <tr bgcolor='B2DFEE'> <th>Platz</th> <th>Vorname</th> <th>Nachname</th> <th>Klasse</th> <th>Schule</th> <th>Anzahl der Treffer</th> </tr> <?php //Datensätze aus Datenbank holen $holen = "SELECT Vorname, Nachname, Klasse, Schule, id, date, schuss1+schuss2+schuss3+schuss4+schuss5+schuss6 AS schuesse FROM teilnehmer ORDER BY schuesse DESC;"; $result = mysql_query($holen) OR die(mysql_error()); if($result) { for($i=1; $row= mysql_fetch_assoc($result); $i++) { //Daten in Variable schreiben $Vorname = $row['Vorname']; $Nachname = $row['Nachname']; $Klasse = $row['Klasse']; $Schule = $row['Schule']; $schuesse = $row['schuesse']; echo"<tr>"; echo '<th>'.$i.'</th>'; echo"<th>$Vorname</th>"; echo"<th>$Nachname</th>"; echo"<th>$Klasse</th>"; echo"<th>$Schule</th>"; echo"<th>$schuesse</th>"; echo "</tr>"; } } else { echo "Die Datensätze konnten nicht aus der Datenbank geholt werden"; } ?> </table> </body> </html>
-
Aha, guckst du hier:
while($row = mysql_fetch_assoc($result)) { for($i=1; $row= mysql_fetch_array($result); $i++) { .... }
1. Prüfen der While-Bedingung, indem das 1. Ergebnis auf dem Result-Set $result geholt wird
2. Eintritt in die FOR-Schleife, wobei in jedem Schleifendurchlauf zu Beginn nochmal ein Ergebnis aus dem Result-Set $result geholt wird, beginnend beim 2. Ergebnis (das 1. wurde ja in der While-Schleife rausgezogen).
Demnach:
Die umschließende WHILE-Schleife kann entfallen, die FOR-Schleife reicht aus als Abbruchbedingung (wird getan, solange er ein Array aus dem Result-Set $result ziehen kann).
Außerdem:
$result = mysql_query($holen) OR die(mysql_error()); if($result) {
Sieht für mich falsch aus: Falls die Abfrage kein Ergebnis (bzw. Fehler) bringt, wird das Programm mit einer Fehlermeldung die(mysql_error()); beendet. Deswegen ist die Prüfung, ob $result anliegt (nächste Zeile) überflüssig. -
iniquitius schrieb:
Sieht für mich falsch aus: Falls die Abfrage kein Ergebnis (bzw. Fehler) bringt, wird das Programm mit einer Fehlermeldung die(mysql_error()); beendet. Deswegen ist die Prüfung, ob $result anliegt (nächste Zeile) überflüssig.
Perfekt, nun funktioniert es.
Danke an die obrigen beiden Posts.
Thema ist damit gelöst!
Beitrag zuletzt geändert: 30.3.2010 21:11:29 von no-smoke -
Noch ein letzter Nachtrag, wo ich meinen Beitrag lese:
Nie mittels die(mysql_error()) die Fehlermeldung eines Systems direkt an den Nutzer rausgeben. Daraus kann ein Angreifer Rückschlüsse auf die Umgebung ziehen und gezielt attackieren. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage