Mit PHP Daten aus MySQL Datenbank als XML ausgeben
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
anzahl
array
ausgeben
auswahl
code
datei
datenbank
datum
dokument
ende
ergebnis
festlegen
sammlung
schleife
server
text
url
verbindung
zeile
-
Ich will mit PHP aus einer MySQL Datenbank Daten auslesen und diese dann als XML Dokument ausgeben. Ich habe auch schon eine Anleitung gefunden, wie ich etwas als XML Dokument ausgeben, aber ich habe Probleme die Daten aus der Datenbank auszulesen. Hier ist die Anleitung http://foobarblog.net/2011/06/xml-datei-dynamisch-erstellen-mit-php/.
Hier der ganze Code:
<?php // Inhalt der Datei als XML im UTF-8 Zeichensatz festlegen header("Content-type: text/xml; charset=utf-8"); echo '<?xml version="1.0" encoding="UTF-8"?>'; echo "\n"; $dbHost = "localhost"; $dbUser = "user"; $dbPassword = ""; $dbName = 'name'; if (!mysql_connect($dbHost, $dbUser, $dbPassword)) { echo 'Keine Verbindung zur Datenbank möglich'; exit; } // Daten in Array merken. Diese könnte auch aus einer Datenbank stammen $query = "Select * From table"; $daten = array( 0 => array('bildpfad' => 'urlaub.jpg', 'titel' => 'Urlaub'), 1 => array('bildpfad' => 'arbeit.jpg', 'titel' => 'Arbeit') ); // Daten durchlaufen und in XML-Form ausgeben echo '<bilder>'; foreach ($daten as $zeile) { echo "<bild>"; echo "<pfad>" . htmlspecialchars($zeile["bildpfad"]) . "</pfad>"; echo "<titel>" . htmlspecialchars($zeile["titel"]) . "</titel>"; echo "</bild>"; } echo '</bilder>'; ?>
Ich habe noch nicht wirklich viel Erfahrung mit PHP und weiß nicht, wie ich die Daten aus der Datenbank als XML Dokument ausgeben kann. Kann mir jemand einen Tipp geben? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Die Verbindung zur Datenbank hast du ja schon erfolgreich aufgebaut, fehlt also nur noch, die Daten tatsächlich auszulesen.
Wie das geht steht hier: http://www.schattenbaum.net/php/anzeigen.php
mfg -
Als Erstes: die Datenbankverbindung stimmt nicht.
Der Host lautet mysql.lima-city.de und den Benutzer sowie Passwort und Datenbank musst du natürlch wissen (zu finden in der Verwaltung).
Ansonsten: was verstehst du nicht... was ist die Fragestellung?
Dein Code liest jedenfalls nicht aus einer Datenbank, er öffnet lediglich die Verbindung dorthin. -
hackyourlife schrieb:
Als Erstes: die Datenbankverbindung stimmt nicht.
Der Host lautet mysql.lima-city.de und den Benutzer sowie Passwort und Datenbank musst du natürlch wissen (zu finden in der Verwaltung).
Ansonsten: was verstehst du nicht... was ist die Fragestellung?
Dein Code liest jedenfalls nicht aus einer Datenbank, er öffnet lediglich die Verbindung dorthin.
Ich weiß. Mein Problem besteht auch nicht darin eine Verbindung zur Datenbank aufzubauen, sondern die Daten in ein XML-Dokument zu schreiben. -
my-easytools schrieb:
Du liest ganz normal deine Daten aus der Datenbank Reihe für Reihe aus und anstatt das irgendwie als HTML auszugeben gibst du eben XML aus...
Mein Problem besteht auch nicht darin eine Verbindung zur Datenbank aufzubauen, sondern die Daten in ein XML-Dokument zu schreiben.
Weißt du wenigstens wie du aus der Datenbank die Daten ausliest, oder muss dir das auch noch erklärt werden? -
Hallo
Du hast vor der Abfrage nicht die Datenbank ausgewählt, sondern nur mysql_open()
und du machst gar kein mysql_query Aufruf (Result)
also es fehlen 2 Wichtige Sachen:
DB-Auswahl: mysql_select_db($dbName, $con);
und Ergebnis-Schleife while ($result = mysql_query($sql) ) { ... mysql_fetch_array() ... }
Hier mal der Code etwas angepasst:
<?php // ----------------- ENDE ----------------------- // ------- Datei als XML im UTF-8 Zeichensatz festlegen header("Content-type: text/xml; charset=utf-8"); // ------- Festlegen der Sammlung / Liste $liste_id = 123; // ---- Nr. oder ID der Sammlung $liste_name = 'Name oder Titel der Sammlung"; // ------- MySQL Config $dbHost = "localhost"; $dbUser = "user"; $dbPassword = "xXxXxXx"; $dbName = 'name'; // ------- Verbindung zum MySQL-Server $con = mysql_connect($dbHost, $dbUser, $dbPassword); if (!$con) { echo 'Keine Verbindung zum Datenbank Server'; exit; } // ------- Auswahl des Datenbank-Name $sel = mysql_select_db($dbName, $con); if (!$sel ) { echo 'Keine Auswahl der Datenbank möglich'; exit; } // ------- MySQL-Abfrage-Text $sql_query = "Select * From table WHERE listid = '".$liste_id."' LIMIT 20"; // ------- MySQL-Abfrage-Ergebnis $sql_result = mysql_query($sql_query); if (!$sql_result) { echo 'Fehler bei der Abfrage'. mysql_error(); exit; } // ------- Anzahl der Treffer im Ergebnis (Zeilen) $anzahl = mysql_num_rows($sql_result); // ------- MySQL-Ergebnis in Array ablegen $daten = array(); while($row = mysql_fetch_assoc($sql_result)) { $daten[] = $row; } // ------- Ausgabe der Daten als XML $ubr = "\n"; // ---- Zeilenumbruch echo '<?xml version="1.0" encoding="UTF-8"?>'.$ubr echo '<bilder>'.$ubr; echo ' <idnr>'.$liste_id.'</idnr>'.$ubr; echo ' <name>'.$liste_name.'</name>'.$ubr; echo ' <anzahl>'.$anzahl.'</anzahl>'.$ubr; echo $ubr; foreach ($daten as $zeile) { echo " <bild>".$ubr; echo " <pfad>" . htmlspecialchars($zeile["bildpfad"]) . "</pfad>"".$ubr; echo " <titel>" . htmlspecialchars($zeile["titel"]) . "</titel>"".$ubr; echo " </bild>"".$ubr; } echo '</bilder>'.$ubr; echo $ubr; mysql_close(); // ----------------- ENDE ----------------------- ?>
also der Code von oben um Wichtiges ergänzt, wie DB-Select und Result-Schleife
und noch paar kleine Ideen eingefügt.
ohne mysql_select_db() und ohne mysql_query() konnte es ja nicht gehen :)
...
Beitrag zuletzt geändert: 23.6.2012 20:54:32 von plugboard -
plugboard schrieb:
Hallo
Du hast vor der Abfrage nicht die Datenbank ausgewählt, sondern nur mysql_open()
und du machst gar kein mysql_query Aufruf (Result)
also es fehlen 2 Wichtige Sachen:
DB-Auswahl: mysql_select_db($dbName, $con);
und Ergebnis-Schleife while ($result = mysql_query($sql) ) { ... mysql_fetch_array() ... }
Hier mal der Code etwas angepasst:
<?php // ----------------- ENDE ----------------------- // ------- Datei als XML im UTF-8 Zeichensatz festlegen header("Content-type: text/xml; charset=utf-8"); // ------- Festlegen der Sammlung / Liste $liste_id = 123; // ---- Nr. oder ID der Sammlung $liste_name = 'Name oder Titel der Sammlung"; // ------- MySQL Config $dbHost = "localhost"; $dbUser = "user"; $dbPassword = "xXxXxXx"; $dbName = 'name'; // ------- Verbindung zum MySQL-Server $con = mysql_connect($dbHost, $dbUser, $dbPassword); if (!$con) { echo 'Keine Verbindung zum Datenbank Server'; exit; } // ------- Auswahl des Datenbank-Name $sel = mysql_select_db($dbName, $con); if (!$sel ) { echo 'Keine Auswahl der Datenbank möglich'; exit; } // ------- MySQL-Abfrage-Text $sql_query = "Select * From table WHERE listid = '".$liste_id."' LIMIT 20"; // ------- MySQL-Abfrage-Ergebnis $sql_result = mysql_query($sql_query); if (!$sql_result) { echo 'Fehler bei der Abfrage'. mysql_error(); exit; } // ------- Anzahl der Treffer im Ergebnis (Zeilen) $anzahl = mysql_num_rows($sql_result); // ------- MySQL-Ergebnis in Array ablegen $daten = array(); while($row = mysql_fetch_assoc($sql_result)) { $daten[] = $row; } // ------- Ausgabe der Daten als XML $ubr = "\n"; // ---- Zeilenumbruch echo '<?xml version="1.0" encoding="UTF-8"?>'.$ubr echo '<bilder>'.$ubr; echo ' <idnr>'.$liste_id.'</idnr>'.$ubr; echo ' <name>'.$liste_name.'</name>'.$ubr; echo ' <anzahl>'.$anzahl.'</anzahl>'.$ubr; echo $ubr; foreach ($daten as $zeile) { echo " <bild>".$ubr; echo " <pfad>" . htmlspecialchars($zeile["bildpfad"]) . "</pfad>"".$ubr; echo " <titel>" . htmlspecialchars($zeile["titel"]) . "</titel>"".$ubr; echo " </bild>"".$ubr; } echo '</bilder>'.$ubr; echo $ubr; mysql_close(); // ----------------- ENDE ----------------------- ?>
also der Code von oben um Wichtiges ergänzt, wie DB-Select und Result-Schleife
und noch paar kleine Ideen eingefügt.
ohne mysql_select_db() und ohne mysql_query() konnte es ja nicht gehen :)
...
Danke. Ich hatte zwar auch schon eine Lösung gefunden, aber deine hat noch ein paar Verbesserungen. -
Allerdings ist es unnötig die Daten zuerst in einem Array zwischenzuspeichern. Das verschwendet nur Speicherplatz und bringt keine Vorteile. Du könntest die Daten direkt in der Schleife ausgeben in der du die Daten aus der Datenbank holst.
Wenn du eine große Tabelle hast wirst du sonst Fehler bekommen wegen zu wenig Arbeitsspeicher. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage