Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] preg_match nie działa tak jak powinien
Lethys
post
Post #1





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

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


Witam, mam w skrypcie zmienna przekazywaną linkiem i chciałbym się zabezpieczyć przed wpisywaniem tam niechcianych znaków.

W linku chcę akceptować tylko małe, duże litery, cyfry i myślnik.

  1.  
  2. if(!preg_match("/[A-Za-z0-9-]+/", $link)){
  3. $problem = TRUE;
  4. $error = "W linku są niedozwolone znaki.";
  5. }
  6. $link_przetworzone = mysqli_real_escape_string($con, $link);
  7. $test_filmu = mysql_num_rows(mysql_query("select * from links where link='$link_przetworzone'"));
  8. if ($test_filmu == 0) {
  9. $problem = TRUE;
  10. $error = "Nie ma takiego linku.";
  11. }
  12.  
  13. if (!$problem){
  14.  
  15. //Przeszło zabezpieczenia
  16.  
  17. }


Mój problem polega na tym, że preg_match jest praktycznie omijany, nawet jak wpiszę powiedzmy polski znak to pokazuje, że "Nie ma takiego linku." w bazie danych czyli po prostu działa drugi warunek. A co się dzieje z preg_march? Czemu nie sprawdza znaków i nie wywala w pierwszeństwie błędu pierwszego warunku z preg_match?
Go to the top of the page
+Quote Post
johny_s
post
Post #2





Grupa: Zarejestrowani
Postów: 594
Pomógł: 122
Dołączył: 17.07.2005
Skąd: P-na

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


  1. if() {
  2.  
  3. } else {
  4.  
  5. }
Go to the top of the page
+Quote Post
Lethys
post
Post #3





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

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


Cytat(johny_s @ 25.02.2015, 17:18:55 ) *
  1. if() {
  2.  
  3. } else {
  4.  
  5. }



To nic nie zmienia.


Jak uproszczę kod i zostawię tylko preg_match w moich zabezpieczeniach to nadal nie działa. Myślałem, że się może zmianna $error nadpisywać ale to nie to.

  1. if(!preg_match("/[A-Za-z0-9-]+/", $link)){
  2. $problem = TRUE;
  3. $error = "W nazwie filmu są niedozwolone znaki.";
  4. }
  5.  
  6. if (!$problem){
  7.  
  8. $link = mysql_fetch_array(mysql_query("select * from links where link='$link_przetworzone'")) or mysql_error();
  9.  
  10. }


Przy wklepaniu w linku polskich znaków, omija zabezpieczenia i jest problem FALSE.
Go to the top of the page
+Quote Post
johny_s
post
Post #4





Grupa: Zarejestrowani
Postów: 594
Pomógł: 122
Dołączył: 17.07.2005
Skąd: P-na

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


  1. /^[A-Za-z0-9-]+$/
Go to the top of the page
+Quote Post
Pyton_000
post
Post #5





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

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


  1. if(preg_match('[^A-Za-z0-9-]+', $url))
  2. { die('niedozwolone znaki'); }


Ten post edytował Pyton_000 25.02.2015, 18:45:19
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: 24.12.2025 - 14:12