Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Blokowanie przesyłania do BD
Star
post
Post #1





Grupa: Zarejestrowani
Postów: 294
Pomógł: 34
Dołączył: 16.02.2015

Ostrzeżenie: (0%)
-----


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ć?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
patwoj98
post
Post #2





Grupa: Zarejestrowani
Postów: 218
Pomógł: 16
Dołączył: 6.06.2014
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
kapslokk
post
Post #3





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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ł?
Go to the top of the page
+Quote Post
Star
post
Post #4





Grupa: Zarejestrowani
Postów: 294
Pomógł: 34
Dołączył: 16.02.2015

Ostrzeżenie: (0%)
-----


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

Ten post edytował Star 4.07.2015, 22:23:21
Go to the top of the page
+Quote Post
kapslokk
post
Post #5





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Star
post
Post #6





Grupa: Zarejestrowani
Postów: 294
Pomógł: 34
Dołączył: 16.02.2015

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
kapslokk
post
Post #7





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
Star
post
Post #8





Grupa: Zarejestrowani
Postów: 294
Pomógł: 34
Dołączył: 16.02.2015

Ostrzeżenie: (0%)
-----


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 :-)
Go to the top of the page
+Quote Post
kapslokk
post
Post #9





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Nie pokazałeś całego kodu, a ja wróżyć nie potrafię (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 08:55