Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Blokowanie przesyłania do BD
Forum PHP.pl > Forum > Przedszkole
Star
Chciałbym uniemożliwić wprowadzanie niektórych imion do bazy danych, np Tomasz, Ania i Jacek. Zrobiłem wiec tabele w której przechowuje te imiona, a w pliku odbierajacym dane z formularza wyciągam te nicki i tworze pętlę a w niej if($_POST["imie"] != $row["imie"]) exit();

To juz na starcie nie ma prawa dzialac jeśli w tabeli mam więcej niż 2 imiona.

Ma ktoś jakiś pomysł jak to zrealizować?
patwoj98
Nie, nie, nie.

Pobierasz sobie te imiona, a następnie dajesz je do tablicy asocjacyjnej lub tworzysz nową dodając na kolejne miejsce kolejny argument. Potem sprawdzasz funkcja in_array czy jest w tablicy. Jak Ci pomóc z kodem to podaj fragment.
kapslokk
Nie wiem czy zrozumiałem dobrze Twój post, w każdym razie jeżeli trzymasz te imiona w tabeli w bazie, to czemu nie zrobisz zapytania, które sprawdzi czy takie imię nie jest na liście niedozwolonych? Co w przypadku, gdy na tą listę trafi nagle milion imion? Nadal będziesz wyciągał wszystkie z bazy i w php to sprawdzał?
Star
Dzięki za odpowiedzi Panowie, tak to ma wyglądać?
  1. $query = "SELECT imie FROM imiona WHERE nick = '$nick'";
  2. $imiona = mysql_fetch_array(mysql_query($query));
  3. $sprawdz_imie=$imiona["imie"];
  4. if (in_array("Jacek", $sprawdz_imie)) exit();

Coś takiego będzie działać? Pytam bo pisze z telefonu i nie mam jak sprawdzić
Dodam że w zmiennej sprawdz_imie może być więcej imion niż jedno

Kapslokk, nie znam niestety takiego zapytania
kapslokk
Jeżeli w tabeli imiona przechowywujesz imiona 'niedozwolne' to zrób selecta takiego jak napisales, a potem przez mysql_num_rows sprawdz czy zostalo znalezione, jesli tak to exit() czy co tam chcesz smile.gif
Star
No ja tak zrobiłem, mysql_num_rows użyłem do określenia ile pętli wykonać, ale jak napisałem w pierwszym poście to nie zadziałało ponieważ jeśli miałbym więcej niż 1 imię w tabeli to już przy drugiej pętli by dodało, a więc zawsze.

Myślałem tez aby zrobić tymczasowa tabele i tak: pierw w pętli tworze kod który sprawdza czy w bazie z niedozwolonymi imionami jest te podeslane z formularza, jeśli tak to zapisuje je do tymczasowej tabeli a potem robie kod sprawdzający czy w tej tabeli jest jakieś imię, jeśli tak to będzie ono niedozwolone i blokuje przesłanie do BD, jeśli tabela jest pusta to przesyłam dane.
Co myślicie o takim rozwiązaniu?
kapslokk
Pomyśl przez chwile. Jeżeli zrobisz:
  1. SELECT imie FROM imiona WHERE nick = '$nick'

To znajdziesz tylko imiona które pasują do nicku. Czyli jeżeli na liście imion będziesz miał imie 'tomek' i w zmiennej $nick 'tomek' to wtedy znajdziesz dokładnie jeden wiersz (mysql_num_rows() == 1), jeżeli imię nie zostanie znalezione w tabeli imion to wtedy znaczy, ze imie jest dozwolone (mysql_num_rows() == 0) i po problemie.
Chyba, że to ja czegoś nie kumam, wtedy proszę o wytłumaczenie mi tego jak krowie na rowie wink.gif
Star
te WHERE nick odnosi się do zalogowanego użytkownika, $nick przechowuje zmienna sesyjna :-)
No ale można dodać do tego operator logiczny AND i zrobić AND imie = $_POST[imie] i będzie wszystko grało. Dzięki :-)
kapslokk
Nie pokazałeś całego kodu, a ja wróżyć nie potrafię smile.gif
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.