Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Preg_match a dodane wyjątki
Lethys
post 2.06.2015, 12:04:23
Post #1





Grupa: Zarejestrowani
Postów: 642
Pomógł: 2
Dołączył: 9.03.2006

Ostrzeżenie: (30%)
XX---


Witam,

Mam bardzo prostą walidacje formularzu (tak wiem, że powinienem używać PDO, funkcji prepare itp.)

Ale mi zalezy, żeby zrobić to w preg_match


Chcę przepuścić dane w formularzu tylko jeżeli bedzie miało dozwolony znak z preg_matcha:

  1. preg_match('#^[\w\d\sąćęłńóśźżĄĆĘŁŃÓŚŹŻ\.\,\?\(\)\:\'\-]*$#is', $nazwa)


problem w tym, że ten preg_match nie działa, tzn. nie puszcza mi mimo wszystko formularza gdy w nazwie jest np. ' albo - (a dodałem to do wyklucoznych znaków)

Jak skonstrułować preg_matcha abym mógł wykluczyć te znaki?




--------------------
filmy podobne do - wyszukiwarka podobnych filmów
motywacja do działania - Bądź Lepszy
Go to the top of the page
+Quote Post
Daimos
post 2.06.2015, 12:07:58
Post #2





Grupa: Zarejestrowani
Postów: 1 319
Pomógł: 118
Dołączył: 26.11.2003
Skąd: Lublin

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


na oko, to Twoje wyrażenie brzmi:
^[\w\d\sąćęłńóśźżĄĆĘŁŃÓŚŹŻ\.\,\?\(\)\:\'\-] -> wszystko, co nie jest jednym z tych znaków,
* -> dowolny znak
próbowałeś dać +, zamiast * ?
+ oznacza dowolną długość ciągu, jeśli jest za nawiasem


--------------------
scriptun.com. Startup z poradnikami do gier ttp.zone i ttpzone.pl
Go to the top of the page
+Quote Post
Pyton_000
post 2.06.2015, 12:18:23
Post #3





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Słabe masz Oko.

^ umieść po [ a nie przed i zamień * na + j.w .

Z Tym że * oznacza 0 lub więcej znaków
a + przynajmniej 1
Go to the top of the page
+Quote Post
Lethys
post 2.06.2015, 13:02:00
Post #4





Grupa: Zarejestrowani
Postów: 642
Pomógł: 2
Dołączył: 9.03.2006

Ostrzeżenie: (30%)
XX---


Cytat(Pyton_000 @ 2.06.2015, 11:18:23 ) *
Słabe masz Oko.

^ umieść po [ a nie przed i zamień * na + j.w .

Z Tym że * oznacza 0 lub więcej znaków
a + przynajmniej 1



Mam teraz taki kod:

  1. if(!preg_match('#[^\w\d\sąćęłńóśźżĄĆĘŁŃÓŚŹŻ\.\,\?\(\)\:\'\-]+$#is', $nazwa){
  2. $problem = TRUE;
  3. $dodano = 'Użyto nideozolonych znaków';
  4. echo json_encode($dodano);
  5. }


Teraz mi pojazuje problem nawet gdy nie ma zakazanych znaków (próbowałem pregmacth z ! i bez).


--------------------
filmy podobne do - wyszukiwarka podobnych filmów
motywacja do działania - Bądź Lepszy
Go to the top of the page
+Quote Post
Pyton_000
post 2.06.2015, 13:18:44
Post #5





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


  1. if(preg_match('/[^\w\d\sąćęłńóśźżĄĆĘŁŃÓŚŹŻ.,?():\'-]+/', $nazwa)) {
  2. die('niedozwolone znaki');
  3. }
Go to the top of the page
+Quote Post
Lethys
post 2.06.2015, 13:26:46
Post #6





Grupa: Zarejestrowani
Postów: 642
Pomógł: 2
Dołączył: 9.03.2006

Ostrzeżenie: (30%)
XX---


Cytat(Pyton_000 @ 2.06.2015, 12:18:44 ) *
  1. if(preg_match('/[^\w\d\sąćęłńóśźżĄĆĘŁŃÓŚŹŻ.,?():\'-]+/', $nazwa)) {
  2. die('niedozwolone znaki');
  3. }


Prawie działa, nie chce przepuścić tylko '

Znaki jak: ,-. puszcza a tamtego nie chce puścić sad.gif

Ten post edytował Lethys 2.06.2015, 13:27:12


--------------------
filmy podobne do - wyszukiwarka podobnych filmów
motywacja do działania - Bądź Lepszy
Go to the top of the page
+Quote Post
Pyton_000
post 2.06.2015, 18:57:02
Post #7





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


zrób var_dump($nazwa) ze stringu i pokaż co tam wkładasz że nie przechodzi.
Może gdzieś robisz htmlspecialchars, albo z formularza idzie zakodowane.
Go to the top of the page
+Quote Post
Lethys
post 3.06.2015, 15:19:12
Post #8





Grupa: Zarejestrowani
Postów: 642
Pomógł: 2
Dołączył: 9.03.2006

Ostrzeżenie: (30%)
XX---


Cytat(Pyton_000 @ 2.06.2015, 18:57:02 ) *
zrób var_dump($nazwa) ze stringu i pokaż co tam wkładasz że nie przechodzi.
Może gdzieś robisz htmlspecialchars, albo z formularza idzie zakodowane.


faktycznie zmienna przepuszczam przez:

  1. $name = mysqli_real_escape_string($con, $_POST['name']);


Jak to mogę dostosować pod ten skrypt?

  1. if(preg_match('/[^\w\d\sąćęłńóśźżĄĆĘŁŃÓŚŹŻ.,?():\'-]+/', $nazwa)) {
  2. die('niedozwolone znaki');
  3. }




--------------------
filmy podobne do - wyszukiwarka podobnych filmów
motywacja do działania - Bądź Lepszy
Go to the top of the page
+Quote Post
Pyton_000
post 3.06.2015, 19:51:06
Post #9





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


nie przepuszczać, skoro akceptujesz tylko takie znaki to raczej nie przejdzie SQLInj
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 04:32