php tut für c/c++ umsteiger
-
So wie es aussieht verwendest du preg_match, oder? (also nicht ereg)
Aber was sollen diese # an Anfang und Ende bedeuten, sowie das i ganz am Ende[ Dieser Beitrag wurde am 09.03.2003 um 21:19 Uhr von flenders editiert. ]
-
Original erstellt von flenders:
**So wie es aussieht verwendest du preg_match, oder? (also nicht ereg)
Aber was sollen diese # an Anfang und Ende bedeuten, sowie das i ganz am Ende
**jup preg_match http://tut.php-q.net/regex.html
das # ist der delimiter
http://tut.php-q.net/regex.html#u2
Der Delimiter gibt das Trennzeichen an von der der Regex von den Modifiers getrennt werden. Dieses Trennzeichen muss ein nicht Alphanumerisches-Zeichen sein, darf also kein Buchstabe und keine Zahl sein. Man benutzt z.B. die Zeichen # und die in Perl üblichen zeichen /. Man sollte ein Delimiter wählen, den man nicht im Regex benutzt, da man sonst dieses Zeichen im eigentlichem Regex escapen muss.i (case-insensitiv)ist ein modifizierer http://tut.php-q.net/regex.html#u5
Delimiter + Regex + Delimiter [+ Modifiers]
soll ich die ereg regexp nutzen?
[ Dieser Beitrag wurde am 09.03.2003 um 22:05 Uhr von Dimah editiert. ]
-
nein ereg ist veraltet und langsam
-
habe es jetzt getryt & geerrort
habe die zwei | vergessen'#http://localhost/phpbb2/viewtopic.php?t=|\d*|\S*#i'
und ich musste statt "" '' benutzen da in "" \ zum escapen benutzen wird
[ Dieser Beitrag wurde am 09.03.2003 um 22:27 Uhr von Dimah editiert. ]
-
Ich hatte statt # bisher immer / gesehen
Die Klammern brauchst du aber doch, um die einzelnen teil-matches zu bekommen! Jetzt hast du ja ein or, oder?[ Dieser Beitrag wurde am 10.03.2003 um 13:15 Uhr von flenders editiert. ]
-
jup bin von einen fehler in nähsten gestolpert
zu zeit habe ich jetzt diesen
#(\s)(http://localhost/phpbb2/viewtopic\.php\?t=)(\d*)(\S*)([^ \"\n\r\t<]*)#i
jetzt kann ich die zahl extrahieren, nur wie bringe ich den topic titel wieder rein?
also ich könnte ne funktion schreibfunction gettopictitel($id); $ret = preg_replace("#(\s)(http://localhost/phpbb2/viewtopic\.php\?t=)(\d*)(\S*)([^ \"\n\r\t<]*)#i", '\1<a href="\2\3\4" target="_blank">' . gettopictitel('\3') . '</a>', $ret);
das geht ja schlecht, wie macht man sowas?
-
du machst eine function:
function getTopic($x) { $topic holen ... ... return $topic }
und rufst die so auf:
$ret = preg_replace("#(\s)(http://localhost/phpbb2/viewtopic\.php\?t=)(\d*)(\S*)([^ \"\n\r\t<]*)#i", '\1<a href="\2\3\4" target="_blank">' . getTopic('\3') . '</a>', $ret);
fertig
-
danke
ziemlich flexiebel dieses php[ Dieser Beitrag wurde am 10.03.2003 um 14:32 Uhr von Dimah editiert. ]
-
sicher das es so geht? ich glaube nicht, in der funktion ist $x immer noch '\3'
-
ja 100%ig. übrigens mit deinen regex wirst du nichts matchen hier der funktioniert:
$ret = preg_replace("#[url](http://localhost/phpBB2/viewtopic\.php\?t=)(\d*)(\S*)([^ \"\n\r\t<]*)[/url]#i", '<a href="\2\3\4" target="_blank">' . gettopictitel('\2') . '</a>', $ret);
-
übrigens: das '\2' wird durch die topic id ersetzt (falls du es noch nicht weißt). jetzt muss du nurnoch den titel aus der db holen und fertig
-
nö
da wird '\2' an gettopictitel übergeben, das ergebnis von gettopictitel wir mit den rest string verknüpft und an preg_replace übergeben.
und erst in der funktion wird '\2' (eigentlich '\3') duch die id ersetzt
-
nein, das geht nicht. du musst den umweg mit preg_match machen.
hier der fertige code:
make_clickable()//matches ?t=xxx if (preg_match("#[url](http://localhost/phpBB2/viewtopic\.php\?t=)(\d*)(\S*)([^ \"\n\r\t<]*)[/url]#i", $ret,$matches)) { $ret = preg_replace("#[url](http://localhost/phpBB2/viewtopic\.php\?t=)(\d*)(\S*)([^ \"\n\r\t<]*)[/url]#i", "<a href=".$matches[1].$matches[2].$matches[3].">".gettopictitel($matches[2])."</a>", $ret); }
gettopictitel:
$phpbb_root_path = "../"; // da event. anpassen include $phpbb_root_path."extension.inc"; include $phpbb_root_path."config.".$phpEx; include $phpbb_root_path."includes/db.".$phpEx; $sql = "SELECT topic_title FROM " . TOPICS_TABLE . " t WHERE topic_id = '$x'"; if ( !($result = $db->sql_query($sql)) ) { message_die(GENERAL_ERROR, "Could not get title information", '', __LINE__, __FILE__, $sql); } $titel = $db->sql_fetchfield(0,0); return $titel;
gruß
Michi[ Dieser Beitrag wurde am 10.03.2003 um 17:44 Uhr von Michi_M editiert. ]
[ Dieser Beitrag wurde am 10.03.2003 um 17:44 Uhr von Michi_M editiert. ]
-
Danke,
habe mich schon gefagt woher das db kommtdu schreibst
$sql = "SELECT topic_title FROM " . TOPICS_TABLE . " t WHERE topic_id = '$x'";
sollte das nicht ehr
$sql = "SELECT topic_title FROM " . TOPICS_TABLE . " t WHERE topic_id = " . $x;
?
und ich krige aus der zeile
if ( !($result = $db->sql_query($sql)) )
Fatal error: Call to a member function on a non-object in C:\WAMP\Root\phpBB2\includes\bbcode.php on line 623
hilfe
-
1. Wenn du in PHP "" verwendest kannst du Variablen-Namen darin direkt verwenden, also z.B. echo "Name: $name";
Außerdem würde ich für die DB-Abfrage den Inhalt schon in '' einschließen - ist sicherer
2. Er hat sich wohl ein DB-Objekt erstellt
-
hast du die include in der gettopictitel function?
function gettopictitel($x) { $phpbb_root_path = "c:\\www\\phpBB2\\"; include $phpbb_root_path."extension.inc"; include $phpbb_root_path."config.".$phpEx; include $phpbb_root_path."includes/db.".$phpEx; $sql = "SELECT topic_title FROM " . TOPICS_TABLE . " WHERE topic_id = '$x'"; if ( !($result = $db->sql_query($sql)) ) { message_die(GENERAL_ERROR, "Could not get title information", '', __LINE__, __FILE__, $sql); } $titel = $db->sql_fetchfield(0,0); return $titel; }
die sql query kann man auch wie du machen, kommt aber das selbe raus.
[ Dieser Beitrag wurde am 10.03.2003 um 19:49 Uhr von Michi_M editiert. ]
-
*grussel* includes in funktionen
naja wenn ich die includes in die funktion mache dann krige ich dieWarning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 27 in C:\WAMP\Root\phpBB2\db\mysql4.php on line 259
Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 32 in C:\WAMP\Root\phpBB2\db\mysql4.php on line 259
Warning: Cannot modify header information - headers already sent by (output started at C:\WAMP\Root\phpBB2\db\mysql4.php:259) in C:\WAMP\Root\phpBB2\includes\page_header.php on line 460
Warning: Cannot modify header information - headers already sent by (output started at C:\WAMP\Root\phpBB2\db\mysql4.php:259) in C:\WAMP\Root\phpBB2\includes\page_header.php on line 466
Warning: Cannot modify header information - headers already sent by (output started at C:\WAMP\Root\phpBB2\db\mysql4.php:259) in C:\WAMP\Root\phpBB2\includes\page_header.php on line 467
und
Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 48 in C:\WAMP\Root\phpBB2\db\mysql4.php on line 259
Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 53 in C:\WAMP\Root\phpBB2\db\mysql4.php on line 259
Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 58 in C:\WAMP\Root\phpBB2\db\mysql4.php on line 259
Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 63 in C:\WAMP\Root\phpBB2\db\mysql4.php on line 259
Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 68 in C:\WAMP\Root\phpBB2\db\mysql4.php on line 259
Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 73 in C:\WAMP\Root\phpBB2\db\mysql4.php on line 259
-
ich habs mal verbessert:
unter
if ( !defined('IN_PHPBB') ) { die("Hacking attempt"); }
das:
$phpbb_root_path = "c:\\www\\phpBB2\\"; include $phpbb_root_path."extension.inc"; include $phpbb_root_path."config.".$phpEx; include $phpbb_root_path."includes/db.".$phpEx;
dann die gettopictitel:
function gettopictitel($x) { global $db; $sql = "SELECT topic_title FROM " . TOPICS_TABLE . " WHERE topic_id = '$x'"; if ( !($result = $db->sql_query($sql)) ) { message_die(GENERAL_ERROR, "Could not obtain newer/older topic information", '', __LINE__, __FILE__, $sql); } $titel = $db->sql_fetchrow(); return $titel[0]; }
Gruß
Michi
-
jupie mein erster mod, danke Michi_M & flenders ohne euch wäre das nicht möglich
//unter if ( !defined('IN_PHPBB') ) { die("Hacking attempt"); } //das: $phpbb_root_path = "./"; // <- anpassen include $phpbb_root_path."extension.inc"; include $phpbb_root_path."config.".$phpEx; include $phpbb_root_path."includes/db.".$phpEx; // über function make_clickable($text) { // pad it with a space so we can match things at the start of the 1st line. $ret = ' ' . $text; // das function get_topic_titel($x) { global $db; $sql = "SELECT topic_title FROM " . TOPICS_TABLE . " WHERE topic_id = '$x'"; if ( !($result = $db->sql_query($sql)) ) { message_die(GENERAL_ERROR, "Could not obtain newer/older topic information", '', __LINE__, __FILE__, $sql); } $titel = $db->sql_fetchrow(); return $titel['topic_title']; } function raw_topic_url_to_url_with_topic_titel($mat) { return $mat[1]."<a href=\"".$mat[2].$mat[3].$mat[4]."\" target=\"_blank\">".get_topic_titel($mat[3])."</a>"; } // unter function make_clickable($text) { // pad it with a space so we can match things at the start of the 1st line. $ret = ' ' . $text; // das $ret = preg_replace_callback ( "#(\s)(http://localhost/phpbb2/viewtopic\.php\?t=)(\d*)(\S*)([^ \"\n\r\t<]*)#i", 'raw_topic_url_to_url_with_topic_titel', $ret ); // hier müsste man den pattern an sein Forum anpassen // ich muss mal kucken obs eine konstante gibt die es erleichtern würde
-
Das funktioniert jetzt aber wohl nur für eine URL - denke ich
Also auch wenn mehrere URLs dieser Form enthalten sind bekommst du nur einen Treffer