Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

3 Stron V   1 2 3 >  
Closed TopicStart new topic
> [PHP]Rejestracja, problem z dodawaniem użytkownika
Durkane
post
Post #1





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 28.07.2015

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


  1. <?php
  2.  
  3. require_once "connect.php";
  4.  
  5. function filtruj($zmienna)
  6. {
  7. $zmienna = stripslashes($zmienna); //usuwamy slashe
  8.  
  9. // usuwamy spacje, tagi html oraz niebezpieczne znaki
  10. }
  11.  
  12. if(isset($_POST['rejestruj']))
  13. {
  14. $name = filtruj($_POST['name']);
  15. $surname = filtruj($_POST['surname']);
  16. $pass1 = filtruj($_POST['passwod1']);
  17. $pass2 = filtruj($_POST['password2']);
  18. $email = filtruj($_POST['email']);
  19. $ip = filtruj($_SERVER['REMOTE_ADDR']);
  20. }
  21.  
  22. // sprawdzanie dostepnosci loginu
  23.  
  24. if (mysqli_num_rows(mysqli_query("SELECT email FROM uzytkownicy WHERE email = '".$name."';")) == 0)
  25. {
  26. if ($haslo1 == $haslo2) // sprawdzanie poprawnosci hasel
  27. {
  28. mysqli_query("INSERT INTO 'uzytkownicy' ('imie','nazwisko','haslo','email','rejestracja','logowanie','ip')
  29. VALUES ('".$name."','".$surname."','".md5($pass1)."','".$email."','".time()."','".time()."'.'".$ip."');");
  30. echo "Konto zostało utworzone pomyślnie !";
  31. }
  32. else
  33. {
  34. echo "Hasła nie są takie same!";
  35. }
  36. }
  37. else
  38. {
  39. echo "Podany login jest już zajęty.";
  40. }


Mam taki kod do rejestracji, po podaniu danych w formularzu i wciśnięciu przycisku wyskakuje, że konto zostało utworzone pomyślnie. Jednak nic nie zostaje dodane do bazy danych :/ Drugi problem to polskie znaki, baze danych mam ustawioną na utf8_general_ci tak samo tabele, na stronie mam ustawione utf8 i mimo to zamiast ą,ę itd pojawia się "?". Ma ktoś rozwiązanie tego? Bo z tym się już borykam z tydzień ;/

Ten post edytował Durkane 4.01.2016, 13:05:35
Go to the top of the page
+Quote Post
goartur
post
Post #2





Grupa: Zarejestrowani
Postów: 233
Pomógł: 27
Dołączył: 19.10.2014

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


Zrob :

  1. echo "INSERT INTO 'uzytkownicy' ('imie','nazwisko','haslo','email','rejestracja','logowanie','ip')
  2. VALUES ('".$name."','".$surname."','".md5($pass1)."','".$email."','".time()."','".time()."'.'".$ip."')";


Wklej do sql w phpmyadmin, powinno zwrocic blad, skopiuj to i wyslij tutaj.
Go to the top of the page
+Quote Post
viking
post
Post #3





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

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


  1. $pass1 = filtruj($_POST['passwod1']);

Brakuje r.
A poza tym. Hasła nie md5 tylko password_hash() minimum. Nie usuwaj znaków z hasła użytkownika. Sprawdzaj i obsługuj błędy z bazy. Wyrzuć tą śmieszną funkcję filtruj i stosuj prepared statements.


--------------------
Go to the top of the page
+Quote Post
Durkane
post
Post #4





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 28.07.2015

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


#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'echo "INSERT INTO 'uzytkownicy' ('imie','nazwisko','haslo','email','rejestracja'' at line 1

To dostaje, gdy wklejam do SQL w phpmyadmin.

Jeżeli dobrze rozumiem to mam zrobić z tym password_hash()

  1. $hash = password_hash($pass1, PASSWORD_BCRYPT);

?

Ten post edytował Durkane 4.01.2016, 13:11:36
Go to the top of the page
+Quote Post
viking
post
Post #5





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

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


Tak, pamiętaj żeby odpowiednią długość pola ustawić w bazie.


--------------------
Go to the top of the page
+Quote Post
Durkane
post
Post #6





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 28.07.2015

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


Ok ustawione mam VARCHAR(255), więc raczej jest ok smile.gif Tylko dalej problem mam z polskimi znakami i dodawaniem do bazy danych wszystkich podanych wartości :/

  1.  
  2. <?php
  3.  
  4. require_once "connect.php";
  5.  
  6.  
  7. $name = $_POST['name'];
  8. $surname = $_POST['surname'];
  9. $pass1 = $_POST['password1'];
  10. $pass2 = $_POST['password2'];
  11. $email = $_POST['email'];
  12. $ip = $_SERVER['REMOTE_ADDR'];
  13. $hash = password_hash($pass1, PASSWORD_BCRYPT)
  14.  
  15. $query = $pdo->prepare("SELECT 'email' FROM 'uzytkownicy' WHERE 'email' = :email");
  16. $query->bindValue(':email',$email);
  17. $query->execute();
  18.  
  19. // sprawdzanie dostepnosci loginu
  20.  
  21. if (mysqli_num_rows($query == 0)
  22. {
  23. if ($haslo1 == $haslo2) // sprawdzanie poprawnosci hasel
  24. {
  25. mysqli_query("INSERT INTO 'uzytkownicy' ('imie','nazwisko','haslo','email','rejestracja','logowanie','ip')
  26. VALUES ('".$name."','".$surname."','".$hash."','".$email."','".time()."','".time()."'.'".$ip."');");
  27. echo "Konto zostało utworzone pomyślnie !";
  28. }
  29. else
  30. {
  31. echo "Hasła nie są takie same!";
  32. }
  33. }
  34. else
  35. {
  36. echo "Podany login jest już zajęty.";
  37. }


Kod po zmianie. Proszę też o opinię na temat pdo, czy dobrze to ustawione i czy tak samo ustawiać dla dodawania danych do bazy (szczerze przyznam, że tutaj nie wiem jak to dokładnie ustawić).
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%)
-----


Jak PDO to nie mysqli_query.
http://php.net/manual/en/mysqli.error.php tu masz jak odczytać błąd. W PDO przechwytuj wyjątki.

Dla połączenia:
  1. $pdo = new PDO(
  2. 'mysql:host=hostname;dbname=dbname',
  3. 'username',
  4. 'password',
  5. array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
  6. );


--------------------
Go to the top of the page
+Quote Post
Durkane
post
Post #8





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 28.07.2015

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


hm.. mam taki błąd Fatal error: Call to undefined function password_hash(), czyli, że nie obsługuję tej funkcji serwer?

Zmieniłem z pdo na
  1. $query = $mysqli->prepare("SELECT 'email' FROM `uzytkownicy` WHERE `email` = ?");
  2. $query->bind_param('s',$email);
  3. $query->execute();


Bo jeszcze za głupi jestem na kombinowanie z tym pdo biggrin.gif
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%)
-----


Czyli masz archaiczna wersję PHP starszą niż 5.5. Jeśli to local zrób aktualizację, na serwerze sprawdź czy nie ma nowszej.


--------------------
Go to the top of the page
+Quote Post
Durkane
post
Post #10





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 28.07.2015

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


Jest to darmowy host friko.pl, który ma PHP 5.2 ... Chyba przeniosę się na cba.pl tam mają 5.5. Z PDO będę kombinował później popatrzę jakieś przykłady, poradniki i wtedy najwyżej tutaj napiszęsmile.gif Zaraz przeniosę wszystko na cba.pl i zobaczę czy będzie rejestrować czy nie.

Aktualny problem to Fatal error: Call to a member function prepare() on a non-object oraz brak polskich znaków, ustawiam w bazie danych i utf8_polish_ci i general_ci i dalej nie wyświetla polskich znaków :/
Go to the top of the page
+Quote Post
viking
post
Post #11





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

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


Pokaż connect.php i w jaki sposób nawiazujesz połaczenie.


--------------------
Go to the top of the page
+Quote Post
Durkane
post
Post #12





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 28.07.2015

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


Dobra już nie ważne wróciłem do starego sposobu biggrin.gif potem będę kombinował z pdo smile.gif Na razie to czym chce się zająć to rejestracja, która nie działa : / w dalszym ciągu nic nie dodaje do bazy danych.

EDIT: Tam nigdzie nie zdefiniowałem wcześniej $mysqli, więc dlatego taki błąd miałem smile.gif Poczytam później o tym dokładnie.

Ten post edytował Durkane 4.01.2016, 15:03:04
Go to the top of the page
+Quote Post
viking
post
Post #13





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

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


Tu nie ma co kombinować. PDO jest banalne jak pójście do sklepu po piwo. Jak masz to zrobić niech będzie od razu w porządku. Poczytaj mój artykuł ze stopki albo przykład użycia z https://wwwgo.pl/advice/show/3/korzystam_z_...ed._dlaczego%3F

Samym bindowaniem sprawisz że to otwieranie i zamykanie " już połowę błędów usunie. No ale musisz do tego nawiazać wczesniej połączenie wink.gif


--------------------
Go to the top of the page
+Quote Post
Durkane
post
Post #14





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 28.07.2015

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


Łączenie z bazą danych
  1. <?php
  2. $dbh = new PDO('mysql:host=mysql.cba.pl;dbname=spisludnosci_cba_pl',$user,$pass,
  3. array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));
  4. $user="";
  5. $pass="";
  6. ?>

