login  Naam:   Wachtwoord: 
Registreer je!
 Forum

UBB parser invoegen in weblog

Offline luchtpost - 10/11/2007 19:24 (laatste wijziging 10/11/2007 20:16)
Avatar van luchtpostPHP interesse Beste sitemasters,
Is het mogelijk in het volgende script een UBB parser te verwerekn?

index.php
  1. <?php mysql_connect("localhost","","");
  2. $query ="SELECT entrytitle, entrytext,";
  3. $query.=" DATE_FORMAT(entrydate, '%M %d, %Y') AS date";
  4. $query.=" FROM weblog ORDER BY entrydate DESC LIMIT 10";
  5. $result=mysql_query($query);
  6. while (list($entrytitle,$entrytext,$entrydate) = mysql_fetch_row($result)) {
  7. echo "<dt>$entrytitle</b></dt>"; echo "<dt>$entrydate</b></dt>";
  8. echo "<dd>$entrytext</dd><br>";
  9. }
  10. ?>


Graag zou ik deze parser gebruiken:

ubb.php
  1. <?php function parseubb($bericht,$quote_color){
  2. $bericht = str_replace ("[br]","\n",$bericht);
  3. $bericht = str_replace ("\n","<br>",$bericht);
  4. $bericht = str_replace ("","<b>Code:</b><br><table bgcolor=\"#000000\" cellspacing=\"1\" width=\"90%\"><tr><td><table cellpadding=2 cellspacing=\"0\" bgcolor=\"#FFFFFF\" width=\"100%\"><tr><td><font face=Courier size=\"1\" color=\"#000000\">", $bericht);
  5. $bericht = str_replace ("", "</font></td></tr></table></td></tr></table>", $bericht);
  6. $bericht = str_replace ("[b ]", "<b>", $bericht); // [b ] zonder spatie
  7. $bericht = str_replace ("[i ]", "<i>", $bericht); // [i ] zonder spatie
  8. $bericht = str_replace ("[u ]", "<u>", $bericht); // [u ] zonder spatie
  9. $bericht = str_replace ("[s]", "<s>", $bericht);
  10. $bericht = str_replace ("[/b ]", "</b>", $bericht); // [/b ] zonder spatie
  11. $bericht = str_replace ("[/i ]", "</i>", $bericht); // [/i ] zonder spatie
  12. $bericht = str_replace ("[/u ]", "</u>", $bericht); // [/u ] zonder spatie
  13. $bericht = str_replace ("[/s]", "</s>", $bericht);
  14. $bericht = str_replace ("[move]", "<div align=\"center\"><marquee width=\"90%\">", $bericht);
  15. $bericht = str_replace ("[/move]", "</marquee></div>", $bericht);
  16. $bericht = preg_replace ("#\[color=(\#[0-9A-F]{6}|[a-z\-]+)\](.*?)\[/color\]#si", "<font color=\"\\1\">\\2</font>", $bericht);
  17. $bericht = preg_replace ("/\[font=(.*)\](.*)\[\/font\]/", "<font face=\"$1\">$2</font>", $bericht);
  18. $bericht = preg_replace ("/\[size=(.*)\](.*)\[\/size\]/", "<font size=\"$1\">$2</font>", $bericht);
  19. $bericht = preg_replace("/\[img\](.*?)\[\/img\]/si", "<img src=\"\\1\" border=\"0\">",$bericht);
  20. $bericht = str_replace ("[tt]", "<tt>", $bericht);
  21. $bericht = str_replace ("[/tt]", "</tt>", $bericht);
  22. $bericht = str_replace ("[q]", "<q>", $bericht);
  23. $bericht = str_replace ("[/q]", "</q>", $bericht);
  24. $bericht = str_replace ("[p]", "<p>", $bericht);
  25. $bericht = str_replace ("[/p]", "</p>", $bericht);
  26. $bericht = str_replace ("[blockquote]", "<blockquote>", $bericht);
  27. $bericht = str_replace ("[/blockquote]", "</blockquote>", $bericht);
  28. $bericht = str_replace ("[h1]", "<h1>", $bericht);
  29. $bericht = str_replace ("[/h1]", "</h1>", $bericht);
  30. $bericht = str_replace ("[left]", "<div align=left>", $bericht);
  31. $bericht = str_replace ("[/left]", "</div>", $bericht);
  32. $bericht = str_replace ("[center]", "<div align=\"center\">", $bericht);
  33. $bericht = str_replace ("[/center]", "</div>", $bericht);
  34. $bericht = str_replace ("[right]", "<div align=\"right\">", $bericht);
  35. $bericht = str_replace ("[/right]", "</div>", $bericht);
  36. $bericht = str_replace ("[sub]", "<sub>", $bericht);
  37. $bericht = str_replace ("[/sub]", "</sub>", $bericht);
  38. $bericht = str_replace ("[sup]", "<sup>", $bericht);
  39. $bericht = str_replace ("[/sup]", "</sup>", $bericht);
  40. $bericht = str_replace ("[[","{",$bericht);
  41. $bericht = str_replace ("]]","}",$bericht);
  42. $bericht = str_replace ("|","&#124;",$bericht);
  43. $bericht = str_replace ("{{","[",$bericht);
  44. $bericht = str_replace ("}}","]",$bericht);
  45. $bericht = str_replace ("[hr]","<hr color=\"#FFFFFF\" noshade />",$bericht);
  46. $bericht = eregi_replace("\\[email=([^\\[]*)\\]([^\\[]*)\\[/email\\]", "<a href=\"mailto:\\1\">\\2</a>",$bericht); $bericht = eregi_replace("\\[url=([^\\[]*)\\]([^\\[]*)\\[/url\\]","<a href=\"\\1\" target=_blank>\\2</a>",$bericht);
  47. $bericht = preg_replace("/\[url\](.*?)\[\/url\]/si", "<a href=\"\\1\" target=_blank>\\1</a>",$bericht);
  48. $bericht = preg_replace("/\[email\](.*?)\[\/email\]/si", "<a href=\"mailto:\\1\">\\1</a>",$bericht);
  49. $bericht = preg_replace ("#\[ftp\]([a-z]+?://){1}([a-z0-9\-\.,\?!%\*_\#:;~\\&$@\/=\+\(\)]+)\[/ftp\]#", "<a href=\"ftp://\\1\\2\" target=\"_blank\">\\2</a>", $bericht);
  50. $bericht = preg_replace ("#\[ftp\]([a-z0-9\-\.,\?!%\*_\#:;~\\&$@\/=\+\(\)]+)\[/ftp\]#", "<a href=\"ftp://\\1\" target=\"_blank\">\\1</a>", $bericht);
  51. $bericht = preg_replace ("#\[ftp=([a-z]+?://){1}([a-z0-9\-\.,\?!%\*_\#:;~\\&$@\/=\+\(\)]+)\](.*?)\[/ftp\]#", "<a href=\"ftp://\\1\\2\" target=\"_blank\">\\2</a>", $bericht);
  52. $bericht = preg_replace ("#\[ftp=([a-z0-9\-\.,\?!%\*_\#:;~\\&$@\/=\+\(\)]+)\](.*?)\[/ftp\]#", "<a href=\"ftp://\\1\" target=\"_blank\">\\2</a>", $bericht); $bericht = preg_replace("/\[quote=(.+?)\](.+?)\[\/quote\]/is", '<br><table width="100%" cellspacing="0" cellpadding="0"><tr><td width="5%">&nbsp;</td><td>Quote:</td></tr><tr><td width="5%">&nbsp;</td><td bgcolor=".$quote_color." class="border">$1<br>$2</td></tr></table><br>', $bericht); $bericht = str_replace ("[list]","<ul>",$bericht);
  53. $bericht = str_replace ("[*]","<li>",$bericht);
  54. $bericht = str_replace ("[/list]","</li></ul>",$bericht);
  55. return $bericht;
  56. }
  57. ?>


