php tut für c/c++ umsteiger



  • 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




  • 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 kommt

    du 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 die

    Warning: 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 😉



  • Original erstellt von flenders:
    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 😉

    ne das geht schon

    mixed preg_replace_callback ( mixed pattern, callback callback, mixed subject [, int limit])

    The behavior of this function is almost identical to preg_replace(), except for the fact that instead of replacement parameter, one should specify a callback that will be called and passed an array of matched elements in the subject string. The callback should return the replacement string.

    preg_replace hört ja auch nicht nach den ersten treffer auf

    ps. ich habe es etwas erweitert so das es jetzt auch mit foren geht

    //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 get_forum_titel($x)
    {
        global $db;   
        $sql = "SELECT forum_name FROM " . FORUMS_TABLE . " WHERE forum_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['forum_name'];
    }
    
    function raw_url_to_url_with_titel($subpattern)
    {
        $url = $subpattern[2].$subpattern[3].$subpattern[4].$subpattern[5];
        if($subpattern[3] == "viewtopic.php?t=")
            $titel = get_topic_titel($subpattern[4]);
        else
            $titel = get_forum_titel($subpattern[4]);
        return $subpattern[1]."<a href=\"".$url."\" target=\"_blank\">".$titel."</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
    
        $phpbb_url = "http://localhost/phpbb2/"; // anpassen
    
        $ret = preg_replace_callback
        (
            "#(\s)(".$phpbb_url.")(viewtopic\.php\?t=|viewforum\.php\?f=)(\d+)(\S*)([^ \"\n\r\t<]*)#i", 
            'raw_url_to_url_with_titel', 
            $ret 
        );
    

    ich bin schon die ganze zeit auf der suche wie ich

    $phpbb_root_path = "./"; // <- anpassen 
    $phpbb_url = "http://localhost/phpbb2/"; // anpassen
    

    automatisch bekommen kann



  • In welchem Ordner liegt denn dein Script?



  • document_root/phpbb



  • c:\wamp\root\phpbb2\include\bbcode.php

    aber ich glaube $phpbb_root_path = "./"; muss ich nicht anpassen(eigentlich müsste es ../ sein, aber wahrscheinlich wird bbcode.php selber auch im phpbb2 ordner includet und von da aus ist ./ richtig),
    dann bleibt noch $phpbb_url = "http://localhost/phpbb2/";

    [ Dieser Beitrag wurde am 11.03.2003 um 15:35 Uhr von Dimah editiert. ]



  • Probie es mal so:

    $phpbb_url = "http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/";
    


  • jup hat geklapt

    ps. hier ist so ein template dings bums

    ############################################################## 
    ## MOD Title: Raw Url Converter
    ## MOD Version: 0.9
    ## MOD Author: Dimah; choinka@web.de; Gerard Choinka
    ## MOD Description: This mod converts raw urls of topics or forums to urls with the topic or forum titel.
    ## 
    ## Installation Level: easy 
    ## Installation Time: 5 Minutes 
    ## Files To Edit: bbcode.php
    ## Included Files: 
    ############################################################## 
    ## For Security Purposes, Please Check: http://www.phpbb.com/mods/downloads/  for the 
    ## latest version of this MOD. Downloading this MOD from other sites could cause malicious code 
    ## to enter into your phpBB Forum. As such, phpBB will not offer support for MOD's not offered 
    ## in our MOD-Database, located at: http://www.phpbb.com/mods/downloads/  
    ############################################################## 
    ## This program is free software; you can redistribute it and/or modify
    ## it under the terms of the GNU General Public License as published by
    ## the Free Software Foundation; either version 2 of the License, or
    ## (at your option) any later version.
    ############################################################## 
    ## Before Adding This MOD To Your Forum, You Should Back Up All Files Related To This MOD 
    ##############################################################  
    
    # 
    #-----[ OPEN ]------------------------------------------ 
    #
    
    includes/bbcode.php
    
    # 
    #-----[ FIND ]------------------------------------------ 
    # 
    
    if ( !defined('IN_PHPBB') )
    {
        die("Hacking attempt");
    }
    
    # 
    #-----[ AFTER, ADD ]------------------------------------------ 
    # 
    
    include "./extension.inc";
    include "./config.".$phpEx;
    include "./includes/db.".$phpEx;
    
    # 
    #-----[ FIND ]------------------------------------------ 
    # 
    
    function make_clickable($text)
    {
    
        // pad it with a space so we can match things at the start of the 1st line.
        $ret = ' ' . $text;
    
    # 
    #-----[ BEFORE, ADD ]------------------------------------------ 
    # 
    
    function get_topic_titel($id)
    {
        global $db;   
        $sql = "SELECT topic_title FROM " . TOPICS_TABLE . " WHERE topic_id = '$id'";
        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 get_forum_titel($id)
    {
        global $db;   
        $sql = "SELECT forum_name FROM " . FORUMS_TABLE . " WHERE forum_id = '$id'";
        if ( !($result = $db->sql_query($sql)) )
        {
            message_die(GENERAL_ERROR, "Could not obtain newer/older Forum information", '', __LINE__, __FILE__, $sql);
        }
        $titel = $db->sql_fetchrow();
        return $titel['forum_name'];
    }
    
    function preg_replace_callback_func_raw_url_to_url_with_titel($subpattern)
    {
        $url = $subpattern[2].$subpattern[3].$subpattern[4].$subpattern[5];
        if($subpattern[3] == "viewtopic.php?t=")
            $titel = get_topic_titel($subpattern[4]);
        else
            $titel = get_forum_titel($subpattern[4]);
        return $subpattern[1]."<a href=\"".$url."\" target=\"_blank\">".$titel."</a>";
    }
    
    function raw_url_to_url_with_titel($ret)
    {
        $phpbb_url = "http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/";
    
        $ret = preg_replace_callback
        (
            "#(\s)(".$phpbb_url.")(viewtopic\.php\?t=|viewforum\.php\?f=)(\d+)(\S*)([^ \"\n\r\t<]*)#i", 
            'preg_replace_callback_func_raw_url_to_url_with_titel', 
            $ret 
        );
        return $ret;
    }
    
    # 
    #-----[ FIND ]------------------------------------------ 
    # 
    
    function make_clickable($text)
    {
    
        // pad it with a space so we can match things at the start of the 1st line.
        $ret = ' ' . $text;
    
    # 
    #-----[ AFTER, ADD ]------------------------------------------ 
    # 
    
        $ret = raw_url_to_url_with_titel($ret);
    
    # 
    #-----[ SAVE/CLOSE ALL FILES ]------------------------------------------ 
    # 
    # EoM
    

Anmelden zum Antworten