• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed walidacja formularza

Object Storage Arubacloud
0 głosów
180 wizyt
pytanie zadane 25 lutego 2020 w PHP przez franz Gaduła (4,940 p.)
zamknięte 25 lutego 2020 przez franz

Nie wiem dlaczego ale wysypuje się błędem 

HTTP ERROR 500

 problemem jest to 

if (ctype_alnum($tytul))

po wpisaniu w polu tytuł jakiegoś tytułu zawierającego " ' " np. "Grey's"  mam błąd jak wyżej 

Jak temu zaradzić 

komentarz zamknięcia: odpowiedź udzielona z nawiązką
komentarz 25 lutego 2020 przez franz Gaduła (4,940 p.)
Poprawka drobna to nie to powoduje problem

Problem pojawia siew zapytaniu do bazy

Pisze że błąd składni , ale dlaczego ?
Skoro "Grey's" jest przesyłane jako string i zapytanie ma sprawdzić czy jest w bazie czy nie

Dlaczego wysypuje się błedem i jak temu zaradzić ?

1 odpowiedź

+1 głos
odpowiedź 25 lutego 2020 przez Comandeer Guru (602,330 p.)

Użyj prepared statements. Rozwiąże to przy okazji problemy z bezpieczeństwem.

komentarz 25 lutego 2020 przez franz Gaduła (4,940 p.)
edycja 25 lutego 2020 przez franz
$tytul=$db->prepare("SELECT * FROM tabela where tytul='$tytul'");
      	$tytul->bindValue(':tytul',$tytul,PDO::PARAM_STR);
      	$tytul->execute();

tak wygląda zapytanie , więc raczej jest poprawne (tak mi się wydaje )

Zmieniłem to zapytanie na to które podesłałeś ze stackoverflow

Ale nadal ma problem z tym " ' "

syntax to use near '' ?' at line 1 

 

komentarz 25 lutego 2020 przez Mariusz08 Maniak (62,300 p.)
No nie jest poprawne, bo używasz apostrofów do określenia granicy stringa, po czym dajesz taki znak w walidowanym wyrazie. SQL interpretuje to jako koniec stringa, a dalsze wyrazy są po prostu błędem.
1
komentarz 25 lutego 2020 przez Comandeer Guru (602,330 p.)

@franz, jako zmienną w zapytaniu określasz :tytul, ale w samym zapytaniu masz '$tytul'.

Zapytanie powinno wyglądać tak:

$tytul=$db->prepare("SELECT * FROM tabela where tytul=:tytul");
$tytul->bindValue(':tytul',$tytul,PDO::PARAM_STR);
$tytul->execute();

 

komentarz 25 lutego 2020 przez franz Gaduła (4,940 p.)
to było to
Dziękuje
komentarz 25 lutego 2020 przez franz Gaduła (4,940 p.)
Przy okazji

Jest możliwość zweryfikować taki ciąg nie używając wyrażeń regularnych

1997-2007

chodzi o to że mają być tylko cyfry ale może być między nimi ten minus czy inaczej myślnik
komentarz 25 lutego 2020 przez Comandeer Guru (602,330 p.)
Dałoby się po prostu sprawdzić poszczególne znaki, niemniej wykorzystanie wyrażenia regularnego jest o wiele prostsze w tym przypadku.
komentarz 25 lutego 2020 przez franz Gaduła (4,940 p.)

Powinienem więc zapisać coś takiego ?

if (!preg_match('^[0-9]*-[0-9]*$^', $rok))

czy taki zapis wystarczy?

1
komentarz 25 lutego 2020 przez Comandeer Guru (602,330 p.)

Bardziej /^\d+-?\d+$/.

komentarz 25 lutego 2020 przez franz Gaduła (4,940 p.)

zapisałem tak 

if(!preg_match('/^\d+-?\d+$/.',$rok))

Ale nie przepuściło  1997-2007

1
komentarz 25 lutego 2020 przez Comandeer Guru (602,330 p.)
if(!preg_match('/^\d+-?\d+$/',$rok))

Ta kropka to po prostu kropka.

komentarz 25 lutego 2020 przez franz Gaduła (4,940 p.)

teraz działa DZIĘKUJE 

Ale mam prośbę , mógł byś wytłumaczyć to wyrażenie 

Wkleiłem je i działa ale co to naprawdę jest ? 

Takie proste wyrażenia to powiedzmy że rozumiem ale nie takie ja kto smiley

2
komentarz 25 lutego 2020 przez Comandeer Guru (602,330 p.)

\d oznacza cyfry, + – dana wartość ma wystąpić raz lub więcej, ? – dana wartość ma wystąpić raz lub wgl, ^ i $ – początek i koniec ciągu.

Zatem to wyrażenie oznacza ciąg rozpoczynający się od co najmniej jednej cyfry, po której następuje jeden lub zero myślników oraz co najmniej jedna cyfra.

komentarz 25 lutego 2020 przez franz Gaduła (4,940 p.)

dziękujesmiley

komentarz 25 lutego 2020 przez Tomek Sochacki Ekspert (227,510 p.)
Tomek, a powiedz mi co sądzisz o sformułowaniu zero myslnikow? Pytam, bo jakiś czas temu robiłem małe szkolenie z regexp j zwrócono mi uwagę, że takie sformulowania to masło maślane i nie po polskiemu :) pamiętam, że w helionie też mialem dyskusję o tym z korektą ale jestem ciekaw Twojego zdania jako polonisty programisty, który rozumie programistyczny sens tego sformułowania :)
komentarz 25 lutego 2020 przez Comandeer Guru (602,330 p.)
Z punktu widzenia języka jest to sformułowanie może nie tyle niepoprawne, co bardzo "nieforemne". Też mnie drażni, ale równocześnie – jest w pełni komunikatywne i w kontekście socjolektu programistycznego poniekąd naturalne.1

Podobne pytania

0 głosów
1 odpowiedź 129 wizyt
pytanie zadane 29 stycznia 2019 w PHP przez daniel2k Obywatel (1,380 p.)
0 głosów
1 odpowiedź 218 wizyt
pytanie zadane 17 kwietnia 2018 w JavaScript przez Catalonya1992 Mądrala (5,440 p.)
+1 głos
2 odpowiedzi 330 wizyt
pytanie zadane 24 czerwca 2022 w JavaScript przez AgentTecza Obywatel (1,810 p.)

92,621 zapytań

141,477 odpowiedzi

319,817 komentarzy

62,005 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...