Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]rejestracja / walidacja
ilov3
post
Post #1





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 12.07.2013

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


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ę.
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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....
Go to the top of the page
+Quote Post
ilov3
post
Post #3





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 12.07.2013

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


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ąć
Go to the top of the page
+Quote Post
viking
post
Post #4





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


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.

Ten post edytował viking 3.01.2018, 11:31:13
Go to the top of the page
+Quote Post
ilov3
post
Post #5





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 12.07.2013

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


  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
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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
Go to the top of the page
+Quote Post
viking
post
Post #7





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


  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.
Go to the top of the page
+Quote Post
ilov3
post
Post #8





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 12.07.2013

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


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ę?
Go to the top of the page
+Quote Post
viking
post
Post #9





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Bo zamiast $link u ciebie $con. Poczytaj trochę dokumentację zamiast zgadywać to od razu problem się rozwiąże.
Go to the top of the page
+Quote Post
Boshi
post
Post #10





Grupa: Zarejestrowani
Postów: 342
Pomógł: 15
Dołączył: 30.08.2011

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


Przejdź na PDO. jest przyjemniejsze, popularniejsze i jest więcej poradników do niego.. nawet na wikiepdii.
Go to the top of the page
+Quote Post
ilov3
post
Post #11





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 12.07.2013

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


  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?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 13:15