Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]rejestracja / walidacja
Forum PHP.pl > Forum > Przedszkole
ilov3
Witam, potrzebuję Waszej pomocy.
Chciałbym do tego kodu dodać walidację formularzy. A mianowicie:
* sprawdzenie czy taki user jest w bazie
* sprawdzenie czy taki email jest w bazie
* dodanie jakiś wymagań co do emaila

Oczywiście po każdym sprawdzeniu chciałbym by wyświetlił się odpowiedni komunikat o błędnym wprowadzeniu danych.

  1. <?php
  2. require('db.php');
  3. // If form submitted, insert values into the database.
  4. if (isset($_REQUEST['username'])){
  5. $username = stripslashes($_REQUEST['username']); // removes backslashes
  6. $username = mysqli_real_escape_string($con,$username); //escapes special characters in a string
  7. $email = stripslashes($_REQUEST['email']);
  8. $email = mysqli_real_escape_string($con,$email);
  9. $password = stripslashes($_REQUEST['password']);
  10. $password = mysqli_real_escape_string($con,$password);
  11.  
  12. $trn_date = date("Y-m-d H:i:s");
  13. $query = "INSERT into `users` (username, password, email, trn_date) VALUES ('$username', '".md5($password)."', '$email', '$trn_date')";
  14. $result = mysqli_query($con,$query);
  15. if($result){
  16. echo "<div class='form'><h3>You are registered successfully.</h3><br/>Click here to <a href='login.php'>Login</a></div>";
  17. }
  18. }else{
  19. ?>



Z góry dziękuję.
nospor
skoro uzywasz mysqli to zainteresuj sie BINDowaniem a nie bawisz sie escapowanie.
Hasla sie nie escapuje ani nie sripslashuje bo przeciez i tak przechodzi przez funkcje hashujaca
trzymanie hasla w md5 to tak jakbys trzymal jest w postaci jawnej.

Co do problemu: to z czym masz problem? Nie umiesz pobrac danych z bazy? SELECT....
ilov3
problem w tym, że właśnie wkopałem się w mysqli, a większość poradników jakie przeglądam jest na mysql. Chciałbym by ktoś mi pokazał jak zacząć
viking
I słusznie bo rozszerzenie mysql już dawno nie istnieje w php.
Zobacz np
https://prophp.pl/advice/show/11/filtrowani...moca_filter_var
https://prophp.pl/advice/show/25/jak_zabezp...ql_injection%3F
https://prophp.pl/advice/show/24/jak_zrobic...istratora%29%3F
https://prophp.pl/article/10/php_data_objec...luge_baz_danych

Zasada działania ta sama w PDO, mogą się odrobinę nazwy niektórych metod różnić pomiędzy mysqli a PDO.
ilov3
  1. $query = "SELECT * FROM `users` WHERE email='$email'";
  2. $result = mysqli_query($con,$query);
  3. $rows = mysqli_num_rows($result);
  4. if($rows==0){
  5. $error = true;
  6. $emailError = "Provided Email is already in use.";
  7. }



takie coś, ale nadal dodaje te same adresy email
nospor
jesli nei ma rekordow to zwracasz error, ze rekord juz istnieje. gdzie logika?
poza tym nigdzie nie masz blokady na te errory wiec pewnei reszta kodu jak sie wykonywala tak sie wykonuje niezaleznie czy masz tam tego IF czy nie
viking
  1. if ($stmt = mysqli_prepare($link, "SELECT * FROM `users` WHERE email=? LIMIT 1")) {
  2.  
  3. /* bind parameters for markers */
  4. mysqli_stmt_bind_param($stmt, "s", $email);
  5.  
  6. /* execute query */
  7. mysqli_stmt_execute($stmt);
  8.  
  9. /* bind result variables */
  10. mysqli_stmt_bind_result($stmt, $password);
  11.  
  12. var_dump(mysqli_stmt_num_rows($stmt));
  13.  
  14. /* close statement */
  15. mysqli_stmt_close($stmt);
  16. }


Czy jakoś tak. Masz w dokumentacji przykłady.
ilov3
dzięki @viking ale trochę tego nie rozumiem, a wklejenie tego kodu nie działa - a nie umiem póki co nic w nim zmienić.


@nospor

czyli rozumiem, że zmieniam
  1. if($rows==0)
na
  1. if($rows==1)


a jak zrobić tą blokadę?
viking
Bo zamiast $link u ciebie $con. Poczytaj trochę dokumentację zamiast zgadywać to od razu problem się rozwiąże.
Boshi
Przejdź na PDO. jest przyjemniejsze, popularniejsze i jest więcej poradników do niego.. nawet na wikiepdii.
ilov3
  1. <?php
  2. require('db.php');
  3. // If form submitted, insert values into the database.
  4. if (isset($_REQUEST['username'])){
  5. $username = stripslashes($_REQUEST['username']); // removes backslashes
  6. $username = mysqli_real_escape_string($con,$username); //escapes special characters in a string
  7. $email = stripslashes($_REQUEST['email']);
  8. $email = mysqli_real_escape_string($con,$email);
  9. $password = stripslashes($_REQUEST['password']);
  10. $password = mysqli_real_escape_string($con,$password);
  11.  
  12. $query = mysqli_query($con, "SELECT NULL FROM users WHERE (username LIKE '".$username."') OR (email LIKE '".$email."')");
  13. if(!mysqli_num_rows($query))
  14. {
  15. $trn_date = date("Y-m-d H:i:s");
  16. $query = "INSERT into `users` (username, password, email, trn_date) VALUES ('$username', '".md5($password)."', '$email', '$trn_date')";
  17. $result = mysqli_query($con,$query);
  18. if($result){
  19. echo "<div class='form'><h3>You are registered successfully.</h3><br/>Click here to <a href='login.php'>Login</a></div>";
  20. }
  21. }
  22. else{
  23. echo "<div class='form'><h3>Twój login / email jest już zarezerwowany</h3><br/>Click here to <a href='login.php'>Wstecz</a></div>";
  24. }
  25. }else{
  26. ?>



zrobiłem to tak - działa. tylko pytanie jak muszę zmienić to by po wpisaniu isteniejącego emaila/nazwy usera wyrzucało błąd na tej samej stronie?
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.