Strukturierte Textdatei in PHP auslesen und via SQL in eine Datenbank schreiben

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von newyork, 2. Dezember 2016 .

  1. 2. Dezember 2016
    Moin Leute,

    ich erstelle quasi eine Webanwendung für einen Fragebogen.
    Im Grunde steht alles schon und klappt soweit auch, die MySQL-DB ist mit PHPMyadmin wie folgt aufgebaut:

    Tabelle: Fragen
    FID: ID für die Fragen, auto_increment
    Frage: varchar mit den einzelnen Fragen
    url: varchar mit dem Dateipfad zu einem eventuellen Bild/Symbol zur Frage

    Tabelle: Antworten
    AID: ID für die Antworten, auto_increment
    antwort: varchar für die einzelnen Antwort
    korrekt: boolean, 1 für korrekte Antwort, 0 für nicht korrekt
    FID: Fremdschlüssel für die Zuweisung von jeweils 4 Antworten zu einer Frage


    Jede Frage hat 4 Mögliche Antworten, von denen nur eine korrekt ist. Die Fragen werden nach der Reihe angezeigt, die 4 Antworten werden pro Frage immer gemischt. Das Mischen der Fragen hab ich programmtechnisch nicht umgesetzt bekommen. Aber das eigentliche Problem ist folgendes:

    Es gibt ca. 300 Fragen, dementsprechend 300*4 Antworten, das alles einzeln via PHPMyAdmin einzupflegen ist natürlich richtig eklig, jetzt kam die Idee diese Fragen und Antworten anstelle aus der eigenen Datenbank direkt von der Webseite bzw. PDF zu holen und zu verwenden: Elektronischer Wasserstraßen-Informationsservice - [Basisfragen]

    Ich nehme nur mal an dass das entweder den Rahmen des Projektes sprengt sowie das bisherige funktionierende Konstrukt enorm umwirft, deswegen dachte ich eventuell ist es möglich anhand des Quellcodes der Seite meine Datenbank zu füllen.
    Jede Frage mit ihrer Antwort ist wiefolgt hinterlegt:
    Code:
    <hr class="hrli" />
    <ol start="1" type="1">
    <li>Was ist zu tun, wenn vor Antritt der Fahrt nicht feststeht, wer Fahrzeugf&uuml;hrer ist?<br /><br />
    <ol start="1" type="a">
    <li>Der verantwortliche Fahrzeugf&uuml;hrer muss bestimmt werden.<br /><br /></li>
    <li>Der verantwortliche Fahrzeugf&uuml;hrer muss gew&auml;hlt werden.<br /><br /></li>
    <li>Ein Inhaber des Sportbootf&uuml;hrerscheins muss die Fahrzeugf&uuml;hrung &uuml;bernehmen.<br /><br /></li>
    <li>Ein Inhaber des Sportbootf&uuml;hrerscheins muss die Verantwortung &uuml;bernehmen.<br /><br /></li>
    </ol>
    </ol>
    
    Jetzt versuche ich also diese als .txt gespeicherte Struktur irgendwie in PHP einzulesen und via SQL in die DB zu kriegen.
    Alternativ könnte man das auch als folgende Datei verwenden:
    Code:
    1" 
    Was ist zu tun, wenn vor Antritt der Fahrt nicht feststeht, wer Fahrzeugf&uuml;hrer ist?
    1" 
    Der verantwortliche Fahrzeugf&uuml;hrer muss bestimmt werden.
    Der verantwortliche Fahrzeugf&uuml;hrer muss gew&auml;hlt werden.
    Ein Inhaber des Sportbootf&uuml;hrerscheins muss die Fahrzeugf&uuml;hrung &uuml;bernehmen.
    Ein Inhaber des Sportbootf&uuml;hrerscheins muss die Verantwortung &uuml;bernehmen.
    Je nachdem was besser umzusetzen ist. Weil irgendwie muss ich das ja strukturieren, im ersten Beispiel wäre das mündlich gesprochen ja so etwas wie "type="1" bedeutet Frage, type="a" bedeutet antwort, in <li> tags sind dann fragen und antworten".
    Im zweiten Fall wäre das eher "Zeile 1 Frage, Zeile 3-6 Antwort, Zeile 7 Frage, Zeile 9-12 Antwort" usw. Also quasi nach Zeilennummer könnte man dann vorgehen.

    Jetzt frage ich mich ob das überhaupt so klappt, falls nein wie dann? Ich brauche ja schließlich auch die Verbindung von Antwort zu Frage...
     
  2. 3. Dezember 2016
    AW: Strukturierte Textdatei in PHP auslesen und via SQL in eine Datenbank schreiben

    Mit Regexp liest du die entsprechenden Textstellen aus, also Frage und die jeweils 4 Antworten.

    Die Frage speicherst du in Tabelle wie du beschrieben hast und die Antworten ebenfalls, die Verknüpfung besteht ja direkt über die FID. Das sollte soweit passen.

    Daten Einlesen durch preg_match_all hier trennst du die Seite auf in die sich wiederholenden Strucktur-Stücke also zB (.*)<hr class="hrli" />

    Die Stücke durchläufst du dann im

    foreach($stücke AS $string){

    if(preg_match('@<ol start="1" type="1">\s<li>(.*)</li><ol start="1" type="a"><li>(.*)</li><li>(.*)</li><li>(.*)</li><li>(.*)</li></ol>@Usim',$string,$m)){

    $frage = $m[1];
    $antwort1 = $m[2];

    ...
    mysql_query("INSERT INTO...")

    }

    }
     
  3. 5. Dezember 2016
    AW: Strukturierte Textdatei in PHP auslesen und via SQL in eine Datenbank schreiben

    Moin,

    Regexp hatte ich garnicht auf dem Schirm.
    Nach deinem Beispiel scheint die "Auswertung" ja dann relativ simpel zu sein mit jeweils getrenntem Array für Frage und Antwort.

    Werd ich mir genauer anschauen, danke für den Tipp!
     
  4. 29. April 2017
    Hey,

    Alternativ könnte man auch den DomCrawler von Symphonie verwenden:
    dom-crawler/README.md at master · symfony/dom-crawler · GitHub

    Lg
     
  5. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.