login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Forum + UBB (advies)

Offline Flex1986 - 22/03/2007 11:02 (laatste wijziging 22/03/2007 11:04)
Avatar van Flex1986Gouden medaille

Senior Member
Ik wil een forum gaan maken met daarin het gebruik van UBB code. Nu heb ik een script gevonden hier op de site wat z'n werk perfect doet.

Nu heb ik op 3 punten nog wat advies nodig en graag zou ik jullie daarbij willen raadplegen.

Punt1: Ik wil niet dat mensen HTML kunnen gebruiken. Dus heb wat gezocht hier op de site en op google. Nu kwam ik eregi tegen om een invoer te checken op bepaalde tekens. Nu had ik dit in gedachten.

  1. if (eregi('<', $string)) {
  2. echo "Uw bericht bevat HTML code dit is niet toegestaan";
  3. }
  4. else {
  5. // Gewoon doorgaan met het script
  6. }
  7. ?>


Alleen ik vindt dit niet echt de oplossing omdat ik dan de toets < helemaal uitsluit. Is er geen betere oplossing voor? Iets wat de tags eruit haalt maar de rest laat staan. Zoek ik niet hij moet echt controleren op HTML en als mensen dat proberen te gebruiken moet ie terug gaan naar het bericht met een foutmelding.

Punt2: Deze is waarschijnlijk iets simpeler. Het UBB script maakt er netjes HTML code. Nu zit ik alleen te twijfelen hoe ik het wil gaan toepassen. Bericht met UBB code opslaan in de database en bij het uitlezen door het UBB script heen halen (lijkt me het veiligst). Of het bericht laten checken voordat het in de database wordt gedumpt en gewoon in database plaatsen met HTML code en al zodat maar één keer het bericht door het UBB script hoeft (lijkt me het snelst). Het forum moet snel blijven. De toepassing waar ik het misschien wil voor gaan gebruiken. Heeft op piek dagen +/- 100 bezoekers per uur . Waarvan 25% reageert in topics. Geen schokkende aantallen maar snelheid vindt ik belangrijk.

Punt3: De topics en de reacties aan elkaar koppelen kan ik dat het beste in MySQL doen. Doormiddel van bijvoorbeeld innerjoin. Of gewoon in php via 2 MySQL queries? Denk zelf dat innerjoin snelste is maar als ik toch aan het vragen ben kan deze er ook wel bij 

Ik hoop dat dit genoeg informatie is als het nog onduidelijk is of als jullie aanvulling willen dan hoor ik het graag.

ps. Ik ben geen php grootmeester maar wil het graag leren door de uitdaging aan te gaan door een forum te maken.

20 antwoorden

Gesponsorde links
Offline Ultimatum - 22/03/2007 11:18
Avatar van Ultimatum PHP expert 1. Je zou ook gewoon de tags die niet mogen in een array kunnen zetten en dan zou kijken..
2. Gewoon met ubb en al in de database, dus je bericht bevat bijvoorbeeld dit: Dit is een [b]test[/b ] bericht (spatie bij end tag van b om te voorkomen dat het dikgedrukt hier op het forum word )

En dan met uitlezen vervang je de [b] door html om dikgedrukt te maken.

3. Je kan het met joins doen of gewoon in 1 query 2 tabellen oproepen
  1. SELECT * FROM table1, table 2 WHERE table1.veld1 = table2.veld2
Offline Gerard - 22/03/2007 14:51
Avatar van Gerard Ouwe rakker
Citaat:
Ik wil niet dat mensen HTML kunnen gebruiken. Dus heb wat gezocht hier op de site en op google. Nu kwam ik eregi tegen om een invoer te checken op bepaalde tekens. Nu had ik dit in gedachten. Alleen ik vindt dit niet echt de oplossing omdat ik dan de toets < helemaal uitsluit. Is er geen betere oplossing voor? Iets wat de tags eruit haalt maar de rest laat staan. Zoek ik niet hij moet echt controleren op HTML en als mensen dat proberen te gebruiken moet ie terug gaan naar het bericht met een foutmelding.
Er zijn verschillende oplossingen voor dit probleem. Maar om de beste eruit te vissen wil ik je even wat vertellen over het gebruik van je database.

De bedoeling van zaken opslaan in je database is dat je die gegevens later op een zinvolle manier weer kan gebruiken. Door goed normaliseren en het opslaan van de juiste informatie zorg je ervoor dat je alle gegevens eruit kan halen die je nu hebt, maar die je ook eventueel in de toekomst zou willen integreren. Het is dus het slimst om alle informatie die de user invoert gewoon in de database te zetten. Dat is dan gewoon de 'ruwe' informatie. Wanneer je het zaakje dan gaat uitlezen bepaal je wat er wel/niet mag.

