tabellen in datenbank speichern

speedone

New Member
Hallo Leute,

es geht darum: Ich suche ein Script oder eine Idee, wie man eine dargestellte Tabelle von einerer anderen Webseit
relativ einfach in eine eigene Datenbank speichern kann.

Ich möchte also genau das gegenteil machen, wie es meistens gemacht wird.
Ganz genau heißt das:

Ich bin soweit, dass ich den kompletten Quelltext von einer fremden Webseite mir mittels curl in einem String in einer Variable speichere.

Jetzt mal angenommen, das ich aus dem Sting schon alle restlichen Objekte der Webseite herausgeschnitten habe. Ich habe also nur noch z. B: (in Wirklichkeit ist es noch viel mehr!)

HTML:
<table with="100">
<tr>
   <td with.....>hallo</td>
   <td with.... type....>wie gehts</td>
<tr>
<tr>
  <td with.....>gut</td>
  <td with.... type....>und dir?</td>
<tr>
......
</table>

Jetzt sollen die Werte am liebsten so formatiert in variablen kommen:

echo $zeile1_spalte1

Ausgabe:

hallo

echo $zeile1_spalte2

Ausgabe:

wie gehts

echo $zeile2_spalte1

Ausgabe:

gut

echo $zeile2_spalte2

Ausgabe:

und dir?


So habe ich mir das ungefähr vorgestellt. Kann natürlich auch ein bisschen anders sein. Hauptsache ist, das ich auf die einzelnen Werte zugreifen kann

Ich hoffe mir kann jemand helfen.
 
Das kannst Du mit einem XML-Parser machen.
Da dies laut Deiner Beschreibung aber schwer nach "Datenklau" aussieht, wird Dir hierzu wahrscheinlich kein Webmaster helfen wollen.

huschi.
 
hallo
ich kann euch Versichern, dass ich kein Datenklau mache.
Dies dient einzig und allein dazu, bei einem Online Spiel definierte Daten in meine Datenbank zu schreiben, damit ich mit diesen Werten verschiedene Statistiken errechnen kann.

Dies ist ganz sicher erlaubt.

Hier ist z. B die Webseite bei der ich die Werte speichern möchte.
\travian\faq - Truppen der Gallier
 
Moin,
wenn die Tabelle ordentlich strukturiert ist, ginge es mit PHP simplexml.
Oder ein anderer xml Phraser, wie Huschi schon schrieb.

test.xml
PHP:
<?xml version="1.0" encoding="iso-8859-1" ?>
<!DOCTYPE test SYSTEM "test.dtd">

<table width="100">
<tr>
   <td width="">hallo</td>
   <td width="" type="">wie gehts</td>
</tr>
<tr>
  <td width="">gut</td>
  <td width="" type="">und dir?</td>
</tr>
</table>

test.dtd
PHP:
<!DOCTYPE test [ 
<!ELEMENT table +>
<!ELEMENT tr +>
<!Element td (#PCDATA)>
]>


PHP:
<?php
$xml = simplexml_load_file('test.xml');
echo $xml->tr[0]->td[0];
echo $xml->tr[0]->td[1];
?>
Ausgabe:
hallo
wie gehts

Mit foreach (oder einer anderen Schleife) kann man auch alles einmal durchlaufen.
 
Last edited by a moderator:
vielen Dank, dass hat mir schon sehr geholfen.
Ich muss aber vorher erst mit strip_tags($quellcode, '<table><td><tr>'); den String von den html Tags befreien.

Wenn es noch andere Lösung Vorschläge gibt, würde mich das sehr freuen. Ansonsten sollte ich es auch hiermit gut hinbekommen.

kann mir noch jemand sagen, wie ich die Links in Text umwandeln kann, sonst sind ja diese weg

mfg
 
Last edited by a moderator:
ich muss aber vorher erst mit strip_tags($quellcode, '<table><td><tr>'); den String von den html Tags befreien.
Nein, dann ginge das mit XML nicht mehr. Siehe mein Beispiel.


kann mir noch jemand sagen, wie ich die Links in Text umwandeln kann, sonst sind ja diese weg
Wenn dir mit den replace Funktionen nichts einfaellt, lasse es halt einfach so wie es ist.
 
bei mir gehts nur so: strip_tags($quellcode, '<table><td><tr>');

das entfernt ja alle html Tags außer <table>, <td> und <tr>
Andernfalls, ohne diese Reinigung kam eine riesige Liste an Fehlern ;)
 
Dein <a...> musst du dann aber auch noch hinzufuegen. Du hast dich ja beschwert, dass deine Links sonst verschwinden.
Damit die Meldungen verschwinden, musst du nur die test.dtd anpassen. Hab's ja nur fuer das kleine Beispiel definiert und nicht fuer eine komplette html Seite.
 
Ich versuche seit 2 Tagen die img Tags mit dessen Titel zu ersetzen.
So sehen meine Versuche aus:

PHP:
<?
$text = '<img src="hallo.jpg" title="hey wie gehts">';

echo preg_replace('#\<img\ src="([^"]*)"\title="([^"]*)" \>#Uis', '\2', $text);

Es soll einfach anstatt dem img Tag der Titel vom Bild stehen:
Also sollte die Ausgabe doch: "hey wie gehts" sein,
aber es passiert nicht!
Es wird immer noch das Bild angezeigt.
Was mache ich falsch?
 
Last edited by a moderator:
RegEx ist nicht meine Staerke. Da muss jemand anderes was zu sagen.
Ginge aber auch wieder mit (simple)XML.

Beispiel:
$xml = simplexml_load_file('test.xml');
$img_title = $xml->tr[2]->td[1]->img[0]->attributes();
echo $img_title['title'];
 
daraus ergibt sich dieser Konflikt:
Code:
test.php:25: parser error : Opening and ending tag mismatch: img line 25

Ich denke, das kommt daher, weil xml das schließen von img Tags so nicht zulässt kann das sein?
Habe gelesen, dass nur solche img Tags unterstützt werden und das haben meine Tags natürlich nicht :(:
Code:
<img src="" title="" />
und 
<img src="" title="" ></img>

So have ich die test.dtd angepasst:

Code:
<!DOCTYPE test [ 
<!ELEMENT table +>
<!ELEMENT tr +>
<!Element td ANY>
<!ELEMENT a ANY> 
<!ELEMENT img ANY> 
]>
 
Ich denke, das kommt daher, weil xml das schließen von img Tags so nicht zulässt kann das sein?
Habe gelesen, dass nur solche img Tags unterstützt werden und das haben meine Tags natürlich nicht :
Jup, XHTML (<img src="" title="" />) muesste es schon sein. Dann geht es leider in dieser Form nicht.

Also muss doch ein RegEx-perte her.
 
Code:
<?
$text = '<img src="hallo.jpg" title="hey wie gehts">';
echo preg_replace('#<img\\s+src="([^"]*)"\\s+title="([^"]*)"\s*>#Uis', '\2', $text); 
?>

Du solltest aber bedenken, daß Du hier nur ein relativ festest Patternmatching hast.
Eine kleine Umstrukturierung im Image-Tag, und schon paßt es nicht mehr.

huschi.
 
Back
Top