1.7k Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von
Hi!

Kann mir jemand sagen, warum bei dieser Abfrage der Inhalt meiner Tabelle nicht angezeigt wird?



<?php
mysql_connect("server","nutzer","passwort");

$db_sel = mysql_select_db("datenbank") or die("Auswahl der Datenbank fehlgeschlagen");

$sql = "SELECT * FROM `tabelle` LIMIT 0, 30";

$db_erg = mysql_query( $sql );
if ( ! $db_erg )
{
die('Ungültige Abfrage: ' . mysql_error());
}

echo '<table border="1">';
while ($zeile = mysql_fetch_array( $db_erg, MYSQL_ASSOC))
{
echo "<tr>";
echo "<td>". $zeile['1'] . "</td>";
echo "<td>". $zeile['2'] . "</td>";
echo "<td>". $zeile['3'] . "</td>";
echo "<td>". $zeile['4'] . "</td>";
echo "<td>". $zeile['5'] . "</td>";
echo "<td>". $zeile['6'] . "</td>";
echo "</tr>";
}
echo "</table>";

mysql_free_result( $db_erg );
?>

6 Antworten

0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Weil deine Tabellenspalten mit Sicherheit nicht "1", "2", "3"... usw heißen. Es ist ein Unterschied, ob du einen Feldindex über eine Zahl oder einen Text ansprichst. Du machst letzteres.

Was du eigentlich wolltest (erkenne die Unterschiede):
echo '<table border="1">';
while ($zeile = mysql_fetch_array( $db_erg, MYSQL_BOTH))
{
echo "<tr>";
echo "<td>". $zeile[1] . "</td>";
echo "<td>". $zeile[2] . "</td>";
echo "<td>". $zeile[3] . "</td>";
echo "<td>". $zeile[4] . "</td>";
echo "<td>". $zeile[5] . "</td>";
echo "<td>". $zeile[6] . "</td>";
echo "</tr>";
}
echo "</table>";


Wie es sehr viel einfacher geht:
echo '<table border="1">';
while( $zeile= mysql_fetch_array( $db_erg, MYSQL_BOTH ) ) {
echo '<tr>';
foreach( $zeile as $wert ) echo "<td>$wert</td>";
echo '</tr>';
}
echo '</table>';
0 Punkte
Beantwortet von
Hallo! Danke für die HIlfe. Es funktioniert. Ich habe aber MYSQL_BOTH wieder geändert, da alle Spalten doppelt angezeigt wurden.

Mit welchen Befehl ann ich eine "Umblätter-Funktion" einbauen, um Platz nach unten zu sparen?

Gruß und nochmal danke!!!!
0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Stimmt, mein Fehler: bei MYSQL_BOTH wäre sowohl der Zugriff über Zahl (0, 1, 2...) als auch den Tabellennamen für die Spalten möglich - was in der Schleife doppelt die Spalten ausgibt.

Deine "Umblätter-Funktion" hast du schon in der SQL-Abfrage drin: LIMIT.
0 Punkte
Beantwortet von
Ja, das mit Limit ist soweit klar. Nur der Link zu den nächsten hier 30 Einträgen fehlt.
0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Wenn dir das mit dem LIMIT tatsächlich klar ist, dann fehlt dir das Verständnis zu HTML-Parametern. Folgendes Beispiel:


<?php

$oCon= mysql_connect( 'localhost', 'root', '' ) or die( 'Verbindung fehlgeschlagen: '. mysql_error() );
mysql_select_db( 'test' ) or die( 'Auswahl der Datenbank fehlgeschlagen: '. mysql_error() );

// Aufrufparameter feststellen und ggf. erfassen
$iStart= isset( $_REQUEST['start'] )? max( (int)$_REQUEST['start'], 0 ): 0;
$iProSeite= 30; // wieviele Datensätze auf einer Seite angezeigt werden

$sql= "SELECT * FROM tabelle2 LIMIT $iStart, $iProSeite";

$oErg= mysql_query( $sql ) or die( 'Abfrage fehlgeschlagen: '. mysql_error() );

$sOut= '<table border="1">';
while( $aSatz= mysql_fetch_array( $oErg, MYSQL_NUM ) ) { // alle Ergebnisdatensätze durchlaufen
$sOut.= '<tr>';
foreach( $aSatz as $sWert ) $sOut.= "<td>$sWert</td>"; // alle Spalten durchlaufen
$sOut.= '</tr>';
}
$sOut.= '</table>';

mysql_free_result( $oErg ); // Ergebnis freigeben
mysql_close( $oCon ); // Verbindung freigeben

// Link nur anzeigen, wenn nicht bereits am Anfang; MAX() verhindert negative Startpunkte
if( $iStart> 0 ) $sOut.= '<br><a href="?start='. ( max( $iStart- $iProSeite, 0 ) ). '">vorige Seite</a>';

// Link immer anzeigen - wir wissen nicht, wieviel Datensätze noch kommen könnten
$sOut.= '<br><a href="?start='. ( $iStart+ $iProSeite ). '">nächste Seite</a>';

echo $sOut;

?>
0 Punkte
Beantwortet von
danke! ich werde mir das mal genauer anschauen. hatte bereits versucht bei limit X, Y , X und Y durch andere parameter zu ersetzen. hat aber nicht geklappt. mir ist aber schon geholfen. DANKE!
...