Dit geldt dus ook voor punt 2 wat je aanhaalt.

Citaat:
De topics en de reacties aan elkaar koppelen kan ik dat het beste in MySQL doen. Doormiddel van bijvoorbeeld innerjoin. Of gewoon in php via 2 MySQL queries? Denk zelf dat innerjoin snelste is maar als ik toch aan het vragen ben kan deze er ook wel bij
Het probleem wat hier naar voren komt is dat er meerdere reacties horen bij één topic. Je krijgt dus een herhalende groep erin zitten. Als je die in een query eruit wilt halen krijg je dus results waar telkens ook weer de titel van het topic zit vermeld.

Het beste is dus om er 2 queries van te maken. 1 losse voor het ophalen van de topicinfo en daarna 1 met een while-lus om alle reacties uit te lezen op een topic.
Offline Flex1986 - 22/03/2007 17:13
Avatar van Flex1986 Gouden medaille

Senior Member
Dank voor jullie reacties.

Punt1: Ben ik nog niet helemaal overuit. Ik denk dat ik een array ga maken waar de tags inkomen die niet mogen. Ik twijfel alleen nog om toch eregi te gebruiken omdat die me het effectiefst lijkt.

Punt2: Gewoon met ubb en al opslaan in de database.

Punt3: Worden dus toch 2 queries.

Voor punt1 hoop ik nog wat beters te vinden want ik wil absoluut geen html invoer op het forum.

