Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Blokowanie adresów email z danego zakresu - jak to rozegrać?
Forum PHP.pl > Forum > PHP
cycofiasz
Witam, muszę dodać w skrypcie sklepu który wcześniej napisałem taką opcję: administrator może zablokować odbieranie płatności od użytkowników których maile pasują do wzorca który on wprowadzi. Przykładowo: *gmail.com , *gov.pl , piter* itd... Oczywiście takich wzorców może być duużo, będą one zapisane w bazie sql. Jak najwydajniej sprawdzić czy dany email pasuje do wzorca zapisanego w bazie?

Przychodzą mi do głowy tylko małowydajne rozwiązania polegające na pobraniu wszystkich wzorców do php i zamienieniu ich na wyrażenia regularne z którymi następnie konfrontuję dany email użytkownika. Jak można to zrealizować przy użyciu tylko zapytania SQL? Czy konieczne będzie wykorzystanie regexp w mysql? Jeśli tak to czy może ktoś podesłać przykładowe zapytanie?
morbic
Można o wiele prościej - operator NOT LIKE:
  1. SELECT * FROM tabela_zakazanych_maili WHERE 'testowy@email.pl' NOT LIKE email


Powyższe zapytanie sprawdzi, czy testowy@email.pl nie pasuje do żadnej maski w tabeli.

A w tabeli tabela_zakazanych_maili w kolumnie email maski zabronionych adresów:
%gmail.com
%gov.pl
piter%

Jedyne o czym trzeba pamiętać, to że MySQL używa % zamiast * - ale to można zamienić w locie w PHP podczas dodawania. W każdym razie w bazie musi być z %.
cycofiasz
No fakt, takie proste a nie pomyślałem o tym.

Edit: prawdopodobnie sam bym na to nie wpadł ponieważ nie zdawałem sobie sprawy że w sql można przestawić kolejność parametrów dla LIKE
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.