Goedenavond allemaal,
Ik heb vandaag een simpel ubb systeem gemaakt, dat dingen als :), :D, :P en , vervangt door het desbetreffende plaatje of teksttransformatie (b = bold, i = italic).
Nu is mij dit allemaal zeer goed gelukt, alleen heb ik een probleempje.
Hij weergeeft op de pagina gewoon alle smileys e.d, alleen als ik een bericht uit de database haal dan worden die ubb tags niet gereplaced...
Hier is mijn complete script:
Hij is online te zien op:PHP Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>UBB Codes - Jos van Marrewijk</title>
<style>
body
{
font-family: arial;
font-size: 14px;
}
.bericht
{
background-color: #D6D6D6;
width: 480px;
margin-top:10px;
margin-bottom: 10px;
padding: 10px;
}
</style>
</head>
<body>
<?php
include("config.php");
$bericht = '
[b]UBB Codes Parser door Jos van Marrewijk![/b] <br /><br />
[b]Dit is vetgedrukt![/b] - [b ] tekst [/b ] <br />
[i]Dit is schuingedrukt[/i] - [i ] tekst [/i ] <br />
[b][i]Dit is vet én -schuingedrukt[/i][/b] - [b ][i ] tekst [/i ][/b ]
<br /><br />[b]Hier staan alle smileys die erin zitten:[/b]<br /><br />
:) - [i]Blije smiley[/i] - : ) <br />
:D - [i]Breedlachende smiley[/i] - : d / : D <br />
;) - [i]Knipogende smiley[/i] - ; ) <br />
:O - [i]Verbaasde smiley[/i] - : o / : O <br />
:S - [i]Verwarde smiley[/i] - : s / : S <br />
(A) - [i]Engel smiley[/i] - ( a ) / ( A ) <br />
:@ - [i]Boze smiley[/i] - : @ <br />
(H) - [i]Coole smiley[/i] - ( h ) / ( H ) <br />
:$ - [i]Verlegen smiley[/i] - : $ <br />
:( - [i]Huilende smiley[/i] - : ( <br />
<br />
Achter elk ubb plaatje, of teksttransformatie (bijv. vetgedrukt) zie je staan hoe je zoiets aan kunt roepen, dit doe je door het commando te typen dat erachter staat, alleen dan zonder spaties.
<br /><br />
<hr />
<br />
Wat vind je van mijn ubb parser? Laat hieronder je reactie achter! (Je kunt hier ook de ubb codes testen!)
';
//Vetgedrukt
$bericht = str_replace('[b]','<strong>',$bericht);
$bericht = str_replace('[/b]','</strong>',$bericht);
//Schuingedrukt
$bericht = str_replace('[i]','<i>',$bericht);
$bericht = str_replace('[/i]','</i>',$bericht);
//Blije smiley
$bericht = str_replace(':)',' <img src="images/smilies/smile.gif" />',$bericht);
//Knipogende smiley
$bericht = str_replace(';)',' <img src="images/smilies/wink.gif" />',$bericht);
//Breedlachende smiley
$bericht = str_replace(':d',' <img src="images/smilies/shiny.gif" />',$bericht);
$bericht = str_replace(':D',' <img src="images/smilies/shiny.gif" />',$bericht);
//Verbaasde smiley
$bericht = str_replace(':o',' <img src="images/smilies/redface.gif" />',$bericht);
$bericht = str_replace(':O',' <img src="images/smilies/redface.gif" />',$bericht);
//Verwarde smiley
$bericht = str_replace(':s',' <img src="images/smilies/confused.gif" />',$bericht);
$bericht = str_replace(':S',' <img src="images/smilies/confused.gif" />',$bericht);
//Engel smiley
$bericht = str_replace('(a)',' <img src="images/smilies/hypocrite.gif" />',$bericht);
$bericht = str_replace('(A)',' <img src="images/smilies/hypocrite.gif" />',$bericht);
//Boze smiley
$bericht = str_replace(':@',' <img src="images/smilies/frown.gif" />',$bericht);
//Coole smiley
$bericht = str_replace('(h)',' <img src="images/smilies/cool.gif" />',$bericht);
$bericht = str_replace('(H)',' <img src="images/smilies/cool.gif" />',$bericht);
//Verlegen smiley
$bericht = str_replace(':$',' <img src="images/smilies/blush.gif" />',$bericht);
//Huilende smiley
$bericht = str_replace(':(',' <img src="images/smilies/cry.gif" />',$bericht);
echo $bericht;
?>
<br /><br /><br />
<?php
$ophalen = mysql_query("SELECT * FROM `ubb_test` ORDER BY `id` DESC");
while($rij = mysql_fetch_array($ophalen)){
$naam = $rij['naam'];
$bericht2 = $rij['bericht'];
$datum = $rij['tijd'];
echo '<div class="bericht"><strong>' .$naam. '</strong>,<div style="float: right; font-style: italic;">' .$datum. '</div><br /><br />' . $bericht2 . '</div>';
}
?>
<?php
//Config includen voor connectie met de database
include("config.php");
//Gegevens in de database zetten
if ($_SERVER['REQUEST_METHOD'] == 'POST') { //kijken of het formulier gepost is
$naam = mysql_real_escape_string($_POST['naam']);
$bericht = mysql_real_escape_string($_POST['bericht']);
//Alles mooi in de database zetten
mysql_query ("INSERT INTO `ubb_test` (naam,bericht,tijd) VALUES ('". $naam ."', '".$bericht."', NOW())");
}
?>
<form action="" method="post">
<input type="text" name="naam" value="Naam" /><br />
<textarea name="bericht" cols="50" rows="10"></textarea><br />
<input type="submit" value="Reageer"/>
</form>
</body>
</html>
http://www.onehosted.nl/informatica/ubb/ubb_test.php
Ik hoop dat iemand mij kan helpen! Het enige probleem is dus dat de ubb tags in de berichten (die uit de DB gehaald worden) niet worden omgezet naar de smileys e.d.
Alvast heel erg bedankt voor jullie moeite!
Met vriendelijke groet,
Jos van Marrewijk
- [PHP] Probleem met ubb systeempje
-
03-10-2010, 21:32 #1
- Berichten
- 943
- Lid sinds
- 15 Jaar
[PHP] Probleem met ubb systeempje
-
-
03-10-2010, 21:46 #2
- Berichten
- 240
- Lid sinds
- 15 Jaar
Je voert de str_replace's alleen uit op $bericht terwijl het bericht uit de database in $bericht2 staat. Het beste kun je gebruik maken van een functie. Ik neem aan dat je net begint met PHP?
-
03-10-2010, 21:49 #3
- Berichten
- 943
- Lid sinds
- 15 Jaar
Nja, ben al wel een tijdje bezig met php, alleen had ik zoiets als dit nog niet gemaakt.
Kan je misschien uitleggen wat ik dan in die functie moet zetten?
Of is dat gewoon alles wat ik nu heb, alleen dan in een functie en die aanroepen met ubb($bericht2)?
-
03-10-2010, 21:53 #4
- Berichten
- 398
- Lid sinds
- 17 Jaar
PHP Code:<?php
function ubb($bericht)
{
//Vetgedrukt
$bericht = str_replace('[b]','<strong>',$bericht);
$bericht = str_replace('[/b]','</strong>',$bericht);
//Schuingedrukt
$bericht = str_replace('[i]','<i>',$bericht);
$bericht = str_replace('[/i]','</i>',$bericht);
//Blije smiley
$bericht = str_replace(':)',' <img src="images/smilies/smile.gif" />',$bericht);
//Knipogende smiley
$bericht = str_replace(';)',' <img src="images/smilies/wink.gif" />',$bericht);
//Breedlachende smiley
$bericht = str_replace(':d',' <img src="images/smilies/shiny.gif" />',$bericht);
$bericht = str_replace(':D',' <img src="images/smilies/shiny.gif" />',$bericht);
//Verbaasde smiley
$bericht = str_replace(':o',' <img src="images/smilies/redface.gif" />',$bericht);
$bericht = str_replace(':O',' <img src="images/smilies/redface.gif" />',$bericht);
//Verwarde smiley
$bericht = str_replace(':s',' <img src="images/smilies/confused.gif" />',$bericht);
$bericht = str_replace(':S',' <img src="images/smilies/confused.gif" />',$bericht);
//Engel smiley
$bericht = str_replace('(a)',' <img src="images/smilies/hypocrite.gif" />',$bericht);
$bericht = str_replace('(A)',' <img src="images/smilies/hypocrite.gif" />',$bericht);
//Boze smiley
$bericht = str_replace(':@',' <img src="images/smilies/frown.gif" />',$bericht);
//Coole smiley
$bericht = str_replace('(h)',' <img src="images/smilies/cool.gif" />',$bericht);
$bericht = str_replace('(H)',' <img src="images/smilies/cool.gif" />',$bericht);
//Verlegen smiley
$bericht = str_replace(':$',' <img src="images/smilies/blush.gif" />',$bericht);
//Huilende smiley
$bericht = str_replace(':(',' <img src="images/smilies/cry.gif" />',$bericht);
echo $bericht;
}
?>
-
03-10-2010, 21:58 #5
- Berichten
- 943
- Lid sinds
- 15 Jaar
Maar dan verandert er toch niks bij $bericht, dus dat werkt dan toch niet als ik die toepas op die reacties?
Zijn er verder nog op of -aanmerkingen op hoe het gescript is?
-
03-10-2010, 22:00 #6
- Berichten
- 240
- Lid sinds
- 15 Jaar
Tevens zou ik het met arrays doen zodat je dynamisch nieuwe tags kunt toevoegen. Aangezien je waarschijnlijk nog geen ervaring hebt met RegEx is dit een van de betere oplossingen. Let er overigens op dat je alle andere HTML tags stript (in verband met XSS). Zoiets dus:
PHP Code:function ubb($string)
{
$search = array(
'[i]',
'[/i]',
':-)'
);
$replace = array(
'<i>',
'</i>',
'<img src="smiley.png" alt="Lachen" />'
);
return str_replace($search, $replace, strip_tags($string));
}
-
03-10-2010, 22:05 #7
- Berichten
- 943
- Lid sinds
- 15 Jaar
Dus op uw manier hoef ik dat van $bericht enzo allemaal niet aan te passen?
-
03-10-2010, 22:14 #8
- Berichten
- 398
- Lid sinds
- 17 Jaar
Variabelen zijn misschien wat verwarrend in mijn voorbeeld, maar was omdat jij die gebruikte...
-
03-10-2010, 22:19 #9
- Berichten
- 943
- Lid sinds
- 15 Jaar
Ow okee, ik snap wat je bedoelt denk ik.
Ik moet dus de functie maken als:
function UbbFunctie($bericht)
En bij de reacties roep ik die op als UbbFunctie($bericht2)?
-
03-10-2010, 22:22 #10
- Berichten
- 398
- Lid sinds
- 17 Jaar
Ja klopt. Wat je zou kunnen doen is de userinput ipv bericht2 gewoon $input te maken oid, om het wat overzichtelijker te maken.
-
03-10-2010, 22:25 #11
- Berichten
- 240
- Lid sinds
- 15 Jaar
Heb even wat in elkaar geflanst, kan niet garanderen dat hij werkt, maar dit zou hem moeten zijn. Ik heb al jouw originele code even netter gemaakt, dus misschien leer je er ook nog wat van. Als er vragen zijn, zeg je het maar!
PHP Code:<?php
require_once('config.php');
function ubb($string)
{
$search = array(
'[i]',
'[/i]',
':-)'
);
$replace = array(
'<i>',
'</i>',
'<img src="smiley.png" alt="Lachen" />'
);
return str_replace($search, $replace, nl2br(strip_tags($string)));
}
$bericht = '[b]UBB Codes Parser door Jos van Marrewijk![/b]
[b]Dit is vetgedrukt![/b] - [b ] tekst [/b ]
[i]Dit is schuingedrukt[/i] - [i ] tekst [/i ]
[b][i]Dit is vet én -schuingedrukt[/i][/b] - [b ][i ] tekst [/i ][/b ]
[b]Hier staan alle smileys die erin zitten:[/b]
:) - [i]Blije smiley[/i] - : ) <br />
:D - [i]Breedlachende smiley[/i] - : d / : D
;) - [i]Knipogende smiley[/i] - ; ) <br />
:O - [i]Verbaasde smiley[/i] - : o / : O
:S - [i]Verwarde smiley[/i] - : s / : S
(A) - [i]Engel smiley[/i] - ( a ) / ( A )
:@ - [i]Boze smiley[/i] - : @
(H) - [i]Coole smiley[/i] - ( h ) / ( H )
:$ - [i]Verlegen smiley[/i] - : $
:( - [i]Huilende smiley[/i] - : (
Achter elk ubb plaatje, of teksttransformatie (bijv. vetgedrukt) zie je staan hoe je zoiets aan kunt roepen, dit doe je door het commando te typen dat erachter staat, alleen dan zonder spaties.
Wat vind je van mijn ubb parser? Laat hieronder je reactie achter! (Je kunt hier ook de ubb codes testen!)';
if ($_SERVER['REQUEST_METHOD'] === 'POST')
{
$naam = mysql_real_escape_string($_POST['naam']);
$bericht = mysql_real_escape_string($_POST['bericht']);
mysql_query("INSERT INTO `ubb_test` (`naam`, `bericht`, `tijd`) VALUES ('" . $naam . "', '" . $bericht . "', NOW())");
if (mysql_insert_id() === false || mysql_insert_id() === 0)
{
$bericht .= '\nHet bericht is niet toegevoegd!';
}
else
{
$bericht .= '\nHet bericht is succesvol toegevoegd!';
}
}
$resource = mysql_query("SELECT `naam`, `bericht`, `tijd` FROM `ubb_test` ORDER BY `id` DESC");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>UBB Codes - Jos van Marrewijk</title>
<style>
body
{
font-family: arial;
font-size: 14px;
}
.bericht
{
background-color: #D6D6D6;
width: 480px;
margin-top:10px;
margin-bottom: 10px;
padding: 10px;
}
</style>
</head>
<body>
<p><?php echo ubb($bericht); ?></p>
<?php
while ($row = mysql_fetch_assoc($resource))
{
$naam = strip_tags($rij['naam']);
$bericht = ubb($rij['bericht']);
$datum = $rij['tijd'];
?>
<div class="bericht">
<strong><?php echo $naam; ?></strong>
<div style="float: right; font-style: italic;"><?php echo $datum; ?></div>
<p><?php echo $bericht; ?></p>
</div>
<?php
}
?>
<form action="" method="post">
<input type="text" name="naam" value="Naam" /><br />
<textarea name="bericht" cols="50" rows="10"></textarea><br />
<input type="submit" value="Reageer"/>
</form>
</body>
</html>
-
03-10-2010, 22:29 #12
- Berichten
- 943
- Lid sinds
- 15 Jaar
Ik zal morgen kijken of het werkt, alvast heel erg bedankt voor al jullie moeite!
EDIT:
Ik heb nu deze code, alleen laat ie niks zien in het bericht (helemaal leeg) terwijl er in de database wel alles goed staat...
PHP Code:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>UBB Codes - Jos van Marrewijk</title>
<style>
body
{
font-family: arial;
font-size: 14px;
}
.bericht
{
background-color: #D6D6D6;
width: 480px;
margin-top:10px;
margin-bottom: 10px;
padding: 10px;
}
</style>
</head>
<body>
<?php
function ubb($string)
{
$search = array(
'[i]',
'[/i]',
'[b]',
'[/b]',
'[url]',
'[/url]',
':)',
':(',
';)',
':D',':d',
':O',':o',
':S',':s',
'(A)','(a)',
'(H)','(h)',
':$',
':@',
);
$replace = array(
'<i>',
'</i>',
'<strong>',
'</strong>',
'<url>',
'</url>',
'<img src="images/smilies/smile.gif" alt="Lachen" />',
'<img src="images/smilies/cry.gif" alt="Verdrietig" />',
'<img src="images/smilies/wink.gif" alt="Knipoog" />',
'<img src="images/smilies/shiny.gif" alt="Big smile" />', '<img src="images/smilies/shiny.gif" alt="Big smile" />',
'<img src="images/smilies/redface.gif" alt="Verbaasd" />', '<img src="images/smilies/redface.gif" alt="Verbaasd" />',
'<img src="images/smilies/confused.gif" alt="Verward" />', '<img src="images/smilies/confused.gif" alt="Verward" />',
'<img src="images/smilies/hypocrite.gif" alt="Engeltje" />', '<img src="images/smilies/hypocrite.gif" alt="Engeltje" />',
'<img src="images/smilies/cool.gif" alt="Cool" />', '<img src="images/smilies/cool.gif" alt="Cool" />',
'<img src="images/smilies/blush.gif" alt="Blozen" />',
'<img src="images/smilies/frown.gif" alt="Boos" />',
);
return str_replace($search, $replace, nl2br(strip_tags($string)));
}
$bericht = '[b]UBB Codes Parser door Jos van Marrewijk![/b]
[b]Dit is vetgedrukt![/b] - [b ] tekst [/b ]
[i]Dit is schuingedrukt[/i] - [i ] tekst [/i ]
[b][i]Dit is vet én -schuingedrukt[/i][/b] - [b ][i ] tekst [/i ][/b ]
[b]Hier staan alle smileys die erin zitten:[/b]
:) - [i]Blije smiley[/i] - : ) <br />
:D - [i]Breedlachende smiley[/i] - : d / : D
;) - [i]Knipogende smiley[/i] - ; ) <br />
:O - [i]Verbaasde smiley[/i] - : o / : O
:S - [i]Verwarde smiley[/i] - : s / : S
(A) - [i]Engel smiley[/i] - ( a ) / ( A )
:@ - [i]Boze smiley[/i] - : @
(H) - [i]Coole smiley[/i] - ( h ) / ( H )
:$ - [i]Verlegen smiley[/i] - : $
:( - [i]Huilende smiley[/i] - : (
Achter elk ubb plaatje, of teksttransformatie (bijv. vetgedrukt) zie je staan hoe je zoiets aan kunt roepen, dit doe je door het commando te typen dat erachter staat, alleen dan zonder spaties.
Wat vind je van mijn ubb parser? Laat hieronder je reactie achter! (Je kunt hier ook de ubb codes testen!)';
require('config.php');
if ($_SERVER['REQUEST_METHOD'] === 'POST')
{
$naam = mysql_real_escape_string($_POST['naam']);
$bericht = mysql_real_escape_string($_POST['bericht']);
mysql_query("INSERT INTO `ubb_test` (`naam`, `bericht`, `tijd`) VALUES ('" . $naam . "', '" . $bericht . "', NOW())");
if (mysql_insert_id() === false || mysql_insert_id() === 0)
{
$bericht .= 'Het bericht is niet toegevoegd!';
}
else
{
$bericht .= 'Het bericht is succesvol toegevoegd!';
}
}
?>
<p><?php echo ubb($bericht); ?></p>
<?php
include('config.php');
$resource = mysql_query("SELECT * FROM `ubb_test` ORDER BY `id` DESC");
while ($row = mysql_fetch_assoc($resource))
{
$naam = strip_tags($rij['naam']);
$bericht_input = ubb($rij['bericht']);
$datum = $rij['tijd'];
echo'<div class="bericht">
<strong><?php echo $naam; ?></strong>
<div style="float: right; font-style: italic;"><?php echo $datum; ?>
<br /><br />
<?php echo $bericht_input; ?>
</div>
</div>';
?>
<?php
}
?>
<form action="" method="post">
<input type="text" name="naam" value="Naam" /><br />
<textarea name="bericht" cols="50" rows="10"></textarea><br />
<input type="submit" value="Reageer"/>
</form>
</body>
</html>Laatst aangepast door Jos van Marrewijk : 04-10-2010 om 06:55
-
04-10-2010, 09:48 #13
- Berichten
- 691
- Lid sinds
- 15 Jaar
Waarom doe je niet iets al dit:
PHP Code:function UBBCode($str) {
$ubb = array (
"[i]" => "<i>",
"[/i]" => "</i>",
"[b]" => "<strong>",
"[/b]" => "/<strong>",
"[url]" => "<url>",
"[/url]" => "</url>",
);
foreach ( $ubb as $key => $value ) {
$str = str_replace ( $key, $value, $str );
}
return $str;
}
PHP Code:$bericht_input = UBBCode($rij['bericht']);]
-
04-10-2010, 12:54 #14
- Berichten
- 240
- Lid sinds
- 15 Jaar
In de while loop ben ik vergeten om $rij naar $row aan te passen:
PHP Code:$naam = strip_tags($rij['naam']);
$bericht_input = ubb($rij['bericht']);
$datum = $rij['tijd'];
Laatst aangepast door E. Zerrouq : 04-10-2010 om 13:27
-
04-10-2010, 13:11 #15
- Berichten
- 943
- Lid sinds
- 15 Jaar
Oké, hartstikke bedankt!
Aanvullend bericht:
Alles werkt nu zoals het hoort te werken, iedereen bedankt voor de hulp!:DLaatst aangepast door Jos van Marrewijk : 04-10-2010 om 13:23 Reden: Automatisch samengevoegd.
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic