Anfängerfrage zu Arrays.
pino
- php
Hallo,
ich habe begonnen php zu lernen und habe gleich mal eine Frage zu Arrays.
Ich habe mir mit folgender Zeile Daten aus einer Datenbank geholt:
$subject = @mysql_query("SELECT subject FROM news");
Diese habe ich dann in ein Array gepackt um sie in einer Tabelle anzeigen zu können.
while ( $row = mysql_fetch_array($subject) )
Jetzt habe ich aber in der Datenbank noch ein Feld mit einer id. Diese würde ich auch gerne in dasselbe Array packen. Also habe ich oben folgendes dazugefügt:
$id = @mysql_query("SELECT id FROM news");
Und beim Array dann das hier:
while ( $row = mysql_fetch_array($subject,$id) )
So klappt es aber leider nicht.
Wie bekomme ich noch mehr Daten in mein Array? Wie ist die korrekte Syntax dafür?
Ich möchte die Daten dann so in der Tabelle ausgeben:
{
echo(" <tr>\n");
echo(" <td>" . $row["id"] . "</td>\n");
echo(" <td>" . $row["subject"] . "</td>\n");
echo(" </tr>\n");
}
Danke für eure Hilfe!
Pino
Hallo pino,
$subject = @mysql_query("SELECT subject FROM news");
warum unterdrückst du eventuelle Fehlermeldungen?
Diese habe ich dann in ein Array gepackt um sie in einer Tabelle anzeigen zu können.
gibst du gleich in der while-Schleife aus oder schreibe die while-Schleife die Daten erst in ein array?
Jetzt habe ich aber in der Datenbank noch ein Feld mit einer id. Diese würde ich auch gerne in dasselbe Array packen. Also habe ich oben folgendes dazugefügt:
warum fragst du nicht einfach beide Spalten gleichzeitig ab? ->http://www.mysql.com/doc/de/SELECT.html
while ( $row = mysql_fetch_array($subject,$id) )
So klappt es aber leider nicht.
logisch mysql_fetch_array() erwartet als zweiten Parameter auch was anderes ->http://de3.php.net/mysql_fetch_array
echo(" <td>" . $row["id"] . "</td>\n");
echo(" <td>" . $row["subject"] . "</td>\n");
schau dir mal das dritte Beispiel auf der zweiten verlinken Seite an - die macht genau das was du bauchst.
Grüße aus Nürnberg
Tobias
Jetzt habe ich aber in der Datenbank noch ein Feld mit einer id. Diese würde ich auch gerne in dasselbe Array packen. Also habe ich oben folgendes dazugefügt:
warum fragst du nicht einfach beide Spalten gleichzeitig ab? ->http://www.mysql.com/doc/de/SELECT.html
Genau, und das geht so:
$sql = "SELECT id,subject FROM news";
//--> hier fragst du beide Spalten gleichzeitig ab,die Spalten müssen in gleicher Tabelle vorhanden sein.
$ergebnis_der_anfrage = mysql_query($sql);
//Du solltest noch die s.g. Verbindungskennung angeben, s. hierzu:
http://www.php-homepage.de/manual/function.mysql-query.php
//Nun zu dem eigentlichen Array und dem Auslesen: Die Funktion -->mysql_fetch_row<-- liest jeweils eine Zeile (row) aus der Tabelle, genauer gesagt aus dem Ergebnis der Anfrage (query) an die DB.
Der Wert der Abgefragten Spalten (hier: 2 id und subject) wird in einem Array gespeichert. Da du gewöhnlich mehr als eine Zeile (row) als Ergebnis erhalten wirst, musst du eine Schleife bilden, damit auch mit den Ergebnissen aller Zeilen arbeiten kannst:
while ($zeile = mysql_fetch_row($ergebnis_der_anfrage){
//hier kannst du nun mit den Werten der Zeile arbeiten, z.B.:
echo $zeile[0]." ".$zeile[1];
}
Die Schleife wird so lange durchlaufen, bis die Funktion mysql_fetch_array nichts mehr liefert also false ist.
$zeile ist nun das Array, mit $zeile[0] (hier: id) greifst du auf die erste Spalte deiner Abfrage (!nicht Tabelle!), mit $zeile[1] (hier:subject) auf die zweite Spalte,..., mit $zeile[n] auf die n-te Spalte deiner Anfrage.
Sonst empfehle ich: http://www.selfphp.com/ und http://www.php-homepage.de/manual/ref.mysql.php und http://www.mysql.de/doc/de/Tutorial.html
Gruss Martin
Hallo Martin,
warum fragst du nicht einfach beide Spalten gleichzeitig ab? ->http://www.mysql.com/doc/de/SELECT.html
Genau, und das geht so:
$sql = "SELECT id,subject FROM news";
was meinst du warum ich das nicht hingeschrieben habe? Richtig - weil ich wollte, das pino das selber rausbekommt.
$ergebnis_der_anfrage = mysql_query($sql);
wenn du schon fertige Lösungen postest könntest du wenigstens gleich eine Fehlerbehandlung mit einbauen...
//Nun zu dem eigentlichen Array und dem Auslesen: Die Funktion -->mysql_fetch_row<-- liest jeweils eine Zeile (row) aus der Tabelle,
das ist zwar Ansichtssache, aber imho ist mysql_fetch_assoc() oder mysql_fetch_array() mit MYSQL_ASSOC einfacher da man nicht immer abzählen muss, welche Nummer man braucht, außerdem muss man nichts ändern, wenn man eine Spalte irgendwo in der Liste hinzufügt.
Die Schleife wird so lange durchlaufen, bis die Funktion mysql_fetch_array nichts mehr liefert also false ist.
ehh... du meinst die Funktion mysql_fetch_row(), oder? :-)
mit $zeile[n] auf die n-te Spalte deiner Anfrage.
ist nicht $zeile[n-1] die n-te Spalte?
Sonst empfehle ich: http://www.selfphp.com/
ich eher http://www.php.net/ - das ist aktueller (und imho besser)
das ist eine alte Version von http://de.php.net/ref.mysql
da gebe ich dir recht :-)
Grüße aus Nürnberg
Tobias
Hallo Tobias
Genau, und das geht so:
$sql = "SELECT id,subject FROM news";
was meinst du warum ich das nicht hingeschrieben habe? Richtig - weil ich wollte, das pino das selber rausbekommt.
OK.
wenn du schon fertige Lösungen postest könntest du wenigstens gleich eine Fehlerbehandlung mit einbauen...
Damit es nicht unübersichtlich wird. Es wurde nicht nach der Fehlerbehandlung gefragt.
-->mysql_fetch_row<-- liest jeweils eine Zeile (row) aus der Tabelle,
das ist zwar Ansichtssache, aber imho ist mysql_fetch_assoc() oder mysql_fetch_array() mit MYSQL_ASSOC einfacher da man nicht immer abzählen muss, welche Nummer man braucht,
... es ersparrt aber die Tiparbeit und damit verbundene Tipfehler. Außerdem ist es (unwesentlich) schneller.
außerdem muss man nichts ändern, wenn man eine Spalte irgendwo in der Liste hinzufügt.
Das ist ein Argument. Man kann aber die Spalte an das Ende hinzufügen.
Die Schleife wird so lange durchlaufen, bis die Funktion mysql_fetch_array nichts mehr liefert also false ist.
ehh... du meinst die Funktion mysql_fetch_row(), oder? :-)
Mein Fehler. War schon spät.
mit $zeile[n] auf die n-te Spalte deiner Anfrage.
ist nicht $zeile[n-1] die n-te Spalte?
Noch ein Fehler :-|
Sonst empfehle ich: http://www.selfphp.com/
ich eher http://www.php.net/ - das ist aktueller (und imho besser)
Selfphp ist besser strukturiert - ähnlich dem selfHTML - und zum schnellen Nachschlagen ausreichend -> Geschmackssache.
und http://www.php-homepage.de/manual/ref.mysql.php
das ist eine alte Version von http://de.php.net/ref.mysql
Habe nicht gewusst.
und http://www.mysql.de/doc/de/Tutorial.html
da gebe ich dir recht :-)
Danke :-)
Gruss aus Göttingen
Martin
Hallo Martin,
wenn du schon fertige Lösungen postest könntest du wenigstens gleich eine Fehlerbehandlung mit einbauen...
Damit es nicht unübersichtlich wird. Es wurde nicht nach der Fehlerbehandlung gefragt.
naja, ein mysql_query(...) or die(mysql_error()); würde es ja auch tun...
das ist zwar Ansichtssache, aber imho ist mysql_fetch_assoc() oder mysql_fetch_array() mit MYSQL_ASSOC einfacher da man nicht immer abzählen muss, welche Nummer man braucht,
... es ersparrt aber die Tiparbeit und damit verbundene Tipfehler.
das stimmt natürlich - für mich überwiegt allerdings der Vorteil der leichteren Lesbarkeit
Außerdem ist es (unwesentlich) schneller.
aber nur _sehr_ unwesentlich :-)
außerdem muss man nichts ändern, wenn man eine Spalte irgendwo in der Liste hinzufügt.
Das ist ein Argument. Man kann aber die Spalte an das Ende hinzufügen.
trotzdem muss man dann wieder das zählen anfangen...
ehh... du meinst die Funktion mysql_fetch_row(), oder? :-)
Mein Fehler. War schon spät.
jaja, immer diese Ausreden :-)
ich eher http://www.php.net/ - das ist aktueller (und imho besser)
Selfphp ist besser strukturiert - ähnlich dem selfHTML - und zum schnellen Nachschlagen ausreichend
ich finde php.net nicht so schlecht strukturiert - vor allem kann ich durch eingeben von "p funktionsname" in die Adressleiste (bzw. php.net/funtionsname) sehr einfach auf die Dokumentation einer Funktion kommen.
-> Geschmackssache.
ja
Grüße aus Nürnberg
Tobias
Hallo Tobias,
... es ersparrt aber die Tiparbeit und damit verbundene Tipfehler.
das stimmt natürlich - für mich überwiegt allerdings der Vorteil der leichteren Lesbarkeit
Ich versuche dann die Query übersichtlich zu tippen. Wenn du dann nämlich die Ausgabe irgendwie bearbeiten willst, ist dann dieser Abschnitt unübersichtlich und unnötig aufgebläht. Früher habe ich aber auch das assoziative Array gebraucht.--> Ist ebenfalls Geschmackssache oder Gewöhnung.
Außerdem ist es (unwesentlich) schneller.
aber nur _sehr_ unwesentlich :-)
sehr sehr unwesentlich :-)
außerdem muss man nichts ändern, wenn man eine Spalte irgendwo in der Liste hinzufügt.
Das ist ein Argument. Man kann aber die Spalte an das Ende hinzufügen.
trotzdem muss man dann wieder das zählen anfangen...
Wenn man die Query übersichtlich geschrieben hat, geht das schneller, als wenn ich jeden key des Arrays (ver)tippe.
ich eher http://www.php.net/ - das ist aktueller (und imho besser)
Selfphp ist besser strukturiert - ähnlich dem selfHTML - und zum schnellen Nachschlagen ausreichend
ich finde php.net nicht so schlecht strukturiert - vor allem kann ich durch eingeben von "p funktionsname" in die Adressleiste (bzw. php.net/funtionsname) sehr einfach auf die Dokumentation einer Funktion kommen.
Die Möglichkeit mit der Adresszeile ist echt praktisch. Aber da es sich um ein Manual handelt, ist es für das schnelle Nachschlagen weniger geeignet. Und nochmal: Geschmackssache, alte Gewohnheiten
Gruss Martin