Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Sprawdzenie poprawności pesel
Rafalsw
post 5.01.2021, 18:46:43
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 5.01.2021

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


Dzień Dobry,
Zaczynam zabawę z PHP I HTML. I moje zadanie to stworzyć stronę.
Więc postanowiłem zrobić stronę banku. Dużą część już zrobiłem formularz bazę danych, formularz logowania,stronę główna,rejestrację.. I tutaj mam problem przy formularzu rejestracji nowego użytkownika.
Mianowicie nie działa mi sprawdzenie poprawności numeru pesel.
Co dziwne zrobiłem sprawdzenie czy dany login jest w bazie danych i to działa mi prawidłowo.. A przy sprawdzeniu Peselu coś nie działa i nie widzę w czym jest problem.
Proszę o pomoc i wytłumaczenie "łopatologiczne" co zrobiłem nie tak biggrin.gif





Tutaj jest mój cały kod pliku rejestracja.php
CODE
<?php
// Załaduj config.php
require_once "config.php";

// Zdefiniuj zmienne i zainicjuj z pustymi wartościami
$username = $password = $confirm_password = $imie = $nazwisko = $PESEL = $Adres = $KODP = $email = $potwierdz_email = "";

$username_err = $password_err = $confirm_password_err = $imie_err = $nazwisko_err = $PESEL_err = $Adres_err = $KODP_err = $email_err = $potwierdz_email_err = "";
// Przetwarzanie danych formularza po przesłaniu formularza
if($_SERVER["REQUEST_METHOD"] == "POST"){

// Sprawdź pole login, czy jest puste
if(empty(trim($_POST["username"]))){
$username_err = "<br>"."Wpisz swój login.";
} else{
// Przygotuj zapytanie "Select"
$sql = "SELECT id FROM users WHERE username = ?";

if($stmt = mysqli_prepare($link, $sql)){
// Powiąż zmienne z przygotowaną instrukcją jako parametry
mysqli_stmt_bind_param($stmt, "s", $param_username);

// Ustaw parametry
$param_username = trim($_POST["username"]);

// Spróbuj wykonać przygotowaną instrukcję
if(mysqli_stmt_execute($stmt)){
/* zapisz wynik */
mysqli_stmt_store_result($stmt);

if(mysqli_stmt_num_rows($stmt) == 1){
$username_err = "<br>"."Taki login już istnieje!";
} else{
$username = trim($_POST["username"]);
}
} else{
echo "<br>"."Oops! Coś poszło nie tak, spróbuj ponownie później";
}

// Zakończ powyższe działania
mysqli_stmt_close($stmt);
}
}

// Potwierdź hasło
if(empty(trim($_POST["password"]))){
$password_err = "<br>"."Wpisz hasło.";
} elseif(strlen(trim($_POST["password"])) < 6){
$password_err = "<br>"."Hasło musi zawierać więcej niż 6 znaków";
} else{
$password = trim($_POST["password"]);
}

//
if(empty(trim($_POST["confirm_password"]))){
$confirm_password_err = "<br>"."Potwierdź hasło.";
} else{
$confirm_password = trim($_POST["confirm_password"]);
if(empty($password_err) && ($password != $confirm_password)){
$confirm_password_err = "<br>"."Hasło się nie zgadza.";
}
}

//
if(empty(trim($_POST["imie"]))){
$imie_err = "<br>"."Wpisz imię.";
} elseif(strlen(trim($_POST["imie"])) < 3){
$imie_err = "<br>"."Imię powinno posiadać co najmniej 3 znaki";
} else{
$imie = trim($_POST["imie"]);
}

//
if(empty(trim($_POST["nazwisko"]))){
$nazwisko_err = "<br>"."Wpisz nazwisko.";
} elseif(strlen(trim($_POST["nazwisko"])) < 2){
$nazwisko_err = "<br>"."Nazwisko powinno posiadać co najmniej 2 znaki";
} else{
$nazwisko = trim($_POST["nazwisko"]);
}


//
if(empty(trim($_POST["PESEL"]))){
$PESEL_err = "<br>"."Wpisz numer PESEL.";
} elseif(preg_match('/^[0-9]{11}$/', $_POST["PESEL"])){
$PESEL_err = "<br>"."PESEL musi posiadać 11 cyfr";
} else{
$PESEL = trim($_POST["PESEL"]);
}


// Sprawdź błędy przed wstawieniem do bazy danych
if(empty($username_err) && empty($password_err) && empty($confirm_password_err) && empty($imie_err) && empty($nazwisko_err) && empty($PESEL_err)){

// Przygotuj zapytanie wstawiania do tabeli w bazie danych
$sql = "INSERT INTO users (username, password, imie, nazwisko, pesel) VALUES (?, ?, ?, ?, ?)";

if($stmt = mysqli_prepare($link, $sql)){
// Powiąż zmienne z przygotowaną instrukcją jako parametry
mysqli_stmt_bind_param($stmt, "sssss", $param_username, $param_password, $param_imie, $param_nazwisko, $param_PESEL);

// Ustaw parametry
$param_username = $username;
$param_password = password_hash($password, PASSWORD_DEFAULT); // Haszowanie hasła
$param_imie = $imie;
$param_nazwisko = $nazwisko;
$param_PESEL = $PESEL;
// Spróbuj wykonać przygotowaną instrukcję
if(mysqli_stmt_execute($stmt)){
// Przekieruj do logowanie.php
header("location: logowanie.php");
} else{
echo "Something went wrong. Please try again later.";
}

// Zakończ powyższe działania
mysqli_stmt_close($stmt);
}
}

// Zakończ połączenie
mysqli_close($link);
}
?>
<!DOCTYPE HTML>
<html lang="pl">
<head>
<meta charset="utf-8" />
<title>Bank IENGIE!</title>
<meta name="description" content="Strona banku IENGIE. Rafał & Sławomir Company" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />

