phpBB ShoutBox Tutorial

Μια περιοχή για το phpBB, την δημοφιλή δωρεάν πλατφόρμα για forums

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
Basilakis
PHP Moderator
Δημοσιεύσεις: 8574
Εγγραφή: 17 Νοέμ 2003 13:03
Τοποθεσία: Womans' Brain
Επικοινωνία:

phpBB ShoutBox Tutorial

Δημοσίευση από Basilakis » 31 Δεκ 2005 10:40

Βρήκα ένα tutorial για ένα shout box για το phpbb που δουλεύει σαν mod. Σας το παραθέτω λοιπόν με μερικά σχόλια για να καταλάβετε πως λειτουργεί.

Πρώτα από όλα φτιάχνουμε την βάση δεδομένων την οποία θα χρησιμοποιήσει το shout box μας.

Κώδικας: Επιλογή όλων

CREATE TABLE `shoutbox` ( `id` int(11) NOT NULL auto_increment, `message` text NOT NULL, `author` varchar(20) NOT NULL default '', `email` varchar(50) NOT NULL default '', `date` varchar(20) NOT NULL default '', `ip` varchar(20) NOT NULL default '', PRIMARY KEY (`id`) ) TYPE=MyISAM DEFAULT CHARSET=greek COLLATE=greek_general_ci PACK_KEYS=0 AUTO_INCREMENT=0
Από ότι βλέπετε η βάση δεδομένων μας περιέχει κάποια πραγματάκια όπως είναι το id του μηνύματος, το μήνυμα μας, τον συγγραφέα του μηνύματος, το e-mail του, την ημέρα που έγινε το post, και την ip του χρήστη που έστειλε το μήνυμα.

Τώρα θα φτιάξουμε τις σελίδες μας. Μέσα στις σελίδες έχω βάλει σχόλια για να γίνει όσο ποιο κατανοητό γίνεται αυτό το Tutorial.

Πρώτα φτιάχνουμε την σελίδα shout.php

Κώδικας: Επιλογή όλων

<?
/* Εδώ κάνετε include τα βασικά στοιχεία τα οποία χρειαζόμαστε για να συνδεθεί το shout box μας  με το phpbb. Μπορείτε να χρησιμοποιήσετε το config.php του phpbb αλλά θα πρέπει να κάνετε τις απαραίτητες αλλαγές στα παρακάτω στοιχεία!*/
$db_host = 'localhost'; 
$db_user = 'username'; 
$db_password = 'password'; 
$db_name = 'database_name'; 

mysql_connect&#40;$db_host,$db_user,$db_password&#41; or die&#40;mysql_error&#40;&#41;&#41;; 
mysql_select_db&#40;$db_name&#41; or die&#40;mysql_error&#40;&#41;&#41;;

/* Εδώ κάνουμε το query το οποίο θα κάνει select από την database τα τελευταία μηνύματα. Εδώ κάνει 15 μηνύματα. Εσείς εάν θέλετε παραπάνω ή λιγότερα απλώς διαλέξτε το */
$sql = mysql_query&#40;"SELECT * FROM shoutbox ORDER BY id DESC LIMIT 15"&#41;;
while&#40;$r=mysql_fetch_array&#40;$sql&#41;&#41;&#123;
    /* Εδώ ελέγχουμε εάν ο poster έχει μία ηλεκτρονική διεύθυνση*/
    if&#40;!$r&#91;'email'&#93;&#41;&#123;
        $mail = "";
    &#125;else&#123;
        $mail = "<a href=\"mailto&#58;$r&#91;email&#93;\">@</a>";
    &#125;
    /* Αυτό ελέγχει εάν ο χρήστης έχει web site */
    if&#40;!$r&#91;'site'&#93;&#41;&#123;
        $site = $r&#91;'author'&#93;;
    &#125;else&#123;
        $site = "<a href=\"$r&#91;site&#93;\">$r&#91;author&#93;</a>";
    &#125;
    
    /* Εδώ αποθηκεύει το display μέσα σε μία μεταβλητή για να μπορέσετε να το χρησιμοποιήσετε αργότερα. Για να διαμορφώσετε τον τρόπο με τον οποίο παράγονται απλώς αλλάξτε αυτό το κομμάτι. */
    $shout_block .= "<tr>
    <td>
    <b>$mail $site</b> &#58;".gmdate&#40;"m/j, g&#58;i a", $r&#91;'date'&#93;&#41;."&#58;
    <br>$r&#91;message&#93;
    <hr></td>
    </tr>";
&#125;

/* Αυτό είναι το table που όλα είναι ορατά */
echo "<table>
    $shout_block
</table>";
?>
Μετά φτιάχνουμε την σελίδα shoutbox.php

Κώδικας: Επιλογή όλων

<?
/* these clean up the users post and help to prevent spam by removing the white space from the beginning and end of the string */
$author = trim&#40;$_POST&#91;'author'&#93;&#41;;
$email = trim&#40;$_POST&#91;'email'&#93;&#41;;
$site = trim&#40;$_POST&#91;'site'&#93;&#41;;