Logowanie
  1. <?php
  2.  
  3. if(!isset($_POST['login']) || !isset($_POST['password']))
  4. {
  5. header('Location: index.php');
  6. exit();
  7. }
  8. require_once "connect.php";
  9. $sql = "SELECT * FROM uzytkownicy WHERE email=? AND haslo=?";
  10. if($dbh->connect_errno!=0)
  11. {
  12. echo "Error: ". $polaczenie->connect_errno;
  13. }
  14. else
  15. {
  16. $login=$_POST['login'];
  17. $password=$_POST['password'];
  18.  
  19. $login=htmlentities($login,ENT_QUOTES, "UTF-8");
  20. $password=htmlentities($password,ENT_QUOTES, "UTF-8");
  21.  
  22. if ($rezultat = @$polaczenie->$sql)
  23. {
  24. $sth=$dbh->prepare($sql);
  25. $sth->bindParam(2,$_POST['email'],$_POST['password'])
  26. $sth->execute();
  27.  
  28. $ilu_userow = $rezultat->num_rows;
  29.  
  30. if($ilu_userow > 0)
  31. {
  32. $_SESSION['logged'] = true;
  33.  
  34. $result = $sth->fetchAll();
  35.  
  36. $_SESSION['id'] = $result['id'];
  37. $_SESSION['name'] = $result['imie'];
  38. $_SESSION['surname'] = $result['nazwisko'];
  39. $_SESSION['email'] = $result['email'];
  40.  
  41. unset($_SESION['blad']);
  42. $rezultat->free_result();
  43. header('Location:index2.php');
  44.  
  45. }
  46. else
  47. {
  48. $_SESSION['blad'] = 1;
  49. header('Location:index.php');
  50. }
  51. }
  52. $polaczenie->close();
  53. }
  54.  
  55.  
  56. ?>