Normaal gezien moet ge dan ubb.php includen in index.php maar dat is niet voldoende. Wat moet ik nog aanpassen?

19 antwoorden

Gesponsorde links
Offline ranco - 10/11/2007 19:31 (laatste wijziging 10/11/2007 19:33)
Avatar van ranco PHP gevorderde Alleen includen is niet genoeg. in ubb.php staat de functie die alles moet verwerken. Maar deze moet je in index.php wel aanroepen. Dit doet je door:

in je index.php je in dit aan te passen:
  1. echo "<dd>parseubb($entrytext)</dd><br>";

Voordat je code op het scherm komt doorloopt hij dan de ubbfunctie.

Ik merk uit je vraag op dat je nog niet, of nauwelijks verstand hebt van functies. Misschien is het wel handig om je hier wat meer in te gaan verdiepen?

EDIT: GEK! haal je inlogcodes weg uit je code..... dit hoeft niemand te weten....
Zo kan iedereen in je database gaan liggen rommelen! NOOOOOIIIT doen!
Offline luchtpost - 10/11/2007 20:25
Avatar van luchtpost PHP interesse Oh, inlogcodes verwijderd!
Als ik dat stukje code vervang werkt de parser nog steeds niet...
Offline ranco - 11/11/2007 02:56
Avatar van ranco PHP gevorderde Verander deze regel code:
  1. while (list($entrytitle,$entrytext,$entrydate) = mysql_fetch_row($result)) {


Naar deze regel code:

  1. While($arr = mysql_fetch_assoc($result)){
  2. echo ($arr["entrytitle"]."<br />");
  3. echo ($arr["entrydate"]. "</b>);
  4. echo ($arr["entrytext"]);
  5. }
Offline Giant - 11/11/2007 12:50
Avatar van Giant PHP beginner
  1. While($arr = mysql_fetch_assoc($result)){
  2. echo ($arr["entrytitle"]."<br />");
  3. echo ($arr["entrydate"]. "</b>");
  4. echo ($arr["entrytext"]);
  5. }

is de code van ranco maar even een foutje er uit gehaald 
Offline ranco - 11/11/2007 16:06 (laatste wijziging 11/11/2007 16:08)
Avatar van ranco PHP gevorderde Inderdaad, een aanhalingsteken vergeten.... schoonheidsfoutjes  

Edit:

Meteen even iets vollediger gemaakt:

  1. While($arr = mysql_fetch_assoc($result)){
  2. echo (parseubb($arr["entrytitle"])."<br />");
  3. echo (parseubb($arr["entrydate"]). "</b>");
  4. echo (parseubb($arr["entrytext"]));
  5. }
Offline luchtpost - 11/11/2007 17:25 (laatste wijziging 28/06/2008 21:49)
Avatar van luchtpost PHP interesse Mmm, ik krijg deze error:

Parse error: syntax error, unexpected '}' in /customers/mijnsite.be/mijnsite.be/httpd.www/index.php on line 30
Offline ranco - 11/11/2007 18:23
Avatar van ranco PHP gevorderde Geef ons dan even de code aub. Het gedeelte van je geposte index.php gaat niet t/m regel 30 
Offline luchtpost - 11/11/2007 18:28 (laatste wijziging 11/11/2007 18:49)
Avatar van luchtpost PHP interesse Dit is de code:

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta name="author" content="" />
  5. <meta http-equiv="content-type"
  6. content="text/html;charset=iso-8859-1" />
  7. <link rel="stylesheet" href="style.css"
  8. type="text/css" />
  9. <title>luchtpost</title>
  10. </head>
  11. <body>
  12. <div id="container"><?php include('ubb.php');?>
  13. <?php mysql_connect("localhost","","");
  14. $query ="SELECT entrytitle, entrytext,";
  15. $query.=" DATE_FORMAT(entrydate, '%M %d, %Y') AS date";
  16. $query.=" FROM weblog ORDER BY entrydate DESC LIMIT 10";
  17. $result=mysql_query($query);
  18. While($arr = mysql_fetch_assoc($result)){
  19. echo ($arr["entrytitle"]."<br />");
  20. echo ($arr["entrydate"]. "</b>");
  21. echo ($arr["entrytext"]);
  22. }
  23. echo "<dt>$entrytitle</b></dt>";
  24. echo "<dt>$entrydate</b></dt>";
  25. echo "<dd>$entrytext</dd><br>";
  26. }
  27. ?></div>
  28. </body>
  29. </html>
Offline Godlord - 11/11/2007 18:34 (laatste wijziging 11/11/2007 18:41)
Avatar van Godlord PHP gevorderde Ik zie 2 maal } en maar 1 maal {. Dat klopt niet echt. Ik heb het over Lijn: 19, 23 en 27 als je de accolades zoekt.

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta name="author" content="" />
  5. <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
  6. <link rel="stylesheet" href="style.css" type="text/css" />
  7. <title>luchtpost</title>
  8. </head>
  9.  
  10. <body>
  11. <div id="container">
  12. <?php
  13. include('ubb.php');
  14. mysql_connect("localhost","xxx","xxx");
  15. mysql_select_db("luchtpost_be");
  16. $query = "SELECT entrytitle, entrytext,";
  17. $query .= " DATE_FORMAT(entrydate, '%M %d, %Y') AS date";
  18. $query .= " FROM weblog ORDER BY entrydate DESC LIMIT 10";
  19. $result = mysql_query($query);
  20. while ($arr = mysql_fetch_assoc($result)) {
  21. echo ($arr["entrytitle"]."<br />");
  22. echo ($arr["entrydate"]. "</b>");
  23. echo ($arr["entrytext"]);
  24. }
  25. /* echo "<dt>$entrytitle</b></dt>";
  26.   echo "<dt>$entrydate</b></dt>";
  27.   echo "<dd>$entrytext</dd><br>";
  28.   } */
  29. ?>
  30. </div>
  31. </body>
  32. </html>


Note: niet je MySQL gebruikersnaam en wachtwoord opgeven!
Offline luchtpost - 11/11/2007 18:54
Avatar van luchtpost PHP interesse De ubb parser doet nog steeds niets...
Offline Godlord - 11/11/2007 18:57
Avatar van Godlord PHP gevorderde Vind ik niet zo vreemd eigenlijk, er wordt nergens parseubb() gebruikt.
Offline Gerard - 11/11/2007 18:58
Avatar van Gerard Ouwe rakker Ik wil je nog even een paar kleine dingen als tip meegeven die wat off-topic zijn. Je maakt gebruik van de volgende constructie om de query op te bouwen:
  1. <?php
  2. $query ="SELECT entrytitle, entrytext,";
  3. $query.=" DATE_FORMAT(entrydate, '%M %d, %Y') AS date";
  4. $query.=" FROM weblog ORDER BY entrydate DESC LIMIT 10";


Veel coding standards houden echter de volgende notatie aan:
  1. <?php
  2. $query = "SELECT entrytitle, entrytext,
  3. DATE_FORMAT(entrydate, '%M %d, %Y') AS date
  4. FROM weblog
  5. ORDER BY entrydate DESC
  6. LIMIT 10";


Mocht je dat toch niet zo aanstaan dan wil je alsnog adviseren om je query als volgt te schrijven:
  1. <?php
  2. $query = "SELECT entrytitle, entrytext,"
  3. . "DATE_FORMAT(entrydate, '%M %d, %Y') AS date"
  4. . "FROM weblog"
  5. . "ORDER BY entrydate DESC"
  6. . "LIMIT 10";


Dat leest sowieso wat prettiger en je zet de text maar één keer weg in de variabele in plaats van 3 keer. Miliseconden, maar toch.

@Godlord
Wanneer je gegevens naar het beeld wegzet met PHP.net: echo dien je géén gebruik te maken van de (). Dit heeft er mee te maken dat echo géén functie is maar een language construct.

@Topic-Start
Variabelen moet je buiten de quotes halen. Wanneer je toch gebruik wil maken van variabelen binnen de quotes heeft de volgende setup de voorkeur:
  1. <?php
  2. echo "Dit is een {$variabele} binnen quotes";


Verder dien je alle gegevens die je wegzet naar het scherm even de eventuele slashes te verwijderen (PHP.net: stripslashes) en daarnaast moet je het even beveiligen met PHP.net: htmlentities of PHP.net: htmlspecialchars om gekke dingen te voorkomen.

Ik wil je daarnaast ook adviseren om gebruik te maken van betere variabelenamen binnen je applicatie. Ik gebruik eerst jouw voorbeeld en geef dan één van mij.
  1. <?php
  2. mysql_connect("localhost","luchtpost_be","HIERSTONDJEPASS");
  3. mysql_select_db("luchtpost_be");
  4. $query ="SELECT entrytitle, entrytext,";
  5. $query.=" DATE_FORMAT(entrydate, '%M %d, %Y') AS date";
  6. $query.=" FROM weblog ORDER BY entrydate DESC LIMIT 10";
  7. $result=mysql_query($query);
  8. While($arr = mysql_fetch_assoc($result)){
  9. echo ($arr["entrytitle"]."<br />");
  10. echo ($arr["entrydate"]. "</b>");
  11. echo ($arr["entrytext"]);
  12. }
  13. ?>


  1. <?php
  2.  
  3. $databaseConnection = mysql_connect('localhost', 'username', 'password');
  4. $databaseSelect = mysql_select_db('database', $databaseConnection);
  5.  
  6. $weblogEntries = mysql_query("SELECT entrytitle, entrytext,
  7. DATE_FORMAT(entrydate, '%M %d, %Y') AS date
  8. FROM weblog
  9. ORDER BY entrydate DESC
  10. LIMIT 10");
  11.  
  12. while ($weblogEntry = mysql_fetch_assoc($weblogEntries)) {
  13.  
  14. echo htmlspecialchars(stripslashes($weblogEntry['entrytitle'])) . '<br />'
  15. . htmlspecialchars(stripslashes($weblogEntry['entrydate'])) . '<br />'
  16. . htmlspecialchars(stripslashes($weblogEntry['entrytext']));
  17.  
  18. }
  19.  
  20. ?>


Ik heb in mijn voorbeeld geen gebruik gemaakt van error controle middels PHP.net: mysql_error. Maar dat kan je er zelf wel ingooien. Ik probeer je met dit bericht niet om te scholen naar 'mijn' systeem, maar wil je er gewoon op wijzen dat je het jezelf wat makkelijker kan maken. En wat veiliger.
Offline Godlord - 11/11/2007 19:04
Avatar van Godlord PHP gevorderde @Proximus: ik heb enkel de code aangepast om het duidelijk te maken qua lezen, zelf gebruik ik ook echo zonder de ().
Offline ranco - 11/11/2007 20:02 (laatste wijziging 11/11/2007 20:03)
Avatar van ranco PHP gevorderde Je bent de parseubb functie er weer vergeten in te zetten. Dit moet werken:

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta name="author" content="" />
  5. <meta http-equiv="content-type"
  6. content="text/html;charset=iso-8859-1" />
  7. <link rel="stylesheet" href="style.css"
  8. type="text/css" />
  9. <title>luchtpost</title>
  10. </head>
  11. <body>
  12. <div id="container"><?php include('ubb.php');?>
  13. <?php mysql_connect("localhost","","");
  14. $query ="SELECT entrytitle, entrytext,";
  15. $query.=" DATE_FORMAT(entrydate, '%M %d, %Y') AS date";
  16. $query.=" FROM weblog ORDER BY entrydate DESC LIMIT 10";
  17. $result=mysql_query($query);
  18. While($arr = mysql_fetch_assoc($result)){
  19. echo ($arr["entrytitle"]."<br />");
  20. echo ($arr["entrydate"]. "</b>");
  21. echo (parseubb($arr["entrytext"]));
  22. }
  23. ?></div>
  24. </body>
  25. </html>
Offline luchtpost - 12/11/2007 19:36 (laatste wijziging 12/11/2007 19:38)
Avatar van luchtpost PHP interesse Dankuwel iedereen!
Dit werkt zeer goed.
Maar ik zie geen datum meer? (in het script van Ranco)
Offline Godlord - 12/11/2007 19:58 (laatste wijziging 12/11/2007 20:01)
Avatar van Godlord PHP gevorderde
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta name="author" content="" />
  5. <meta http-equiv="content-type"
  6. content="text/html;charset=iso-8859-1" />
  7. <link rel="stylesheet" href="style.css"
  8. type="text/css" />
  9. <title>luchtpost</title>
  10. </head>
  11.  
  12. <body>
  13. <div id="container">
  14. <?php
  15. include('ubb.php');
  16. mysql_connect("localhost","","");
  17. $query = "SELECT entrytitle, entrytext,";
  18. $query .= "DATE_FORMAT(entrydate, '%M %d, %Y') AS date";
  19. $query .= "FROM weblog";
  20. $query .= "ORDER BY entrydate DESC";
  21. $query .= "LIMIT 10";
  22. $result = mysql_query($query);
  23. while ($arr = mysql_fetch_assoc($result)){
  24. echo $arr["entrytitle"]."<br />";
  25. echo $arr["date"]. "</b>";
  26. echo parseubb($arr["entrytext"]);
  27. }
  28. ?>
  29. </div>
  30. </body>
  31. </html>


AS date in de MySQL query, dat betekent dat je "date" moet gebruiken i.p.v. entrydate.
Offline TotempaaltJ - 12/11/2007 21:23 (laatste wijziging 12/11/2007 21:23)
Avatar van TotempaaltJ PHP interesse Waarom staat daar een </b>, ik zie nergens een <b> staan!

Regel 26
Offline Gerard - 12/11/2007 21:51
Avatar van Gerard Ouwe rakker Omdat dit script ondertussen door 4 verschillende personen onder de loep is genomen, veranderd is en ge-copy/paste is. Dat heeft ervoor gezorgd dat het niet echt meer werkt.

Zal ook wel de reden zijn dat luchtpost nu voor een poep en een scheet weer post dat iets niet werkt. Het opmerken dat een veld met AS een andere naam krijgt en dan dus ook op een andere naam beschikbaar is in het resultaat is basic debugging. Een PHP.net: var_export, PHP.net: var_dump of PHP.net: print_r had dit meer dan duidelijk gemaakt.
Offline jc2 - 29/06/2008 12:26 (laatste wijziging 29/06/2008 12:27)
Avatar van jc2 PHP interesse Nog wat offtopic, maar wel iets om over na te denken:

Ik weet niet of de UBB-parser van jezelf is of van een ander, maar er is iets wat ik heel vreemd vind:
Citaat:
$bericht = str_replace ("[[","{",$bericht);
$bericht = str_replace ("]]","}",$bericht);
$bericht = str_replace ("|","&#124;",$bericht);
$bericht = str_replace ("{{","[",$bericht);
$bericht = str_replace ("}}","]",$bericht);


Het is dan misschien maar een kleinigheidje, maar waarom wordt
[[tekst]] vervangen door {tekst}
en
{{tekst}} door [tekst]?
Dit is toch heel verwarrend?

Waarom niet gewoon zo:
  1. $bericht = str_replace ("[[","[",$bericht);
  2. $bericht = str_replace ("]]","]",$bericht);
  3. $bericht = str_replace ("|","&#124;",$bericht);
  4. $bericht = str_replace ("{{","{",$bericht);
  5. $bericht = str_replace ("}}","}",$bericht);
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.383s