login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Array value in string zoeken

Offline Voldemort - 07/10/2006 21:34 (laatste wijziging 07/10/2006 21:36)
Avatar van VoldemortPHP ver gevorderde Ik ben een verboden username's/tekens lijst bij het aanmelden aan het opstellen. Die lijst staat is een array. Nu wil ik dat er gekeken wordt of er een teken uit die array in de username (string) staat. Daarvoor heb ik deze functie geschreven (ik vond er niet meteen 1 op php.net die hetzelfde doet):

http://www.plaatscode.be/2823/

(het kan zijn dat het commentaar niet altijd klopt, dit is doordat ik soms dingen verander en de commentaar niet)

Ik pas de code zo toe:

  1. <?php
  2. $verboden = array(
  3. ',','"','&quot;','\'', '&#039;', //Gevaarlijke vergistekens
  4. '?','=', '&', '&amp;', '#', '+', //URL tekens
  5. '(', ')', '{', '}', ';', //PHP tekens
  6. '|', //Explode tekens
  7. 'admin', 'Admin', 'webmaster', 'Webmaster' //Namen
  8. );
  9.  
  10. $str = htmlentities('&', ENT_QUOTES);
  11.  
  12. echo 'Zoeken naar: '.$str.'<br /><br />';
  13.  
  14.  
  15. echo (array_in_string($verboden,$str))
  16. ?
  17. '<br />Resultaat: Gevonden in verboden lijst<br /><br />'
  18. :
  19. '<br />Resultaat: Niet gevonden in verboden lijst<br /><br />'
  20. ;
  21. ?>


Als ik zoek naar:

&, ", ' => De dingen die in de verboden lijst staan zonder er iets bij lukt het goed.

Als ik echter zoek naar een teken uit de verboden lijst + een ander teken (maakt niet uit of het in de lijst staat of niet) krijgt ik steeds:

Citaat:
Resultaat: Niet gevonden in verboden lijst


Ik heb in de functie wat met var_dumps, waarde echo's, etc zitten werken en de regel waar het fout gaat is die in de foreach, dan zet hij steeds een 0 in de zoek array.

Zelf zie ik de fout niet, jullie wel?

9 antwoorden

Gesponsorde links
Offline timmie_loots - 07/10/2006 22:19 (laatste wijziging 07/10/2006 22:31)
Avatar van timmie_loots PHP gevorderde Je array_in_string functie is nogal omslachtig.

Wat dacht je van strstr (stristr voor case-insensitive) voor het zoeken van een string in een string? Gewoon die array doorlopen en voor elk element met strstr (of stristr, wat je ws. wilt) kijken of hij in de naam-string zit.
Offline Voldemort - 07/10/2006 22:26
Avatar van Voldemort PHP ver gevorderde Ik doorloop die array nu ook (foreach).

Wat is nu eigenlijk het verschil tussen strstr en strpos, ze zoeken beiden naar een needle in een string en retourneren FALSE als die needle niet s gevonden, dus wat is het verschil?
Offline timmie_loots - 07/10/2006 22:33 (laatste wijziging 07/10/2006 22:37)
Avatar van timmie_loots PHP gevorderde Urgh.

Ik ben dom, ik las de warning verkeerd en dacht dat hij bij het niet vinden van needle in haystack, hij ook 0 of "" kon retourneren.

Geen idee waarom hij het niet vinden kan.
Offline Ultimatum - 07/10/2006 22:36
Avatar van Ultimatum PHP expert zoek je niet naar de functie in_array() of heb ik het verkeerd?
Offline timmie_loots - 07/10/2006 22:38 (laatste wijziging 07/10/2006 22:39)
Avatar van timmie_loots PHP gevorderde Nee, dat is de andere kant op. Dan moet je voor elk teken in de string kijken of hij in de array zit, en dat ondersteund weer niet het filteren van namen e.d.

EDIT: Probeer anders stripos.
Offline Voldemort - 08/10/2006 09:32 (laatste wijziging 15/10/2006 10:38)
Avatar van Voldemort PHP ver gevorderde stripos is PHP 5 en m'n host (en ik lokaal ook) draait op PHP 4, dus dat zal zowiezo niet gaan.

Edit: Niemand meer? Echt niet?
Offline Gerard - 15/10/2006 21:20
Avatar van Gerard Ouwe rakker http://www.pastebin.be/3153/

Mijn test-script. Werkt goed behalve met de zaken die je gewoon niet in de url kan testen zoals & en +.
Offline Thomas - 16/10/2006 10:21
Avatar van Thomas Moderator Hm, als je dit probleem nu eens opsplitst:

1. Controleer eerst of de username toegestaan is, door (m.b.v. een reguliere expressie) te controleren of de username enkel uit toegestane karakters bstaat.

2. Controleer of de username (g)een gereserveerde naam is.

Lijkt me makkelijker, niet?
Offline Voldemort - 16/10/2006 18:05
Avatar van Voldemort PHP ver gevorderde @Proximus: Door die $bfound variable te gebruiken ipv een arrat $zoek werkt het (heb het mijne wat aangepast).

@FangorN: Zoiets doe ik:

-> Empty
-> Toegestaan tekens
-> Bestaat username al

Alles in 1 if gescheiden met || ;).
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.192s