![]() |
![]() ![]() |
![]() |
![]()
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 ![]() 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: © Wszelkie prawa zastrzeżone </div> </div> </body> </html> |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 799 Pomógł: 1827 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
A przyjrzałeś się warunkowi gdzie sprawdzasz pesel?
-------------------- |
|
|
![]()
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
![]() |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 799 Pomógł: 1827 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
To zerknij jeszcze raz:
Jakie wartości zwraca preg_match dla poprawnego i nieporawnego numeru pesel? -------------------- |
|
|
![]()
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 .. ![]() Dopiero ja wiem od miesiąca się bawie.. I jak widać nie wychodzi za bardzo |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 594 Pomógł: 66 Dołączył: 22.02.2008 Skąd: Dublin 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 .. ![]() 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 -------------------- |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 6 376 Pomógł: 1116 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.
-------------------- |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 5.01.2021 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 651 Pomógł: 3 Dołączył: 31.01.2011 Skąd: Warszawa Ostrzeżenie: (10%) ![]() ![]() |
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... |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 324 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.
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 6 376 Pomógł: 1116 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...
-------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 26.04.2025 - 00:39 |