Co zrobiłem tutaj nie tak stosując PDO ? Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [1045] Access denied for user ''@'127.0.0.1' (using password: YES)' in /virtual/spisludnosci.cba.pl/connect.php:3 Stack trace: #0 /virtual/spisludnosci.cba.pl/connect.php(3): PDO->__construct('mysql:host=mysq...', NULL, NULL, Array) #1 /virtual/spisludnosci.cba.pl/zaloguj.php(9): require_once('/virtual/spislu...') #2 {main} thrown in /virtual/spisludnosci.cba.pl/connect.php on line 3

Ten post edytował Durkane 4.01.2016, 16:31:42
Go to the top of the page
+Quote Post
nospor
post
Post #15





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




Nie przekazales $user


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Durkane
post
Post #16





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 28.07.2015

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


Już to sam naprawiłem ;d Teraz mam tylko Call to a member function close() on a non-object i zastanawiam się czy to
  1. $polaczenie->close();

Jest mi teraz potrzebne, czy skasować.
Go to the top of the page
+Quote Post
nospor
post
Post #17





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




Przeciez nie masz juz obiektu $polaczenie


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Durkane
post
Post #18





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 28.07.2015

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


ah no tak teraz mam $dbh tongue.gif A czy w PDO używa się również close do zamknięcia połączenia? Bo mam komunikat Call to undefined method PDO::close()

