CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren |
10.04.2010, 12:14:39
|
|
Senior Member
|
|
Registriert seit: Feb 2006
Ort: Wallrabenstein
Alter: 55
Beiträge: 1.044
|
|
AW: XML aus MySQL auslesen
Ich denke du willst deinen alten Webshop auf einen neuen Umziehen und musst daher den Inhalt der XML Dateien in die neue DB-Tabelle schreiben?
Ansonsten:
Durch deinen SELECT auf die alte DB-Tabelle bekommst du ja alle XML-Dateien. Diese kannst du dann per XML-Manipulation auslesen und daraus ein neues XML-File erstellen. Du kannst sie natürlich auch sofort in deine neue DB-Tabelle schreiben, was dir ne Menge Zeit und Arbeit ersparen würde.
Die Ausgabe, wie du sie zur Zeit verwenden willst, nutzt dir ja nicht wirklich etwas. Es sei denn, du willst jeden Datensatz dir einzeln ansehen und dann erst in die neue Tabelle schreiben.
Für Testzwecke, ob du alle Elemente richtig ansprichst, ist sowas natürlich gut geeignet.
|
10.04.2010, 12:24:12
|
|
Anfänger
|
|
Registriert seit: Apr 2010
Alter: 57
Beiträge: 25
|
|
AW: XML aus MySQL auslesen
Nee, leider nicht. Im neuen Shop werden die Artikeldaten nicht in einer XML Datei „gekapselt“, sondern stehen dort in jeweils einer eigenen Spalte.
Also im alten Shop gibt’s ne Tabelle „content“ und dort eine Spalte „body“ wo eine XML Datei mit den Artikeldaten zu finden ist. Und diese Artikeldaten muss ich auslesen und in der neuen Datenbank in die jeweiligen Spalten für Art.Nr. , Beschreibung, usw eintragen.
Ich hab nun mit
Code:
SELECT
body
FROM content
INTO OUTFILE '/Users/mario/Desktop/result.txt';
alles in einer Datei (aus der ich eine XML gemacht habe). Wenn ich die nun mit der xmlread.php von oben bearbeite, bekomme ich alles schön angezeigt. Nur: Wie lese ich nun die einzelnen td's und tr's wieder in die neue DB? Oder erstelle eine CSV Datei und mache einen generischen Import in die neue DB? Ich glaub ich hab immer noch irgendwas grundsätzlich nicht verstanden. ;-)
Viele Grüße
Mario
|
10.04.2010, 12:37:52
|
|
Administrator
|
|
Registriert seit: Jul 2004
Beiträge: 3.707
|
|
AW: XML aus MySQL auslesen
Zitat:
Zitat von atomicbunny
[..] Ich glaub ich hab immer noch irgendwas grundsätzlich nicht verstanden. ;-)
|
Sorry, aber hast Du Dir die letzten beiden Posting vor Deinem durchgelesen? Und verstanden?
Klar viele Wege führen nach Rom. Warum willst Du aber den umständlichen nutzen? Urvater und ich haben doch versucht Dir den "kurzen" Weg zu erklären. Was hast Du an der Beschreibung nicht verstanden?
Hier die zusammengefasste Wegbeschreibung:
1. SELECT body FROM datei ...
2. while(gefundene Datensätze) manipuliert mit SimpleXML
3. INSERT INTO neu Struktur
fertig!
Noch Fragen/Unklarheiten? Dann frage!
__________________
Gruss vt1816
Erwarte nicht, dass sich jemand mehr Mühe mit der Antwort gibt als Du Dir mit der Frage.
. . . . . Feedback wäre wünschenswert
Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.
Ansosnten gilt: Hilfe ausserhalb dieses Thread (PN, WhatsApp, Skype, Mail, ICQ, etc...) nur per Barzahlung oder Vorauskasse!
Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
|
10.04.2010, 12:56:57
|
|
Anfänger
|
|
Registriert seit: Apr 2010
Alter: 57
Beiträge: 25
|
|
AW: XML aus MySQL auslesen
Urvaters Antwort hab ich erste gesehen, als ich meine schon abgeschickt hatte.
Ich wäre schon für einen Weg dankbar. Umständlich oder nicht. Womit ich ein Problem habe, ist die Manipulation. Auslesen ja, Einfügen ja. Aber wie bekomme ich die Datensätze so geändert, dass ich sie einfügen kann?
Ich kann das als Anfänger auf diesem Gebiet wahrscheinlich auch schlecht erklären. Sorry. Ich geh was essen und kämpf mich dann durch das „while“ Kapitel ...
Viele Grüße
Mario
|
10.04.2010, 13:48:53
|
|
Senior Member
|
|
Registriert seit: Feb 2006
Ort: Wallrabenstein
Alter: 55
Beiträge: 1.044
|
|
AW: XML aus MySQL auslesen
Ich hab mir noch einmal deine geposteten Graphiken angesehen.
Nach dem SELECT, den vt1816 unter Punkt 1 nennt nimmst du eine WHILE-Schleife ob noch ein Ergebnis vorhanden ist.
So wie ich die spalte 'body' sehe enthält sie das komplette XML als String.
Innerhalb der WHILE-Schleife könntest du diese dann mit simplexml_load_sring einlesen und die einzelnen Objekte für den Insert in deine neue DB vorbereiten.
Es ist nicht erkennbar, wie die neue Tabelle aufgebaut ist. Daher kann ich dir auch kein Beispiel posten.
Nach Erzeugen des INSERT läßt du diesen Ausführen.
Dein Skript würde so deine komplette alte Tabelle durchlaufen bis kein Datensatz mehr vorhanden ist und diese gelichzeitig in die neue Tabelle schreiben.
Wenn es dir möglich ist solltest du dir auf jeden Fall noch einen Zähler einbauen, der dir am Ende anzeigt wieviele Datensätze in die neue Tabelle geschrieben wurden und du solltest zwingend Fehler abfangen. Geht irgend etwas zwischen durch schief könntest du ab dieser Stelle oder halt nur die betroffenen Datensätze erneut versuchen in die neue Tabelle zu schreiben.
|
10.04.2010, 17:09:08
|
|
Anfänger
|
|
Registriert seit: Apr 2010
Alter: 57
Beiträge: 25
|
|
AW: XML aus MySQL auslesen
Ich bekomme das auf die Schnelle mit der „while“ Schleife nicht hin. Da müssen die Artikel wohl doch neu im Shop eingegeben werden.
@urvater: Falls dein Hilfeangebot noch steht, hier die Daten. Es geht um sechs Artikeldaten (mehr waren im alten Shop nicht hinterlegt) und diese müssen in die folgenden Spalten in der DB:
XML string-------------------- DB Spalte
<name>---------------------- OXTITLE
<bestnr>--------------------- OXARTNUM
<groesse>------------------- OXUNITQUANTITY
<pic>------------------------- OXPIC1
<text>------------------------ OXLONGDESC
<preis>----------------------- OXPRICE
Die XML Struktur ist
Code:
<?xml version="1.0" encoding="UTF-8"?>
<content timestamp_de="2009-04-16 09:56:56.74">
<published>2009.02.18T00:00:00</published>
<name>Produkt 1</name>
<bestnr>54654</bestnr>
<groesse>56x89x98</groesse>
<pic>os_produktbild_01.jpg</pic>
<text>Produktbeschreibung</text>
<preis>1535</preis>
</content>
Wie gesagt, ich habe alle Artikel nun auch in einer einzigen XML Datei. Es würde also auch „simplexml_load_file“ gehen. Aber nun komm ich nicht weiter.
Viele Grüße
Mario
|
10.04.2010, 17:17:47
|
|
Administrator
|
|
Registriert seit: Jul 2004
Beiträge: 3.707
|
|
AW: XML aus MySQL auslesen
Zitat:
Zitat von atomicbunny
Ich bekomme das auf die Schnelle mit der „while“ Schleife nicht hin.
|
Es geht ja nicht um Schnelligkeit.
Zitat:
Zitat von atomicbunny
[...]
Es würde also auch „simplexml_load_file“ gehen. Aber nun komm ich nicht weiter.
|
Was hast Du denn schon (an Code)? Wo kommst Du nicht weiter?
__________________
Gruss vt1816
Erwarte nicht, dass sich jemand mehr Mühe mit der Antwort gibt als Du Dir mit der Frage.
. . . . . Feedback wäre wünschenswert
Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.
Ansosnten gilt: Hilfe ausserhalb dieses Thread (PN, WhatsApp, Skype, Mail, ICQ, etc...) nur per Barzahlung oder Vorauskasse!
Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
|
10.04.2010, 18:48:41
|
|
Anfänger
|
|
Registriert seit: Apr 2010
Alter: 57
Beiträge: 25
|
|
AW: XML aus MySQL auslesen
Bei mir geht’s nicht um Schnelligkeit. Das ist ja auch ein guter Grund, PHP endlich mal richtig zu lernen.
Mein Kunde (für den ich HTML, CSS und das ganze Grafikdesign mache) steht etwas unter Zeitdruck. Der alte Shop läuft seit Monaten nicht richtig und steht nun kurz vor dem Totalausfall. Und nun wo er sich (endlich) für eine andere Lösung entschieden hat, will ihm die Agentur beim Datenexport nicht helfen.
Ich hab noch Probleme ganz grundsätzliche Abläufe zu verstehen.
Ich hab verstanden, wie ich mit Sequel Pro (oder phpMyAdmin) durch SELECT-FROM-INTO OUTFILE aus der DB was auswähle und in einer externen Datei speichere. Ok, ist für Euch Kindergeburtstag, aber für mich schon mal ein Erfolg. ;-) Jetzt wird es haarig (und vielleicht auch witzig für Euch). Ich denke, ich muss die neue Datenbank mit der geforderten, aber leeren, Struktur anlegen (wird bei der Installation des Shops ja gemacht) und dort über Query die Inhalte der Datei in die entsprechende Tabelle und die Spalten einlesen.
Mir fehlt das Verständnis des gesamten Zwischenschritts. Wo laufen die php Anweisungen (z.B. simplexml_load_file) ab? In Sequel Pro über Query? In einem weiteren php file wie bei meinem Versuch heute morgen?
Ich kann verstehen, dass Euch das vielleicht nervt. Aber auch nach intensivem Studium von Literatur ist man nach einem Tag nicht der Gott. Wenn es nicht drängen würde, hätte ich mich auch erstmal bis zum erbrechen alleine da durch gewühlt. Werde ich nun auch weiter machen. Wie gesagt, ich möchte das schon lernen. Und wieder bedanke ich mich für Eure Hilfe bis hierher!
Viele Grüße
Mario
|
11.04.2010, 10:19:44
|
|
Anfänger
|
|
Registriert seit: Apr 2010
Alter: 57
Beiträge: 25
|
|
AW: XML aus MySQL auslesen
Update:
Ich hab nun verstanden, wie man eine Verbindung zur DB aufnimmt und Daten verändert. Da ich alle Artikeldaten bereits in der externen XML Datei habe, lade ich mit simplexml_load_file die gesamte Datei, lese die Arrays aus und füge die Werte in die DB ein. Grundsätzlich richtig?
Das mit der „foreach“ Schleife macht mir Kopfschmerzen. Da ist mir unklar, wie ich diese Werte dann in die VALUES der DB eintrage. Insgesamt sieht das im Moment bei mir so aus:
PHP-Code:
<?php
# XML Datei laden
$xml = simplexml_load_file("result.xml");
print_r($xml);
# Array durchlaufen und Daten auslesen
foreach ($xml->system->content as $item) {
}
# Verbindung zur Datenbank aufbauen und Daten einfügen
$db = mysql_connect("localhost","root","root") or die ("Verbindung fehlgeschlagen");
mysql_select_db("xmltest",$db);
$SQL_statement="INSERT * INTO xmltest (OXARTNUM,OXTITLE,OXPRICE,OXUNITQUANTITY,OXLONGDESC,OXPIC1)
VALUES ()";
$resultset=mysql_query($SQL_statement)
mysql_close();
?>
Viele Grüße
Mario
|
11.04.2010, 19:37:18
|
|
Senior Member
|
|
Registriert seit: Feb 2006
Ort: Wallrabenstein
Alter: 55
Beiträge: 1.044
|
|
AW: XML aus MySQL auslesen
Du hast doch am Anfang eigentlich schon alles richtig gemacht. Allerdings hast du die Daten in eine Tabelle geschrieben anstatt sie in die DB per INSERT zu übertragen. Hier noch einmal dein eigenes Script.
PHP-Code:
$filename = 'body.xml';
if(file_exists($filename)) {
$xml = simplexml_load_file($filename);
if($xml) {
foreach($xml->content as $content) {
?>
<table>
<tr>
<td>Artikelnummer</td>
<td><?php echo $content->bestnr ?></td>
</tr>
<tr>
<td>Artikelname</td>
<td><?php echo $content->name ?></td>
</tr>
<tr>
<td>Artikelgroesse</td>
<td><?php echo $content->groesse ?></td>
</tr>
<tr>
<td>Thumbnail</td>
<td><?php echo $content->thumbpic ?></td>
</tr>
<tr>
<td>Artikelbild</td>
<td><?php echo $content->pic ?></td>
</tr>
<tr>
<td>Artikelbildgross</td>
<td><?php echo $content->bigpic ?></td>
</tr>
<tr>
<td>Artikelbeschreibung</td>
<td><?php echo $content->text ?></td>
</tr>
<tr>
<td>Artikelpreis</td>
<td><?php echo $content->preis ?></td>
</tr>
<tr>
<td>Währung</td>
<td><?php echo $content->euro ?></td>
</tr>
</table>
und so müsstest du es anpassen
PHP-Code:
$filename = 'body.xml';
if(file_exists($filename)) {
$xml = simplexml_load_file($filename);
if($xml) {
$db = mysql_connect("localhost","root","root") or die ("Verbindung fehlgeschlagen");
mysql_select_db("xmltest",$db);
foreach($xml->content as $content) {
$bestellnr = $content->bestnr;
$name = $content->name;
$groesse = $content->groesse;
$thumb = $content->thumbpic;
$pic = $content->pic;
$bigpic = $content->bigpic;
$beschreibung = $content->text;
$preis = $content->preis;
$wäehrung = $content->euro;
$SQL_statement="INSERT INTO xmltest (OXARTNUM,OXTITLE,OXPRICE,OXUNITQUANTITY,OXLONGDESC,OXPIC1)
VALUES ('".$bestellnr."','".$name."','".$preis."','".$groesse."','".$beschreibung."','".$pic."')";
$resultset=mysql_query($SQL_statement)
}
mysql_close();
}
}
Da ich dein eigenes Skript unverändert genutzt habe müsstest du die Variablen entsprechend deiner neuen Datei anpassen.
PS: Habe das * hinter dem INSERT entfernt, da es dort nicht hingehört. Die Reihenfolge der Variablen innerhalb des INSERT noch einmal gegen die Reihenfolge der benannten Spalten prüfen. Ich könnte mich ja verschaut haben.
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Ansicht |
Linear-Darstellung
|
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.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 15:26:35 Uhr.
|