<link rel="stylesheet" href="style.css" type="text/css" />
<link href='<link rel="preconnect" href="https://fonts.gstatic.com"><link href="https://fonts.googleapis.com/css2?family=Nerko+One&display=swap" rel="stylesheet"> rel='stylesheet' type='text/css'>

</head>

<body>

<div id="container">

<div id="logo">
Codzienne Bankowanie z IENGIE!
</div>

<div id="menu">
<div class="option"><a href="logowanie.php">Logowanie<a/></div>
<div class="option"><a href="rejestracja.php">Rejestracja</a></div>
<div class="option">O nas!</div>
<div class="option">Kontakt</div>
<div style="clear:both;"></div>
</div>

<div id="topbar">
<div id="topbarL">
<img src="lnux.png" />
</div>
<div id="topbarR">
<span class="bigtitle">Słów kilka</span>
<div style="height: 15px;"></div>
Posiadanie pieniędzy polega na niewydawaniu ich.
</div>
<div style="clear:both;"></div>
</div>

<div id="sidebar">
<div class="optionL"><a href="index.php">Strona główna</a></div>
<div class="optionL"><a href="logowanie.php">Logowanie</a></div>
<div class="optionL"><a href="rejestracja.php">Rejestracja</a></div>
<div class="optionL">O nas</div>
<div class="optionL">Kontakt</div>
</div>
<div id="content">
<span class="bigtitle">Dlaczego bank IENGIE?</span>

<div class="dottedline"></div>
<div class="wrapper">
<h2>Zarejestruj się</h2>
<p>Uzupełnij dane logowania.</p>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
<div class="form-group <?php echo (!empty($username_err)) ? 'has-error' : ''; ?>">
<label>Login</label>
<input type="text" name="username" class="form-control" value="<?php echo $username; ?>">
<span class="help-block"><?php echo $username_err; ?></span>
</div>
<div class="form-group <?php echo (!empty($password_err)) ? 'has-error' : ''; ?>">
<label>Hasło</label>
<input type="password" name="password" class="form-control" value="<?php echo $password; ?>">
<span class="help-block"><?php echo $password_err; ?></span>
</div>
<div class="form-group <?php echo (!empty($confirm_password_err)) ? 'has-error' : ''; ?>">
<label>Powtórz hasło</label>
<input type="password" name="confirm_password" class="form-control" value="<?php echo $confirm_password; ?>">
<span class="help-block"><?php echo $confirm_password_err; ?></span>
</div>
<div class="form-group <?php echo (!empty($imie_err)) ? 'has-error' : ''; ?>">
<label>Imię</label>
<input type="text" name="imie" class="form-control" value="<?php echo $imie; ?>">
<span class="help-block"><?php echo $imie_err; ?></span>
</div>
<div class="form-group <?php echo (!empty($nazwisko_err)) ? 'has-error' : ''; ?>">
<label>Nazwisko</label>
<input type="text" name="nazwisko" class="form-control" value="<?php echo $nazwisko; ?>">
<span class="help-block"><?php echo $nazwisko_err; ?></span>
</div>
<div class="form-group <?php echo (!empty($PESEL_err)) ? 'has-error' : ''; ?>">
<label>PESEL</label>
<input type="text" name="PESEL" class="form-control" value="<?php echo $PESEL; ?>">
<span class="help-block"><?php echo $PESEL_err; ?></span>
</div>
<div class="form-group">
<input type="submit" class="btn btn-primary" value="Submit">
<input type="reset" class="btn btn-default" value="Reset">
</div>
<p>Masz już konto? <a href="logowanie.php">Zaloguj się</a>.</p>
</form>
</div>
</div>

<div id="footer">
Właściciele: &copy; Wszelkie prawa zastrzeżone
</div>

</div>

</body>
</html>
Go to the top of the page
+Quote Post
trueblue
post 5.01.2021, 18:48:20
Post #2





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


A przyjrzałeś się warunkowi gdzie sprawdzasz pesel?


--------------------
Go to the top of the page
+Quote Post
Rafalsw
post 5.01.2021, 18:54:19
Post #3





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 5.01.2021

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


Wydaje mi się,że tak. Jeśli widzisz w czym jest problem proszę wytłumacz mi. Ja niestety nie wiem w czym jest problem sad.gif
Go to the top of the page
+Quote Post
trueblue
post 5.01.2021, 18:57:02
Post #4





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