EDIT: Już sam znalazłem smile.gif Ale dziękuje za pomoc.

Tylko teraz taki problem, że nie loguje mnie tylko wyświetla pustą stronę :/

Ten post edytował Durkane 4.01.2016, 16:47:15
Go to the top of the page
+Quote Post
viking
post
Post #19





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

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


Co to jest:
$rezultat = @$polaczenie->$sql

Poza tym zapomnij o @. Nigdy przenigdy nie używaj w kodzie. Raz na milion może być przydatne ale na pewno nie na tym poziomie jeszcze.


--------------------
Go to the top of the page
+Quote Post
Durkane
post
Post #20





Grupa: Zarejestrowani
Postów: 102
Pomógł: 0
Dołączył: 28.07.2015

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


Teraz jest $rezultat = $dbh->$sql, czyli jeżeli mamy połączenie z bazą danych $dbh to wysyła nam do niej zapytanie zawarte w $sql.

Połączenie mam tak
  1. <?php
  2. $dbh = new PDO('mysql:host=mysql.cba.pl;dbname=spisludnosci_cba_pl','durkane12','*********',
  3. array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));
  4. ?>


A cały kod do logowania wygląda tak :

  1. <?php
  2.  
  3. if(!isset($_POST['login']) || !isset($_POST['password']))
  4. {
  5. header('Location: index.php');
  6. exit();
  7. }
  8. require_once "connect.php";
  9.  
  10. if($dbh->connect_errno!=0)
  11. {
  12. echo "Error: ". $dbh->connect_errno;
  13. }
  14. else
  15. {
  16. $login=$_POST['login'];
  17. $password=$_POST['password'];
  18.  
  19. $login=htmlentities($login,ENT_QUOTES, "UTF-8");
  20. $password=htmlentities($password,ENT_QUOTES, "UTF-8");
  21.  
  22. $sql = "SELECT * FROM uzytkownicy WHERE email=? AND haslo=?";
  23. $sth=$dbh->prepare($sql);
  24. $sth->bindParam(2,$login,$password);
  25. $sth->execute();
  26.  
  27. if ($rezultat = @$dbh->$sql)
  28. {
  29.  
  30.  
  31. $ilu_userow = $rezultat->num_rows;
  32.  
  33. if($ilu_userow > 0)
  34. {
  35. $_SESSION['logged'] = true;
  36.  
  37. $result = $sth->fetchAll();
  38.  
  39. $_SESSION['id'] = $result['id'];
  40. $_SESSION['name'] = $result['imie'];
  41. $_SESSION['surname'] = $result['nazwisko'];
  42. $_SESSION['email'] = $result['email'];
  43.  
  44. unset($_SESION['blad']);
  45. $rezultat->free_result();
  46. header('Location:index2.php');
  47.  
  48. }
  49. else
  50. {
  51. $_SESSION['blad'] = 1;
  52. header('Location:index.php');
  53. }
  54. }
  55. $dbh = null;
  56. }
  57.  
  58.  
  59. ?>


Ten post edytował Durkane 5.01.2016, 11:58:51
Go to the top of the page
+Quote Post

3 Stron V   1 2 3 >
Closed TopicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 22:42