parsen mit preg_match all() & übergabe an DB

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
apollo_moon_driver
Mitglied
Beiträge: 8
Registriert: 13.06.2008 00:05

parsen mit preg_match all() & übergabe an DB

Beitrag von apollo_moon_driver »

hi leute - guten Tag an alle phpBBer und alle Coder,


bin neu auf dem board - bin ziemlich neu auf phpBB. Neu ist auch die Beschäftigung mit PHP als Programmiersprache und die mit der MySQL-Datenbank. Ich bin ein Einsteiger - einer der jetzt das alles lernen will.

Begeistert bin ich von den Möglichkeiten des phpBB. Ich find es ein tolles Stück Software. Begeistert bin ich auch von dem Einsatz hier - mehr als 90 000 user diskutieren über die Technik. Da kann man bestimmt viel lernen. Denk ich mir jedenfalls. Also warum nicht mit den Experten von phpBB auch etwas über die Coding-Technik reden. Denn da will ich ja noch einsteigen. Vielleicht ists am Besten wenn ich auch mal das hundertausendfach eingesetzte stück code - die phpBB sourcen nehme und damit etwas rumspiele. Denn damit kennen sich ja hier viel aus.

Hab schon mal angefangen. Bin immer noch am rumspielen und ausprobieren. Es geht mir heute in dieser Frage um das parsing:

wie kann ich ne seite parsen - sagen wir
http://www.mypage.org/forums/viewforum.php?f=45
nach
user
subject
thead
last posting
timestamp etc
und das dann der phpBB-Db übergeben. Hab schon mehrere Threads gelesen - bin aber noch nicht im Klaren wies g eht. Freu mich auf eine Antwort. Ich nehm mir jetzt mal noch ein paar Tutorials vor uns dazu die Sorucen von phpBB. Dann spiel ich mal rum und guck was ich erreichen kann.

Update: Hab nochwas gefunden; im viewforum.php file

Zeile 257: da gibts die Methode:

Code: Alles auswählen

 $template->assign_vars( 
Die hat glaub ich alle Daten die auf dem Forum gezeigt werden. Ich künnte eine Funktion daraus machen - oder den Code nach dieser Metode setzen. Was meint ihr denn.

Andere Ansätze werden untern vorgestellt.

euer apollo :grin:
Zuletzt geändert von apollo_moon_driver am 16.06.2008 23:07, insgesamt 4-mal geändert.
Benutzeravatar
cYbercOsmOnauT
Ehemaliges Teammitglied
Beiträge: 3820
Registriert: 18.02.2004 23:02
Wohnort: Göttingen
Kontaktdaten:

Beitrag von cYbercOsmOnauT »

Diese Werte kannst Du alle sehr einfach aus der DB auslesen. Wenn Du keinen Zugang zu der DB hast, wäre die Frage zu klären, wieso Du dann ein fremdes Board parsen willst. Solltest Du von einem Freehoster weg wollen, wo Du keinen Zugriff auf die DB hast, müssen wir Dich leider zu deren Support schicken.

Grüße,
Tekin
• prof. phpbb-Installation, Reparatur, Rettung nach Hackattacken, sowie PHP/JS Programmierung aller Art
Zend Certified Engineer, Linux Administrator und die Sicherheit von 34 Jahren Programmiererfahrung
• Interesse? Kontakt unter t.birduezen@web-coding.eu
apollo_moon_driver
Mitglied
Beiträge: 8
Registriert: 13.06.2008 00:05

Beitrag von apollo_moon_driver »

hi Tekin,

von allem garnix. Bin neu bei phpBB: Will etwas über php und mysql lernen - und auch über das Board selber.
cYbercOsmOnauT hat geschrieben:Diese Werte kannst Du alle sehr einfach aus der DB auslesen. Wenn Du keinen Zugang zu der DB hast, wäre die Frage zu klären, wieso Du dann ein fremdes Board parsen willst. Solltest Du von einem Freehoster weg wollen, wo Du keinen Zugriff auf die DB hast, müssen wir Dich leider zu deren Support schicken. Grüße, Tekin
Nein - ich bin nicht bei Freehoster.
Diese Werte kannst Du alle sehr einfach aus der DB auslesen.
... das ist wie vorwärts fahren.

Ich will was über phpBB lernen. Also nicht vorwärts fahren sondern rückwärts... Dabei lern ich am meisten.

- denk ich jedenfalls. Und wenn ich ein paar Ideen habe, dann stell ich sie euch hier mal einfach vor. Ihr könnt ja mit eurer Erfahrung drauf sehen und mir vielleicht einen Tipp geben.

ich komm wieder - Für den Moment sag ich schonmal Danke.

Grüße
Apollo :grin:
Zuletzt geändert von apollo_moon_driver am 15.06.2008 23:49, insgesamt 1-mal geändert.
Boecki91
Ehemaliges Teammitglied
Beiträge: 4744
Registriert: 18.06.2006 15:21

Beitrag von Boecki91 »

Ich weiß nicht genau was du vor hast aber preg_match_all() sollte dir helfen.
Standart: Am besten mit beiden Beinen auf dem Boden
Standardmäßig antworte ich nicht auf PMs
apollo_moon_driver
Mitglied
Beiträge: 8
Registriert: 13.06.2008 00:05

parsen mit preg_match all() - regex und so weiter

Beitrag von apollo_moon_driver »

hi Boecki91, hi all ;-)