To zerknij jeszcze raz:
  1. } elseif(preg_match('/^[0-9]{11}$/', $_POST["PESEL"])){
  2. $PESEL_err = "<br>"."PESEL musi posiadać 11 cyfr";


Jakie wartości zwraca preg_match dla poprawnego i nieporawnego numeru pesel?


--------------------
Go to the top of the page
+Quote Post
Rafalsw
post 5.01.2021, 19:16:46
Post #5





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 5.01.2021

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


Znaczy yyy... jeśli w formularzu wpiszę pesel "123456789" <- 9 znaków to taki mi doda do bazy.
A gdy wpiszę "1234567890" <- 10 znaków i więcej to wtedy do bazy dodaje "2147483647" <- nie wiem skąd ta wartość się bierze.
To wyrażenie znalazłem w internecie na jakimś forum i nie bardzo rozumiem jak to ma działać ;/

elseif(preg_match('/^[0-9]{12}$/', $_POST["PESEL"])){

Bynajmniej jaką wartość bym nie wpisał w formularzu w polu "Pesel" to zawsze użytkownika utworzy. Żaden komunikat błędu się nie pokazuje



Naprawdę jestem zielony w php .. biggrin.gif
Dopiero ja wiem od miesiąca się bawie.. I jak widać nie wychodzi za bardzo
Go to the top of the page
+Quote Post
dublinka
post 5.01.2021, 19:54:29
Post #6





Grupa: Zarejestrowani
Postów: 594
Pomógł: 66
Dołączył: 22.02.2008
Skąd: Dublin

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


Cytat(Rafalsw @ 5.01.2021, 18:16:46 ) *
Znaczy yyy... jeśli w formularzu wpiszę pesel "123456789" <- 9 znaków to taki mi doda do bazy.
A gdy wpiszę "1234567890" <- 10 znaków i więcej to wtedy do bazy dodaje "2147483647" <- nie wiem skąd ta wartość się bierze.
To wyrażenie znalazłem w internecie na jakimś forum i nie bardzo rozumiem jak to ma działać ;/

elseif(preg_match('/^[0-9]{12}$/', $_POST["PESEL"])){

Bynajmniej jaką wartość bym nie wpisał w formularzu w polu "Pesel" to zawsze użytkownika utworzy. Żaden komunikat błędu się nie pokazuje



Naprawdę jestem zielony w php .. biggrin.gif
Dopiero ja wiem od miesiąca się bawie.. I jak widać nie wychodzi za bardzo

Wyrazenie mowi jedno 12 znakow z przedzialu liczbowym od 0-9

Ten post edytował dublinka 5.01.2021, 19:58:07


--------------------
Go to the top of the page
+Quote Post
viking
post 5.01.2021, 20:02:45
Post #7





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Twój kod mówi że jeśli pesel jest poprawny to wyświetl błąd. Zaneguj warunek.


--------------------
Go to the top of the page
+Quote Post
Rafalsw
post 5.01.2021, 20:31:05
Post #8





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 5.01.2021

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


Cytat(viking @ 5.01.2021, 20:02:45 ) *
Twój kod mówi że jeśli pesel jest poprawny to wyświetl błąd. Zaneguj warunek.



Ohhhh..... Teraz rozumiem...
Dziękuję bardzo.
Go to the top of the page
+Quote Post
shpaque
post 14.01.2021, 15:47:16
Post #9





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


generalnie co to za walidacja nr PESEL... wylacznie na ilosci znakow - a jak wpisze pesel 99999999999 to tez mi pojdzie...

wg mnie powinienes rozboc pesel na dwie czesci - te sprzed milenium i te po 2000 roku

czyli pierwsze 6 znakow oznacza date urodzenia, ktora najlepiej od razu weryfikowac z polem (js/jquery/ajax) z data urodzenia czy tu jest zgodnosc - nie wiem czy pesel ma (tak jak konto bankowe) sume kontrolna jesli tak -=0 poszukaj tego w necie wowczas dopiero bedzie mowa o walidacji nr pesel...
Go to the top of the page
+Quote Post
gino
post 15.01.2021, 07:59:12
Post #10





Grupa: Zarejestrowani
Postów: 319
Pomógł: 52
Dołączył: 18.02.2008

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


dodam parę zdań od siebie. @shpaque ma rację, w tej chwili walidacja numeru pesel wykracza daleko poza prostą arytmetykę sum kontrolnych i potrzebuje dużo bardziej zaawansowanego liczenia niż proste reguły. Chodzi o policzenie sum kontrolnych, typ i długość całego ciągu, nieistniejące, przyszłe i niepoprawne daty, podział na stulecia itd. To nie prosty preg_mach sprawdzający ilość znaków int i po sprawie a już w systemie bankowym takie sprawdzenie? Zabawa zabawą, ale mimo wszystko problem trzeba ogarnąć od początku do końca.
Go to the top of the page
+Quote Post
viking
post 15.01.2021, 08:02:09
Post #11





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Offtop: Gdyby ktoś miał jeszcze w rządzie odwagę wprowadzić numer z pełną datą na początku zamiast tych kombinacji...


--------------------
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: 19.04.2024 - 20:35