[PHP] array check werkt niet

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Saven
  • Registratie: December 2006
  • Laatst online: 18:37

Saven

Administrator

Topicstarter
Hellow Tweakers,

Het is weer eens zo ver, ik heb een vreemd probleem welke ik zelf maar niet opgelost krijg. Wellicht kan dit stukje in domme programmeervoorbeelden, maar ik zie de fout? echt niet :X

Ik heb namelijk een email blacklist array, en ik wil kijken of het ingevoerde email adres inderdaad gebanned is.

Daarvoor gebruik ik dit stukje code:
PHP:
1
2
3
4
5
6
7
8
$expl = explode('@', $email);

$banned = explode("\n", $this->core->settings['banned_email']);

if( in_array($expl[0], $banned) || in_array($expl[1], $banned) || in_array($email, $banned) )
{
    $return[] = 'Je e-mail adres staat helaas op de blacklist';
}


$email bevat in dit geval test@mailcatch.com en hij doorstaat de test...
als $email = jannes@hotmail.com geeft hij wel mooi de error.

Ik heb natuurlijk een beetje lopen debuggen:
code:
1
2
3
4
5
6
7
8
9
Email adres:
Array ( [0] => test [1] => mailcatch.com )

Banned lijstje:
Array ( [0] => mailcatch.com [1] => tempinbox.com [2] => temporaryinbox.com [3] => jannes@hotmail.com )

Exploded adres:
Email[0]: test
Email[1]: mailcatch.com


jannes@hotmail.com wordt blijkbaar wel geblokkeerd, maar test@mailcatch.com niet |:(

Kan iemand mij vertellen wat ik fout doe O+

Acties:
  • 0 Henk 'm!

  • Erik Jan
  • Registratie: Juni 1999
  • Niet online

Erik Jan

Langzaam en zeker

Er zit nog een verstopt \r karakter aan het einde van je string omdat je waarschijnlijk "windows"-stijl enters in je PHP file gebruikt (\r\n).

Aan het einde van de array heb je daar dus geen last van.

@onder: :P

[ Voor 3% gewijzigd door Erik Jan op 24-02-2009 23:16 ]

This can no longer be ignored.


Acties:
  • 0 Henk 'm!

  • Patriot
  • Registratie: December 2004
  • Laatst online: 19:24

Patriot

Fulltime #whatpulsert

jannes@hotmail.com is de laatste in het lijstje. Als $this->core->settings['banned_email'] vanuit een bestand geladen is, is het mogelijk dat na iedere regel niet \n maar \r\n staat. Ik weet niet hoe strict PHP daarin is, maar technisch gezien is het dan mogelijk dat hij die carriage return (\r) nog na alle elements van de Banned-array heeft staan, behalve de laatste (mits er geen lege regel onderaan het bestand waaruit ze geladen worden staat).

Probeer dit eens:
PHP:
1
2
3
4
5
6
7
8
9
$expl = explode('@', $email);

$banned = explode("\n", $this->core->settings['banned_email']);
$banned = array_map('trim', $banned);

if( in_array($expl[0], $banned) || in_array($expl[1], $banned) || in_array($email, $banned) )
{
    $return[] = 'Je e-mail adres staat helaas op de blacklist';
}


EDIT:

Damn you Erik Jan :P

Acties:
  • 0 Henk 'm!

  • Saven
  • Registratie: December 2006
  • Laatst online: 18:37

Saven

Administrator

Topicstarter
Hehehe.. That did the trick :)
Ik had ze rechtstreeks ingevoerd via PHPMyAdmin. Maar trim er overheen halen werkt inderdaad :)

Dank u allen :)!