vielen Dank für die schnelle Antwort. Das ist echt ein tolles Board. Ich bin begeistert. So macht der Einstieg in ein neuen Code Spaß. Ich hab auch schon an preg_match_all() gedacht. Ich werd das mal heute Nacht noch ausprobieren. Den Code zusammenbauen und ein paar Tests machen.
Boecki91 hat geschrieben: Ich weiß nicht genau was du vor hast aber preg_match_all() sollte dir helfen.
Nochmals Danke! Ich probier mal einige Sachen. Also ich hab etwas perl-erfahrung und etwas PHP.

Update: Hab nochwas gefunden; im viewforum.php file, Zeile 257: da gibts die Methode:

Code: Alles auswählen

 $template->assign_vars( 
Die hat glaub ich alle Daten die auf dem Forum gezeigt werden. Ich künnte eine Funktion daraus machen - oder den Code nach dieser Metode setzen. Was meint ihr denn?

Ein anderer Ansatz - ist dieser hier:


Code: Alles auswählen

  
function cleanup ($string) { 
   // falls magic quotes on 
   if (get_magic_quotes_gpc()) 
   { 
       $string = stripslashes($string); 
    } 
   $string = addslashes($string); 
    $string = strip_tags($string); 
    // "--","#";";","`","/"   Ausfiltern von SQL-Statements 
    $string = str_replace(array("--","- -","#",";","`","/","<",">","{","}","[","]"),array("","","","","","","","","","","",""),$string); 
   // - mit Leerzeichen dazwischen (SQL-Kommentare!) 
    $string = preg_replace('#-\s+-#i',"",$string); 
    return $string; 
} // end function cleanup 

function checkName ($string) { 
// $name am Anfang Buchstabe; keine Zahlen und Nicht-Wortzeichen; dann 
// beliebig viele Buchstaben, Bindestriche, Leerzeichen und Punkte 
    if (preg_match("/^[^\W\d_]([^\W\d_]|[\-\'\s\.\ä\ö\ü\Ä\Ö\Ü\ß])*$/", stripslashes($string))) 
    { 
       return true; // OK 
  } 

Hmm,.. und dann alles an die Datenbank übergeben - in einem Array.

Apropos: Hier noch einige Denkansätze, aber gerade der Text des Posts könnte sich als schwierig erweise, da er von keinerlei html/php codezeichen umrandet ist.

Code: Alles auswählen

 

/<td width="\d+" align="\w+" valign="\w+" class=".*"><span class="name"><a name="\d+"></a><b>(.*)</b></span><br /><span class="postdetails">Mitglied<br /><br /><br />Anmeldedatum: (.*)<br />Beiträge: (.*)<br />/
Resultat: Subpattern 1 liefert den Usernamen, Subpattern 2 das Anmeldedatum des Users und Nr 3 die Beitragsanzahl.

Code: Alles auswählen

/\s+<td width="100%"><a href="viewtopic.php?p=\d+#\d+"><img src=".*" width="\d+" height="\d+" alt="Beitrag" title="Beitrag" border="\d+" /></a><span class="postdetails">Verfasst am: (.*)<span class="gen">&nbsp;</span>&nbsp; &nbsp;Titel: (.*)</span></td>/
Resultat: Subpattern1 ist das der Timestamp Nr2 der Titel.
Hmm, hab grad nicht genau überprüft ob Metazeichen & sonst. Zeichen vorhanden sind, die mit einem Backslash gecapt werden müssen.

^ $ + ? . * ( ) [ ] { } / \ |
soweit das hier: Was meint ihr denn dazu!?

Apropos HTML/PHP Code: ist ja immer voll davon, müsste man also noch rausnehmen. Hmmm ich guck nochmals nach...

Freu mich von euch zu hören.

lg Apollo :)

PS; Als phpBB-Anfänger hab ich schon mal da nachgesehen - bei Naderman: http://olympuswiki.naderman.de/Parsing_text

Apropos Regex: hab mir das mit dem REGEX - und seiner Ausführung mal angesehen. Also, kann ich den oben beschriebenen Regex denn in die preg_macht_all ( mit oder ohne all) einbauen? Geht das denn!? Also, ich habe das bei einem stoebern gefunden.

http://php-wiki.de/index.php/Function.preg-match-all zu preg_match_all:

(PHP 3>= 3.0.9, PHP 4 , PHP 5) preg_match_all -- Führt eine umfassende Suche nach Übereinstimmungen mit regulärem Ausdruck durch

eine Beschreibung: int preg_match_all ( string Suchmuster, string Zeichenkette, array Treffer [, int Flags [, int Versatz]])

Durchsucht Zeichenkette nach allen Übereinstimmungen mit dem in Suchmuster angegebenen regulären Ausdruck und legt sie in der durch Flags festgelegten Reihenfolge in Treffer ab. Nachdem die erste Übereinstimmung gefunden wurde, wird die nachfolgende Suche jeweils am Ende der letzten Übereinstimmung fortgesetzt. Flags kann eine Kombination folgender Flags sein (beachten Sie, dass es keinen Sinn hat, PREG_PATTERN_ORDER zusammen mit PREG_SET_ORDER zu verwenden):

http://php-wiki.de/index.php/Function.preg-match-all

Beispiel 2. Zusammen gehörende HTML-Tags finden (gierig)

Code: Alles auswählen

<?php
// Das \\2 ist ein Beispiel für Rückreferenzierung. Es teilt pcre mit, dass
// der reguläre Ausdruck mit dem für das zweite Klammerpaar, also in diesem
// Fall mit dem für ([\w]+) gefundenen Ausdruck selbst übereinstimmen muss.
// Der zusätzliche Backslash wird wegen der doppelten Anführungsstriche
// benötigt.
$html = "<b>fett gedruckter Text</b><a href=howdy.html>klick mich an</a>";

preg_match_all("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/", $html, $treffer);

for ($i=0; $i< count($treffer[0]); $i++) {
  echo "gefunden: " . $treffer[0][$i] . "\n";
  echo "Teil 1: " . $treffer[1][$i] . "\n";
  echo "Teil 2: " . $treffer[3][$i] . "\n";
  echo "Teil 3: " . $treffer[4][$i] . "\n\n";
}
?>
Dieses Beispiel erzeugt dann:
gefunden: <b>fett gedruckter Text</b> Teil 1: <b> Teil 2: fett gedruckter Text Teil 3: </b> gefunden: <a href=howdy.html>klick mich an</a> Teil 1: <a href=howdy.html> Teil 2: klick mich an Teil 3: </a>
Also es geht darum, ob ich das so machen kann, wie hier beschrieben http://php-wiki.de/index.php/Function.preg-match-all - mit preg_match eben, oder mit preg_match all!?


BTW: Das hier geht nicht:

Code: Alles auswählen


// Parse die message, das subject die user und die posting time 

         $message = censor_text($row['post_text']);

         // hier mal den bbcode parsen 

         if ($row['bbcode_bitfield'])
         {
            $bbcode->bbcode_second_pass($message, $row['bbcode_uid'], $row['bbcode_bitfield']);
         }

         $message = bbcode_nl2br($message);
         $message = smiley_text($message);

         if (!empty($attachments[$row['post_id']]))
         {
            parse_attachments($forum_id, $message, $attachments[$row['post_id']], $update_count);
         }
         echo $message;
...
Antworten

Zurück zu „Coding & Technik“