BBcode using a DB.

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    BBcode using a DB.

    Warning, there are not added protection to sql injections. So use mysql_real_escape_string() and htmlspecialchars() Before going though this function!
    Though it is recommended you do not use this function for inserting into DB, but for outputting From DB.

    Code:
    function my_bbcode($string)
    {
    $searches = array(
                    ':)',
                    ':D',
                    ':(',
                    ';)',
                    ':P',
                    '8)'
                    );
    
    $replaces = array(
                    '<img src="bbcodeimgs/default/smile.gif" alt="" />',
                    '<img src="bbcodeimgs/default/biggrin.gif" alt="" />',
                    '<img src="bbcodeimgs/default/sad.gif" alt="" />',
                    '<img src="bbcodeimgs/default/wink.gif" alt="" />',
                    '<img src="bbcodeimgs/default/tongue.gif" alt="" />',
                    '<img src="bbcodeimgs/default/cool.gif" alt="" />'
                    );
    
    $string = str_replace($searches, $replaces, $string);
    
    $searches1 = array(
                    '/\[b\](.*?)\[\/b\]/is',
                    '/\[i\](.*?)\[\/i\]/is',
                    '/\[u\](.*?)\[\/u\]/is',
                    '/\[url\=(.*?)\](.*?)\[\/url\]/is',
                    '/\[color\=(.*?)\](.*?)\[\/color\]/is'
                    );
                    
    $replaces1 = array(
                    '<strong>$1</strong>',
                    '<em>$1</em>',
                    '<u>$1</u>',
                    '<a href="$1">$2</a>',
                    '<span style="color: $1;">$2</span>'
                    );
                    
    $string = preg_replace($searches1, $replaces1, $string);
    
    return $string;
    
    }
    sql
    Code:
    CREATE TABLE `site_bbcode` (
      `package` tinyint(4) NOT NULL,
      `search` varchar(255) NOT NULL,
      `replace` varchar(255) NOT NULL,
      `replace_type` varchar(10) NOT NULL,
      `disabled` tinyint(4) NOT NULL
    );
    Now that we have our DataBase Set up. Lets Connect!

    config.php: (name it what you want :P)
    Code:
    $db_local = 'localhost'; //Localhost tells the server that the DB is local (dah)
    $db_user = 'da_user_man'; //This is the user to log into MySql.
    $db_pass = 'never_give_out_your_pass!'; //This is the pass to log into MySql.
    $db_name = 'site_bbcode'; //This is the DataBase we are chosing to work with.
    
    //Connect to DataBase.
    mysql_connect($db_local, $db_user, $db_pass)
        or die(mysql_error());
    Ok now we are done with most db stuff...

    Heres the hole bbcode php function.
    Code:
    require 'config.php';
    
    function my_bbcode($string)
    {
        //BBcode Out of database!!! FTW!!!!
        
        //Get BBcodes From DB
        $bbcode_package = 1;
        $bbcodes = mysql_query("SELECT `search`,`replace`,`replace_type` FROM `site_bbcode`
                               WHERE `package`='$bbcode_package'
                               AND `disabled`='0'");
            if(mysql_num_rows($bbcodes)!=0)
            {
            //Know if it is the first bbcode.
            $number['str'] = 1;
            $number['preg'] = 1;
            //Start array1
            $array1['str'] = "\$search['str'] = array(";
            $array1['preg'] = "\$search['preg'] = array(";
            //Start array2
            $array2['str'] = "\$replace['str'] = array(";
            $array2['preg'] = "\$replace['preg'] = array(";
                while($bbcode = mysql_fetch_array($bbcodes))
                {
                    if($bbcode['replace_type'] == 'str')
                    {
                    //Make inner array
                        if($number['str'] != 1)
                        {
                        //Not first part (inner) array.
                        $bbcodeA = ", '{$bbcode['search']}'";
                        $bbcodeB = ", '{$bbcode['replace']}'";
                        }
                        else
                        {
                        //First part (inner) array.
                        $bbcodeA = "'{$bbcode['search']}'";
                        $bbcodeB = "'{$bbcode['replace']}'";
                        }
                    $array1['str'] = $array1['str'].$bbcodeA;
                    $array2['str'] = $array2['str'].$bbcodeB;
                    //Not the first time any more.
                    $number['str']++;
                    }
                    elseif($bbcode['replace_type'] == 'preg')
                    {
                    //Make inner array
                        if($number['preg'] != 1)
                        {
                        //First part (inner) array.
                        $bbcodeA = ", '{$bbcode['search']}'";
                        $bbcodeB = ", '{$bbcode['replace']}'";
                        }
                        else
                        {
                        //Not first part (inner) array.
                        $bbcodeA = "'{$bbcode['search']}'";
                        $bbcodeB = "'{$bbcode['replace']}'";
                        }
                    $array1['preg'] = $array1['preg'].$bbcodeA;
                    $array2['preg'] = $array2['preg'].$bbcodeB;
                    //Not the first time any more.
                    $number['preg']++;
                    }
                    else
                    {
                    //
                    }
                }
            
            //Finish arrays.
            $array1['str'] = $array1['str'].");";
            $array2['str'] = $array2['str'].");";
            $array1['preg'] = $array1['preg'].");";
            $array2['preg'] = $array2['preg'].");";
            eval($array1['str']);
            eval($array2['str']);
            eval($array1['preg']);
            eval($array2['preg']);
            $string = str_replace($search['str'], $replace['str'], $string);
            $string = preg_replace($search['preg'], $replace['preg'], $string);
            }
    
            return $string;
    }
    We need to break that up right? OK!
    Code:
    require 'config.php';
    That just includes the mysql connection file we just made.
    Code:
    $bbcode_package = 1;
    This feature is optional. It just tells it to get bbcodes in package 1.
    Code:
     $bbcodes = mysql_query("SELECT `search`,`replace`,`replace_type` FROM `site_bbcode`
                               WHERE `package`='$bbcode_package'
                               AND `disabled`='0'");
    That is a sql query that selects the bbcodes from the DataBase.
    Again you can learn sql at the links above.
    Code:
    if(mysql_num_rows($bbcodes)!=0)
    This sees if there are any bbcodes.
    Code:
     //No if it is the first bbcode.
            $number['str'] = 1;
            $number['preg'] = 1;
            //Start array1
            $array1['str'] = "\$search['str'] = array(";
            $array1['preg'] = "\$search['preg'] = array(";
            //Start array2
            $array2['str'] = "\$replace['str'] = array(";
            $array2['preg'] = "\$replace['preg'] = array(";
    We are now making arrays with strings in php!
    You will notice that there is $array['str'] and $array1['preg'].

    This is because some codes (Regex) does not get replaced with str_replace right. It needs preg_replace. And it also goes the other way around.
    So this just keeps the arrays separate.
    Code:
    while($bbcode = mysql_fetch_array($bbcodes))
    Start that loop!
    Code:
    if($bbcode['replace_type'] == 'str')
    This checks to see what replace type is needed.
    Code:
    if($number['str'] != 1)
    {
    //First part (inner) array.
    $bbcodeA = ", '{$bbcode['search']}'";
    $bbcodeB = ", '{$bbcode['replace']}'";
    }
    else
    {
    //Not first part (inner) array.
    $bbcodeA = "'{$bbcode['search']}'";
    $bbcodeB = "'{$bbcode['replace']}'";
    }
    Start making that array!
    Code:
    $array1['preg'] = $array1['preg'].$bbcodeA;
    $array2['preg'] = $array2['preg'].$bbcodeB;
    Put the vars to gether to form the array.
    Code:
    $number['str']++;
    //And
    $number['preg']++;
    This just adds + 1 onto it self making it not 1 anymore.
    This makes the array like:
    Code:
    array('', '', '', '');
    Not:
    Code:
    array(, '', '', '', '');
    Code:
    elseif($bbcode['replace_type'] == 'preg')
    This is the same thing as:
    Code:
    if($bbcode['replace_type'] == 'str')
    Just with preg_replace not str_replace.
    Code:
    //Finish arrays.
    $array1['str'] = $array1['str'].");";
    $array2['str'] = $array2['str'].");";
    $array1['preg'] = $array1['preg'].");";
    $array2['preg'] = $array2['preg'].");";
    This is what ends the arrays.

    From:
    Code:
    array('bla', 'da', 'do', 'bla'
    To:
    Code:
    array('bla', 'da', 'do', 'bla');
    The Coolest part!
    Code:
    eval($array1['str']);
    eval($array2['str']);
    eval($array1['preg']);
    eval($array2['preg']);
    This makes the "string" arrays REAL arrays! Cool uh?

    The last part! Replace!
    Code:
     $string = str_replace($search['str'], $replace['str'], $string);
    Replace with str_replace.
    Code:
      $string = preg_replace($search['preg'], $replace['preg'], $string);
    Replace with preg_replace.
    Code:
    return $string;
    Returns the string in it's new form!

    BBCODES
    Code:
    INSERT INTO `site_bbcode` (`package`, `search`, `replace`, `replace_type`, `disabled`) VALUES
    (1, ':)', '<img src="img_smile" alt="" />', 'str', 0),
    (1, ':D', '<img src="img_bigSmile" alt="" />', 'str', 0),
    (1, ':(', '<img src="img_sad" alt="" />', 'str', 0),
    (1, ';)', '<img src="img_wink" alt="" />', 'str', 0),
    (1, ':P', '<img src="img_tongue" alt="" />', 'str', 0),
    (1, '8)', '<img src="img_cool" alt="" />', 'str', 0),
    (1, '/\\[b\\](.*?)\\[\\/b\\]/is', '<strong>$1</strong>', 'preg', 0),
    (1, '/\\[i\\](.*?)\\[\\/i\\]/is', '<em>$1</em>', 'preg', 0),
    (1, '/\\[u\\](.*?)\\[\\/u\\]/is', '<u>$1</u>', 'preg', 0),
    (1, '/\\[url\\=(.*?)\\](.*?)\\[\\/url\\]/is', '<a href="$1">$2</a>', 'preg', 0),
    (1, '/\\[color\\=(.*?)\\](.*?)\\[\\/color\\]/is', '<span style="color: $1;">$2</span>', 'preg', 0),
    (1, '/\\[highlight\\](.*?)\\[\\/highlight\\]/is', '<span class="thighlight">$1</span>', 'preg', 0);
Working...
X