Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z funkcja sprawdzającą PESEL
Forum PHP.pl > Forum > Przedszkole
piotrekk
Witam,
mam dziwny problem z funkcją sprawdzającą numer PESEL. Korzystam z tej samej funkcji przy sprawdzaniu podczas rejestracji oraz przy sprawdzaniu numeru podczas updatu danych przez użytkownika. I w pierwszym przypadku działa bez zarzutu, natomiast przy update wyskakuję mi błąd.

: Notice: Undefined variable: wk

funkcja:

  1.  
  2. function checkPesel($PESEL, $location, $connection, $sex="?")
  3. {
  4. if(!empty($PESEL) && trim(strlen($PESEL)) == 11)
  5. {
  6. if ($PESEL[9] % 2 and $sex=="K") return false;
  7. else if (!$PESEL[9] % 2 and $sex=="M") return false;
  8. $w=array(1,3,7,9);
  9. for ($i=0;$i<=9;$i++)
  10. $wk = ($wk+$PESEL[$i]*$w[$i % 4]) % 10;
  11. $k = (10-$wk) % 10;
  12. if ($PESEL[10]==$k)
  13. {
  14. $input = trim($PESEL);
  15.  
  16. mysql_real_escape_string($PESEL, $connection);
  17.  
  18. return $input;
  19. }
  20. else
  21. {
  22. bład
  23. }
  24. }


Czy wiecie może dlaczego ?

thx

oczywiście pesel, nie wiem czemu napisalem nip. thx
darko
NIP czy PESEL ?
piotrekk
oczywiscie pesel
thx

sprawa jeszcze wygląda tak, że w sumie ta funkcja poprawnie sprawdza numer pesel, bo po cofnieciu pojawia się odpowiedni komunikat jeżeli jest błędny nip lub zmienia go jeżeli jest poprawny, tylko przy akceptacji zmian wyrzuca właśnie ze wk jest undifinited, a w sumie przecież jest...

blooregard
A w której konkretnie linijce? Czy to cały plik? Może masz tę zmienną $wk jeszcze w innym miejscu wywoływaną bez deklaracji? (bo wtedy pokaże się notice o niezadeklarowanej zmiennej)
piotrekk
wlaśnie nie tylko w tym miejscu jest!! przy dodaniu pierwszy raz do bazy danych działa poprawnie, ale jak robie update to wyskakuję taki dziwny błąd i nie mam pojecia dlaczego. Tak naprawdę ta funkcja sprawdza czy to dobry nip i jak wezmę wstecz to wyskakuje mi info czy dobrze czy źle, ale właśnie nie przechodzi do odpowiedniego pliku potwierdzającego zmianę tylko wysypuję taki błąd.

nospor
rety.... komunikat bledu wskazuje ci w ktorej linii jest blad. pokaz nam tę linię
blooregard
Cytat
to wyskakuję taki dziwny błąd

To nie jest błąd, tylko informacja interpretera o użyciu niezadeklarowanej zmiennej. To raz.
Dwa - interpreter ZAWSZE podaje, w której linijce kodu notice,warrning albo parse error występuje. Więc, wklej cały plik i cały (z numerem linii) komunikat notice odnośnie zmiennej $wk.

piotrekk
  1.  
  2. function checkPesel($PESEL, $location, $connection, $sex="?")
  3. {
  4. if(!empty($PESEL) && trim(strlen($PESEL)) == 11)
  5. {
  6. if ($PESEL[9] % 2 and $sex=="K") return false;
  7. else if (!$PESEL[9] % 2 and $sex=="M") return false;
  8. $w=array(1,3,7,9);
  9. for($i=0;$i<=9;$i++)
  10. $wk=($wk+$PESEL[$i]*$w[$i % 4]) % 10; // TO TA LINIA
  11. $k=(10-$wk) % 10;
  12. if ($PESEL[10]==$k)
  13. {
  14. $input = trim($PESEL);
  15.  
  16. mysql_real_escape_string($PESEL, $connection);
  17.  
  18. return $input;
  19. }
  20. else
  21. {
  22. $_SESSION['error'] = "Błędny numer PESEL!";
  23. header("Location: $location");
  24. }
  25. }
  26.  


komunikat: Notice: Undefined variable: wk on line 108

108 - to ta która zaznaczyłem powyżej
blooregard
A komunikat i numer linii?
Kolego ~piotrekk, walnij sobie jakąs kawkę na pobudzenie szarych komórek, co?
nospor
no i prawidlowo:
$wk=($wk+$PESEL[$i]*$w[$i % 4]) % 10;

drugie $wk w linii powyzej za pierwszym razem nie istnieje. zrob tak:
$wk=0;
$wk=($wk+$PESEL[$i]*$w[$i % 4]) % 10;

piotrekk
komunikat błędu napisałem już w pierwszym poście. Dla pewności podałem go jeszcze raz powyżej. Odpowiednik tej lini tu to linia numer: 10

thx nospor
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.