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

Jak sprawdzić, że '1234' to 1234 ?

Object Storage Arubacloud
0 głosów
318 wizyt
pytanie zadane 18 lutego 2018 w PHP przez Bartess Gaduła (3,630 p.)
Cześć.
Zakładam użytkownika, dla którego generowany jest 4-cyfrowy PIN, np: 1234. Podczas logowania jest sprawdzane, czy użył tego PINu ($_POST['password'] >= 0000 && $_POST['password'] <= 9999). Jeżeli tak właśnie jest, to zostaje przekierowany od razu do zmiany hasła.
Problem w tym, że var_dump($_POST['password']); daje string(4) "1234".
Jak to zamienić na intiger?
Nie wchodzi w grę  intval($_POST['password']) (a przynajmniej tak mi się wydaje), bo jeżeli ktoś zmieni sobie PIN '1234' na nowe hasło '1234abc', to intval($_POST['password']) da taki sam wynik dla wpisanego w formularzu hasła '1234' jak i '1234abc' (wynikiem będzie '1234').

Jakieś sugestie?
komentarz 18 lutego 2018 przez Arkadiusz Waluk Ekspert (287,950 p.)
A co jak ktoś ustawi sobie PIN 0099? To nie jest poprawna liczba, nie da rady tego zapisać jako int.
komentarz 18 lutego 2018 przez Bartess Gaduła (3,630 p.)
Nie ustawi, bo hasło musi mieć co najmniej 5 znaków z przynajmniej 1 literą (przepraszam za brak precyzji w opisie problemu).
Chyba niechcący podsunąłeś  mi rozwiązanie: zamiast sprawdzić czy liczba, sprawdzić długość hasła :-).
komentarz 18 lutego 2018 przez Arkadiusz Waluk Ekspert (287,950 p.)
Ok, to totalnie nie zrozumiałem pytania, bo była tam mowa o jakimś zamienianiu na inta - myślałem że to chcesz uzyskać, a skoro są litery to nie wiem po co i jak zamieniać hasło na inta.
komentarz 18 lutego 2018 przez Bartess Gaduła (3,630 p.)
Gdzie napisałem, że w PINie są litery? Pisałem o przypadku takim, że ktoś otrzymany 4-cyfrowy PIN na swoje hasło, które składałoby się z tego PINu + np 3 litery. W takim przypadku zastosowanie funkcji  intval spowoduje, że utworzone przez użytkownika hasło będzie wyglądało jak PIN.
Udało mi się wyjaśnić?
komentarz 18 lutego 2018 przez Arkadiusz Waluk Ekspert (287,950 p.)
Myślę że tak, nie rozróżniłem hasła od PINu (myślałem że to jedno), sorki.

2 odpowiedzi

+2 głosów
odpowiedź 19 lutego 2018 przez efiku Szeryf (75,160 p.)
Po co tak kombinować?
Dajesz input typu text, w bazie pin trzymasz jako tekst, porównujesz za pomocą  ===.

Mi to wygląda na podobne do tego co kiedyś pisałem.

https://forum.pasja-informatyki.pl/115913/przypomnienie-hasla?show=116268#a116268
komentarz 20 lutego 2018 przez HDRGXS Początkujący (470 p.)
a "==" dla if ("1234" == 1234) nie zwróci true?
komentarz 20 lutego 2018 przez efiku Szeryf (75,160 p.)
Poczytaj w manualu o różnicy pomiędzy tymi operatorami i dlaczego należy stosować "==="
komentarz 21 lutego 2018 przez HDRGXS Początkujący (470 p.)
powiem inaczej... czemu nie można zrobić ("1234" == 1234) przecież to też zwróci true bez jakiegokolwiek rzutowania na stringa itp... Przy okazji jest pomijane to przykładowe abc. Czyli ("1234abc" == 1234) też zwróci true
komentarz 21 lutego 2018 przez efiku Szeryf (75,160 p.)
edycja 21 lutego 2018 przez efiku

Żebyś wiedział, że:
"1234" to "1234", string to string i  to dokładnie "1234" a nie "1234abc".

Wciąż nie rozumiem po co tu jakieś wyrażenia regularne. 
Zrobić pin jako varchar(5), trzymać pin jako tekst i porównywać to co user wpisał za pomocą  ===. 

@HDRGXS, wrzucę Ci tu z manuala, bo chyba nie masz ochoty go czytać:

Comparison Operators
Example Name Result
$a == $b Equal TRUE if $a is equal to $b after type juggling.
$a === $b Identical TRUE if $a is equal to $b, and they are of the same type.
$a != $b Not equal TRUE if $a is not equal to $b after type juggling.
$a <> $b Not equal TRUE if $a is not equal to $b after type juggling.
$a !== $b Not identical TRUE if $a is not equal to $b, or they are not of the same type.
$a < $b Less than TRUE if $a is strictly less than $b.
$a > $b Greater than TRUE if $a is strictly greater than $b.
$a <= $b Less than or equal to TRUE if $a is less than or equal to $b.
$a >= $b Greater than or equal to TRUE if $a is greater than or equal to $b.
$a <=> $b Spaceship An integer less than, equal to, or greater than zero when $a is respectively less than, equal to, or greater than $b. Available as of PHP 7.

Pin powinien być "IDENTYCZNY" a nie "PODOBNY"

https://3v4l.org/bC94A

komentarz 22 lutego 2018 przez HDRGXS Początkujący (470 p.)

aj źle przeczytałem temat, ale to nie zmienia faktu, że wystarczyło abyś powiedział, że to nie o to chodzi a nie manualem zarzucasz. Jakbyś nie zauważył, to co napisałem nie zawiera błędu, tylko jest troszkę o czymś innym laugh pozdrawiam

+1 głos
odpowiedź 18 lutego 2018 przez Artek Stary wyjadacz (11,800 p.)
Jak ja bym to zrobił : jeżeli przesłane dane składają się z 4 znaków i każdy znak jest cyfrą to jest w porządku, jeżeli jakikolwiek z powyższych warunków nie zostaje spełniony to zaprotestuj.
komentarz 18 lutego 2018 przez Bartess Gaduła (3,630 p.)
Czy to jedyny sposób na sprawdzenie czy string składa się z samych cyfr?
komentarz 19 lutego 2018 przez Artek Stary wyjadacz (11,800 p.)
Musiałbyś poszukać gdzieś w dokumentacji. Tam mają pogrupowane różne metody i funkcje - jeżeli istnieje to znajdziesz.
komentarz 19 lutego 2018 przez pablop76 VIP (123,120 p.)

To chyba dobre rozwiązanie. Wystarczy mały test.

var i, PIN = "3145";
var tabPIN = PIN.split('');
for(i=0; i<PIN.length; i++){
  if(!(/\d/.test(tabPIN[i]))||(PIN.length!=4)){
    "PIN not ok";
    break;
}else{
  "PIN ok";
}
}

 

komentarz 19 lutego 2018 przez Artek Stary wyjadacz (11,800 p.)
Nie sprawdzałem, ale czy nie prościej byłoby bez pętli? Tak skonstruować wyrażenie regularne aby za jednym zamachem sprawdzało wszystkie 4 znaki? I dlaczego kilka razy sprawdzasz długość PIN-u? I czy dałoby się bez splitowania?
komentarz 19 lutego 2018 przez pablop76 VIP (123,120 p.)
Chętnie zobaczę Twoje rozwiązanie.  Nie jestem specjalistą.
komentarz 19 lutego 2018 przez Artek Stary wyjadacz (11,800 p.)

Pisane w edytorze forumowym na szybko :

function IsPINok($PIN)
{
        if(strlen($PIN) != 4)
      {
        return false;
      }
      else
     {
        if($PIN odpowiada wyrażeniu regularnemu)  //można skorzystać z generatora
        {
          return true;
        }
      else
      {
        return false;
       }
     }
}

 

komentarz 19 lutego 2018 przez pablop76 VIP (123,120 p.)

Dzięki. Zmotywowałeś mnie do poszukania krótszego rozwiązania.

var PIN = "0000";
  if(!(/\d{4}/.test(PIN))||(PIN.length!=4)){
    "PIN not ok";
}else{
  "PIN ok";
}

 

komentarz 19 lutego 2018 przez Artek Stary wyjadacz (11,800 p.)
Teraz jak na to patrzę to wydaje mi się, że może nawet jeden warunek z odpowiednio skonstruowanym wyrażeniem regularnym by wystarczył - bez odpalania metody sprawdzającej długość. Nie obczajam jeszcze dobrze wyrażeń regularnych, ale w kościach czuję, że dałoby radę

Podobne pytania

+6 głosów
1 odpowiedź 329 wizyt
pytanie zadane 20 sierpnia 2016 w C i C++ przez jpacanowski VIP (101,940 p.)
0 głosów
1 odpowiedź 201 wizyt
pytanie zadane 25 maja 2016 w PHP przez Mateusz Analityk Stary wyjadacz (13,710 p.)

92,551 zapytań

141,399 odpowiedzi

319,531 komentarzy

61,937 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!

...