ps: mysql en php moet natuurlijk ook gefilterd worden.
Offline Stijn - 22/03/2007 17:17
Avatar van Stijn PHP expert Ik heb al een antwoord voor je punt 1 (rest nog niet helemaal gelezen):
PHP.net: strip_tags
Offline urqbz - 22/03/2007 17:18
Avatar van urqbz PHP interesse Maar als je het in die arrays doet moet je alle html codes in een array gaan zetten!
(stel dat die array er zo uit ziet:
<b>
<u>
<i>
(nog meer maar dat doet er niet toe)
en iemand in je forum tikt <b class="jo"> kan hij alsnog je site lamleggen!
Offline Ibrahim - 22/03/2007 17:21
Avatar van Ibrahim PHP expert punt1: dat gaat je een tijdje kosten...

Bij het uitlezen kun je gewoon htmlentities door het bericht heen laten gaan, zodat hij bijv. <b> in &lt;b&gt; verandert.

@stijn, zo verwijdert hij de html codes, en als iemand nou HTML code wilt weergeven omdat daar fouten inzitten, dan is dat weg he 
Offline Stijn - 22/03/2007 17:25
Avatar van Stijn PHP expert @urqbz: daarom dat je PHP.net: strip_tags moet gebruiken!
@siliecom14: hij wil dat er geen HTML code in de $string zit (zie vooral zijn code fragment )
Offline TotempaaltJ - 22/03/2007 17:26 (laatste wijziging 22/03/2007 17:28)
Avatar van TotempaaltJ PHP interesse @Siliecom: Dat kan niet he! Dan verandert hij [ en ] namelijk ook. Daarom:

Je moet voor je alle replaces enz. gaat doen alle < en > laten vervangen door de Entities: &lt; en &gt;
Offline Ibrahim - 22/03/2007 17:26
Avatar van Ibrahim PHP expert @bigboss, dat is wat htmlentities doet ?
Offline TotempaaltJ - 22/03/2007 17:28
Avatar van TotempaaltJ PHP interesse Nee, htmlentities verandert [ en ] ook. Denk maar eens na!
Offline Flex1986 - 22/03/2007 17:40 (laatste wijziging 22/03/2007 17:41)
Avatar van Flex1986 Gouden medaille

Senior Member
strip_tags was ik inderdaad ook al tegen gekomen. Enigste probleem waar ik dan tegen op loop is dat als een gebruiker dit in z'n bericht zet.

  1. <a href=www.viezebanner.nl/banner.jpg>
  2. www.viezebanner.nl/banner.jpg</a>


Dan blijft er dit over

  1. www.viezebanner.nl/banner.jpg


Dat is dus niet de bedoeling. Ik wil dus als er HTML inzit dat de pagina terug gaat naar het invoer veld met bv een javascript popup dat html code niet is toegestaan. html vervangen voor iets of de helft weghalen zie ik niet echt zitten.

En er is geen functie in php die scant op html code en daarna terug gaat naar invoer pagina.

Edit: Ik ben blij dat zelfs onder de gevorderde er wat onduidelijkheid is ligt het toch niet helemaal aan mij.
Offline Gerard - 22/03/2007 17:45
Avatar van Gerard Ouwe rakker
Citaat:
Dat is dus niet de bedoeling. Ik wil dus als er HTML inzit dat de pagina terug gaat naar het invoer veld met bv een javascript popup dat html code niet is toegestaan. html vervangen voor iets of de helft weghalen zie ik niet echt zitten.
Waarom zou je dat in godsnaam willen. Dit is alleen extra moeite doen voor iets wat niet nodig is. Ook heb je dan niet naar mijn uitleg gekeken. Mocht je ooit over willen schakelen op een html editor en toch html toelaten dan zit je ermee tekijken.

Over de output gewoon PHP.net: htmlspecialchars halen en dan is het wel goed.
Offline TotempaaltJ - 22/03/2007 17:53
Avatar van TotempaaltJ PHP interesse Proximus, dat heeft geen nut. Je slaat hem op in een MySQL of wat dan ook, als bijv:
Citaat:
Hallo, ik ben <a href="blabla">Toetiefroetie</a>

(Die <a> kwam nu wel van de UBB af!)
Nu laat je hem zien na hem door htmlspecialchars te hebben gehaald als:
Citaat:
Hallo, ik ben &lt;a href=&quot;blabla&quot;&gt;Toetiefroetie&lt;/a&gt;

Dan heeft die link toch geen nut meer?
Offline Flex1986 - 22/03/2007 17:58
Avatar van Flex1986 Gouden medaille

Senior Member
Omdat ik persoonlijk het gebruik van HTML in een forum complete onzin vindt. Zeker als dat door gewone gebruikers gebruikt gaat worden.

Bold, Cursief, Underline, Image, URL, Quote, Smilies dat is alles wat erin komt. Allemaal de regelen via UBB de editor is compleet UBB.

Als iemand <script language="JavaScript" type="text/javascript" src="../javascript/hack.js">

invoegt dan wil ik niet dat gebruikers dit zien. Ook niet met halve html codes erin.

Of ben ik nu zo paranoia


Offline Ibrahim - 22/03/2007 18:08
Avatar van Ibrahim PHP expert @Bigboss, zwijg als je er niets van weet, htmlentities zet alleen html tags om in entities, en daar hoort [ en ] er niet bij 
Offline Flex1986 - 22/03/2007 18:44 (laatste wijziging 22/03/2007 18:45)
Avatar van Flex1986 Gouden medaille

Senior Member
Voor punt1:

Ga ik voorlopig deze oplossing gebruiken.

  1. if (eregi('<', $invoer)) {
  2. echo "<BODY onLoad=\"javascript: alert('HTML is niet toegestaan.')\">";
  3. }
  4. else
  5. {
  6. $invoer = htmlspecialchars($invoer);
  7. $text = replace($invoer);
  8.  
  9.  
  10. echo $text;
  11. }


htmlspecialchars moet eventuele code die nog overblijft vervangen.

Dit is niet het uiteindelijke script moet nog 1 en ander aangepast worden. Dit was alleen even een testje
Iedereen in ieder geval bedankt.
Offline Stijn - 22/03/2007 18:50
Avatar van Stijn PHP expert en als ik nu volgende tekst typ:

Citaat:
Als x <= y dan geld dat y altijd groter is of kleiner dan x.
Offline Flex1986 - 22/03/2007 18:59 (laatste wijziging 22/03/2007 19:08)
Avatar van Flex1986 Gouden medaille

Senior Member
  1. if (eregi('<+[A-Za-z/]', $invoer)) {
  2. echo "<BODY onLoad=\"javascript: alert('HTML is niet toegestaan.')\">";
  3. }
  4. else
  5. {
  6. $text = replace($invoer);
  7.  
  8.  
  9. echo $text;
  10. }


Zo beter stijn? Niet dat ik denk dat er veel mensen zijn die <= gaan gebruiken. Maar als het goed is worden nu alle < waar achter direct een letter komt geweigerd. En alle afsluitende tags </ weigert ie ook.
Offline Gerard - 22/03/2007 19:26
Avatar van Gerard Ouwe rakker
Citaat:
Proximus, dat heeft geen nut. Je slaat hem op in een MySQL of wat dan ook, als bijv:
Hallo, ik ben <a href="blabla">Toetiefroetie</a>

(Die <a> kwam nu wel van de UBB af!)
Nu laat je hem zien na hem door htmlspecialchars te hebben gehaald als:
Hallo, ik ben &lt;a href=&quot;blabla&quot;&gt;Toetiefroetie&lt;/a&gt;

Dan heeft die link toch geen nut meer?
Eerst door de htmlspecialchars halen en dan pas door de UBB? :B
Offline Ibrahim - 23/03/2007 08:49
Avatar van Ibrahim PHP expert @flex, gebruik gewoon htmlentities of htmlspecialchars of strip_tags, dan heb je geen problemen, waarom moeilijk doen als het makkelijk kan ??
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.254s