veilig in database zetten (Opgelost)
W0etah - 24/06/2007 13:22
PHP beginner
Hallo, ik zet alles wat er gepost wordt zo in de database:
$bericht = mysql_real_escape_string(nl2br($_POST['bericht']));
$bericht wordt dus in de db gezet.
Maar wanneer een lid: "<noscript>" intypt, dan is alles omzeep.
Hoe kan ik nu alles veilig uit de database halen?
25 antwoorden
Gesponsorde links
vinTage - 24/06/2007 13:38 (laatste wijziging 24/06/2007 13:38)
Nieuw lid
die nl2br eruit halen, en echoen dmv htmlentities en nl2br.
W0etah - 24/06/2007 13:44
PHP beginner
moet ik dan eerst wat ik uit mijn db haal door mijn ubb parser halen of eerst die htmlentities
vinTage - 24/06/2007 13:46
Nieuw lid
echo htmlentities(ubb($bericht));
Mss wil je ook nog andere dingen doen.
W0etah - 24/06/2007 13:50 (laatste wijziging 24/06/2007 14:13)
PHP beginner
$post = $topics['bericht'];
$post = htmlentities(nl2br($post));
$post = ubb($post);
$post = $topics [ 'bericht' ] ;
$post = ubb( $post ) ;
ik heb het nu zo gedaan, maar nu zet hij de ubb niet meer om, enkel de smileys.
vinTage - 24/06/2007 14:16
Nieuw lid
Je function ubb is wel zo geschreven dat je wel bepaalde html elementen om moet zetten ?
MindPrison - 24/06/2007 14:16
PHP gevorderde
$post = nl2br(htmlentities($post));
nl2br() na htmlentities! Lost dit al wat op?
W0etah - 24/06/2007 14:19 (laatste wijziging 24/06/2007 14:19)
PHP beginner
@mindprison, dat lost niks op
@vintage, ja, sommige html elementen worden omgezet.
$bericht = preg_replace("#<b>(.*?)</b>#", "<strong>\\1</strong>" , $wat);
$bericht = preg_replace ( "#<b>(.*?)</b>#" , "<strong>\\1 </strong>" , $wat ) ;
dus de <b> is de ubb, dat mensen gebruiken tijdens het maken van hun topic.
maar de functie ubb wordt toch als laatste uitgevoerd?
vinTage - 24/06/2007 14:22
Nieuw lid
echo htmlentities(nl2br(ubb($topics['bericht'])));
zou goed moeten zijn volgens mij.
MindPrison - 24/06/2007 14:30
PHP gevorderde
Oké, je code gaal langs geen kanten werken zo. Je gebruikt namelijk <> tags en die worden omgezet...
Zoals ik ook al zij moet nl2br() altijd na htmlentities, anders wordt deze ook omgezet.
Je doet dus zo:
<?php
$post = $topics['bericht'];
$post = nl2br(htmlentities($post));
$post = ubb($post);
?>
<?php
$post = $topics [ 'bericht' ] ;
$post = ubb( $post ) ;
?>
En dan als ubb parser:
<?php
$bericht = preg_replace("/<b>(.+?)<\/b>/", "<strong>\\1</strong>" , $wat);
?>
<?php
$bericht = preg_replace ( "/<b>(.+?)<\/b>/" , "<strong>\\1 </strong>" , $wat ) ; ?>
Dit zal werken, al kan je beter met [] ubb tags werken.
W0etah - 24/06/2007 14:37
PHP beginner
@mindprison, ik heb die < verandert naar [
maar nu zie ik op mijn scherm gewoon dit staan: test
nog altijd hetzelfde als met die <
vinTage - 24/06/2007 14:41
Nieuw lid
Ik weet het ook niet meer hoor, mss is je ubb niet helemaal jofel ?
probeer deze eens (ik ben héél slecht in regex, maar deze gebruik ik ook (dolfjes ubb class)
"#\[b\](.*?)\[/b\]#i","<b>\\1</b>"
"#\[b\](.*?)\[/b\]#i" , "<b>\\1 </b>"
W0etah - 24/06/2007 14:46
PHP beginner
pff, nee dat doet het ook niet
vinTage - 24/06/2007 14:49 (laatste wijziging 24/06/2007 14:51)
Nieuw lid
Citaat:
maar nu zie ik op mijn scherm gewoon dit staan: test
eh, moest dat niet dan ?
edit: doe eens zo
stripslashes(htmlentities(ubb($post)));
W0etah - 24/06/2007 14:50
PHP beginner
ja, bij mij staat er dan [*b]test[/b]
dat kwam door de ubb van hier
vinTage - 24/06/2007 14:51
Nieuw lid
gebruik ook eens stripslashes VOOR je ubb
W0etah - 24/06/2007 14:53
PHP beginner
nee, dat lost ook niks op
W0etah - 24/06/2007 15:04 (laatste wijziging 24/06/2007 15:06)
PHP beginner
ik snap niet waarom hij de smileys wel omzet
edit: @hierboven, nope dat doet het ook niet
MindPrison - 24/06/2007 16:17 (laatste wijziging 24/06/2007 16:18)
PHP gevorderde
Oké, ik wil het wel even fixen, maar plaats hier dan eens deze 3 dingen zoals ze nu zijn:
1) Je script
2) Je UBB parser
3) Wat in je db zit (de tekst dus)
Dan zal ik even alles nakijken en aanpassen.
MindPrison - 24/06/2007 17:11 (laatste wijziging 24/06/2007 17:14)
PHP gevorderde
Ziezo, hier zijn ze. Vanaf nu moet je wel met de correcte ubb tags werken, dus enz.
Ik heb wat uitleg bij de url parser gezet, dan weet je wat ie zal parsen...
Het script: http://www.plaatscode.be/5733 /
De ubb parser: http://www.plaatscode.be/5735 /
Ik merkte wel dat de teksten in je db wat teveel slashes bevatten, je moet geen slashes meer toevoegen bij het posten, want ik denk dat autoslashes aan staan...
W0etah - 24/06/2007 17:19 (laatste wijziging 24/06/2007 17:59)
PHP beginner
hartelijk dank, maar het werkt niet
ik heb die ubb gekopieerd, ook het script aangepast.
Ik test het uit, ik plaats een topic met deze code:
wat zie ik staan in het topic zelf:
Citaat:
Door W0utR - 24-06-2007 17:18:17
[b*]test
edit:
zonder het *tje
edit:
ok, nu werkt het wel, maar hij doet raar
dit zie ik staan als ik gewoon [b*] typ
Citaat:
[<trong>][<strong>b]
ik zie nu nog fouten, mijn smileys zijn zo: ":blij:"
dan haalt hij die "i" weg en blijft er gewoon dit staan: "blj"
MindPrison - 24/06/2007 18:24 (laatste wijziging 24/06/2007 18:26)
PHP gevorderde
Sorry, ik had nog een foutje gemaakt. Dit moet het eerste deel zijn:
<?php // ubb
$bericht = preg_replace("/\[b\](.+?)\[\/b\]/is", "<strong>\\1</strong>" , $bericht);
$bericht = preg_replace("/\[i\](.+?)\[\/i\]/is", "<em>\\1</em>" , $bericht);
$bericht = preg_replace("/\[s\](.+?)\[\/s\]/is", "<s>\\1</s>" , $bericht);
$bericht = preg_replace("/\[u\](.+?)\[\/u\]/is", "<u>\\1</u>" , $bericht);
?>
<?php // ubb
$bericht = preg_replace ( "/\[b\](.+?)\[\/b\]/is" , "<strong>\\1 </strong>" , $bericht ) ; $bericht = preg_replace ( "/\[i\](.+?)\[\/i\]/is" , "<em>\\1 </em>" , $bericht ) ; $bericht = preg_replace ( "/\[s\](.+?)\[\/s\]/is" , "<s>\\1 </s>" , $bericht ) ; $bericht = preg_replace ( "/\[u\](.+?)\[\/u\]/is" , "<u>\\1 </u>" , $bericht ) ; ?>
Wat zijn je smilies exact? (ik kan het niet lezen met die domme smilie)
W0etah - 24/06/2007 18:34 (laatste wijziging 24/06/2007 19:02)
PHP beginner
ah merci, nu werkt alles goed.
Enkel nog 1 probleem.
Als er niks tussen de tags staat, dan toont hij de tags gewoon
[b*], dan gaat hij het ook zo tonen
edit
opgelost, ik heb die +? vervangen door *?
Gesponsorde links
Dit onderwerp is gesloten .