/* The line below is a very specific matching tool that uses pearl regular expressions, not exactly easy to learn, so don't try to modify it unless you know what you're doing.
The last element of the function is the name of the array that will be filled with matches, easy to change, just change every $sit in this script and you'll be fine */
preg_match&#40;"#http&#58;//&#91;&#40;www.|&#41;a-z0-9&#40;-|_|&#41;a-z0-9&#93;*.&#91;a-z&#93;*#i", $site, $sit&#41;;
$message = str_replace&#40;"\n", "<br>", ltrim&#40;rtrim&#40;$_POST&#91;'message'&#93;&#41;&#41;&#41;;

/* Sets the authors name, an array of "reserved" names, and an array of who can use those names, with what password.
   Then, uses http authentification to log the user in.  It should be simple enough to add more reserved names */
$author = trim&#40;$_POST&#91;'author'&#93;&#41;;
$names = array&#40;'admin', 'mod', 'moderator', 'webmaster'&#41;;

/* This is who can use the above names. If you need any more info as to how to what exactly this is, search php.net for "array" and you should get your answer */
$admin = array&#40;'Name' => 'md5 of users password'&#41;;

/* This loops through the reserved names to match what the user put in */
foreach&#40;$names as $key => $name&#41;&#123;
    if&#40;stristr&#40;$author, $name&#41;&#41;&#123;
        /* This is where the above array with the "md5 of users password" comes into play. */
        if&#40;$admin&#91;$_SERVER&#91;'PHP_AUTH_USER'&#93;&#93; != md5&#40;$_SERVER&#91;'PHP_AUTH_PW'&#93;&#41;&#41;&#123;
            header&#40;'WWW-Authenticate&#58; Basic realm="Reserved Name"'&#41;; // do not edit
            header&#40;'HTTP/1.0 401 Unauthorized'&#41;; // do not edit
            die&#40;'Sorry, you need to be authorized to use that name, please try again.'&#41;;
        &#125;elseif&#40;$admin&#91;$_SERVER&#91;'PHP_AUTH_USER'&#93;&#93; == md5&#40;$_SERVER&#91;'PHP_AUTH_PW'&#93;&#41;&#41;&#123;
            $logged = true;
            /* break is used to stop the loop from continuing uneccessarily */
            break;
        &#125;else&#123;
            $logged = false;
            break;
        &#125;
    &#125;else&#123;
        $logged = true;
    &#125;
&#125;

/* If you notice above, the var $logged is set if you either logged in successfully, or didn't need to log in, just a little more secuirty */
if&#40;!$logged&#41;&#123;
    die&#40;'Sorry, an error has occured during verification, please try again.'&#41;;
&#125;

/* the include&#40;&#41; is for the database connection, if you don't have a config file copy and paste the database info for shout.php
remember to the whole include&#40;'config.php'&#41;; to the connection info */
include&#40;'config.php'&#41;;

/* this will trim out any white space in the beginning and end of the post, and then make it so when the enter/return key was pressed, it will insert an acctual break */
$message = str_replace&#40;"\n", "<br />", ltrim&#40;rtrim&#40;$_POST&#91;'message'&#93;&#41;&#41;&#41;;

/* if the submit button was pressed &#40;you need a button named "submit" or the whole thing won't work */
if&#40;$_POST&#91;'submit'&#93;&#41;&#123;
    /* The back link */ 
    $back = "<a href=\"javascript&#58; history.back&#40;-1&#41;\">Back</a>";
    
    /* simple spam check &#40;very simple... lots of ways around it&#41;, !$author just checks to see if $author was filled */
    if&#40;$author == 'Name' || $author == 'user' || $author == 'spam' || !$author&#41;&#123;
        die&#40;"Error! No name entered.<br>$back"&#41;;
    &#125;
    if&#40;&#40;$site&#41; && &#40;!$sit&#41;&#41;&#123;
        die&#40;"Error! Enter a valid website with 'http&#58;//' or no site at all.<br>$back"&#41;;
    &#125;
    if&#40;$message == 'Message' || !$message&#41;&#123;
        die&#40;"Error! No message entered<br>$back"&#41;;
    &#125;

/* strip html tag's, allow only <a>, <i>, and <b> tags
if you wish to add more tags simple add the tag right after <b> &#40;make sure to use a space after <b>&#41; */
$message = strip_tags&#40;$message, '<a> <i> <b>'&#41;; 
$email = strip_tags&#40;$email&#41;; 
$author = strip_tags&#40;$author&#41;; 

/* check message length, change "200" to change the limit &#40;including spaces&#41; */
    $limit = 200;
    $message_length = strlen&#40;stripslashes&#40;$message&#41;&#41;;
    if&#40;$message_length > $limit&#41;&#123;
        die&#40;"Messages must be shorter then $limit characters. Your message is&#58; $message_length characters"&#41;;
    &#125;

/* smilies! in the $smiles array you can probably get this, it goes somewhat like this
"THING_USER_TYPES_IN" => " IMG_LOCATION ",
"ANOTHER_THING" => " ANOTHER_IMAGE "
Don't forget commas. */
$smiles = array&#40;"&#58;&#41;" => ' <img src="/images/smilies/icon_smilie.gif" /> ',
                "&#58;&#40;" => ' <img src="/images/smilies/icon_sad.gif" /> ',
                "&#58;D" => ' <img src="/images/smilies/icon_biggrin.gif" /> '&#41;;
$message = strtr&#40;$message, $smiles&#41;;

/* special date format that will insert a time stamp instead of a time, which allows you to change the way you display time freely */
$date = date&#40;"U"&#41;; 

/* this inserts everything into the database then closes the connection to prevent hacking. */
mysql_query&#40;"INSERT INTO shoutbox &#40;message, author, email, date, ip&#41; 
VALUES &#40;'$message','$author','$email','$date','$_SERVER&#91;REMOTE_ADDR&#93;'&#41;"&#41;; 
mysql_close&#40;&#41;; 

/* thank you page, redirects 5 seconds after the page is loaded. Change the <meta> tag's "content=5" to the number of seconds you want */
echo "<meta http-equiv=refresh content=5;URL=index.php>
Thanks for your post, you will be reditrected in 5 seconds<br><a href=\"/index.php\">Return Home</A> or <a href=\"/shoutbox.php\">View Shoutbox</A>";
&#125;else&#123;
    include&#40;'shout.php'&#41;;

    /*** Form to use w/ shoutbox, put this below where you display your shout.php file ***/
    echo "<form method=POST name=shoutbox action=shoutbox.php>
    <input name=author type=text value=Name maxlength=15><br>
    <input name=email type=text value=E-mail><br>
    <input name=site type=text value=Website><br>
    <textarea name=message cols=18>Message</textarea><br>
    <input type=submit name=submit value=Submit> 
    </form>
    <a href=index.php>Return Home</a>";
&#125;
?> 
Το δεύτερο κομάτι δεν πρόλαβα να το μεταφράσω. :oops: . Θα το κάνω και θα κάνω αλαγή στο topic. Παρόλα αυτά μπορείται να το χρησιμοποιήσετε και έτσι! :wink:


ChrisAslani
Δημοσιεύσεις: 9
Εγγραφή: 27 Νοέμ 2009 01:55

phpBB ShoutBox Tutorial

Δημοσίευση από ChrisAslani » 27 Νοέμ 2009 02:21

Γειά σου Βασίλη,

όπως έχεις δει από ένα άλλο θέμα με mashup είμαι αρχάριος. Έχω δημιουργήσει ένα forum phpBB3 έχω την βάση όλα τρέχουν μια χαρά αλλά δεν μπορώ να βάλω σχόλια και να ανοίξω καινούργιο θέμα σαν απλός χρήστης.

Μήπως ξέρεις πως μπορώ; Χρειάζεται επιπλέον κώδικα;

Σε ευχαριστώ πολύ,

Chris

george789
Δημοσιεύσεις: 3
Εγγραφή: 12 Ιουν 2010 22:44

phpBB ShoutBox Tutorial

Δημοσίευση από george789 » 14 Αύγ 2010 14:05

Καλημερα Βασιλη εχουμε φτιαξει με μια ομορφη παρεα ενα φορουμ ειναι phpBB 3.0.7-PL1 με free hosting προσπαθουμε να προσθεσουμε το shoutbox αλλα μας βγαζει error τι λες να φταει;

Ευχαριστω
προκαταβολικα
Γιωργος....

Άβαταρ μέλους
Basilakis
PHP Moderator
Δημοσιεύσεις: 8574
Εγγραφή: 17 Νοέμ 2003 13:03
Τοποθεσία: Womans' Brain
Επικοινωνία:

phpBB ShoutBox Tutorial

Δημοσίευση από Basilakis » 14 Αύγ 2010 15:28

Ότι το shoutbox είναι phpBB 2.*

george789
Δημοσιεύσεις: 3
Εγγραφή: 12 Ιουν 2010 22:44

phpBB ShoutBox Tutorial

Δημοσίευση από george789 » 14 Αύγ 2010 23:48

Πρωτα απ'ολα ενα μεγαλο ευχαριστω για την αμεση απαντηση.Αν καταλαβα σωστα πρεπει να αλαξουμε την version του forum δηλαδη στην version 2; δεν υπαρχει καποια λυση να βαλουμε το shoutbox στην version που εχουμε,(3.0.7-PL1)βαζοντας καποια επιπλεον εντολη;
Επισης μηπως ξερεις πως μπορουμε να βαλουμε στα posts μια επιλογη thank's με την οποια να μπορουν οι members να πουν ευχαριστω στον δημιουργο του θεματος;
Σε παρακαλω πες μας τι πρεπει να κανουμε βημα βημα για την προσθηκη αυτων των δυο απαρετητων εφαρμογων για το forum μας....

Ευχαριστω πολυ.......

george789
Δημοσιεύσεις: 3
Εγγραφή: 12 Ιουν 2010 22:44

phpBB ShoutBox Tutorial

Δημοσίευση από george789 » 19 Αύγ 2010 12:39

Basilakis μηπως μπορεις να βοηθησεις σε παρακαλω;

Απάντηση

Επιστροφή στο “phpBB”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης