Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Problem z rejestracją konta
NeXt2k20
post 24.08.2021, 14:49:19
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 16.02.2020

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


Cześć, chciałem się trochę że tak to ujmę 'Zabawić' z php
i chciałem skorzystać z gotowych funkcji uwierzytelniających
Logowanie i rejestracja.
Chciałem użyć tego: https://github.com/dynamiccodePL/PHP-System-Uwierzytelniania
Lecz jest problem z rejestracją, otrzymuje błąd 'Nie udało się zarejestrować.'
I nie wiem dlaczego tak się dzieje.Dane do db są na 100% poprawne

Localhost | PHP - 7.4.9

Ten post edytował NeXt2k20 24.08.2021, 14:50:33
Go to the top of the page
+Quote Post
viking
post 24.08.2021, 16:10:21
Post #2





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

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


Zajrzyj w logi swojego serwera. Zmieniłeś hasło i login?


--------------------
Go to the top of the page
+Quote Post
NeXt2k20
post 24.08.2021, 16:57:25
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 16.02.2020

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


A jak mogę zobaczyć logi na serwerze lokalnym ?
Tak wyglada połączenie bazy danych w pliku set-db-connection.php

  1. <?php
  2.  
  3. $dbh = new PDO('mysql:host=localhost;dbname=test', 'root', 'haslo');


db name - test
name - root
passwor - haslo

Więc wszystko się zgadza
Go to the top of the page
+Quote Post
nospor
post 24.08.2021, 17:05:08
Post #4





Grupa: Moderatorzy
Postów: 36 441
Pomógł: 6290
Dołączył: 27.12.2004




Zamiast nic nie mowiacego
echo '<p>Nie udało się zarejestrować.</p>';

wyswietla tam blad jaki zwraca ci PDO a wszystko bedzie jasne

https://www.php.net/manual/en/pdo.errorinfo.php

ps: przenosze na przedszkole


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

"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
NeXt2k20
post 25.08.2021, 11:01:16
Post #5





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 16.02.2020

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


Wszystko już działa

Poprawiona linia 52 w class.user.php

  1. $sth = $this->dbh->prepare("INSERT INTO users (id, registered_timestamp, username, email, password, ip) VALUES(null, CURRENT_TIMESTAMP(), :username, :email, :password, :ip)");


oraz set-db-connection.php

  1. $host = 'localhost';
  2. $port = '3306';
  3. $user = 'root';
  4. $pass = 'haslo';
  5. $dbname = 'test';
  6.  
  7. try{
  8. $dbh = new PDO('mysql:host='.$host.';dbname='.$dbname.';port='.$port, $user, $pass );
  9. $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  10. $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
  11.  
  12. }catch(PDOException $e){
  13. echo 'Połączenie nie mogło zostać utworzone.<br />';
  14. }


I zmieniono strukture tabeli

  1. CREATE TABLE IF NOT EXISTS `users` (
  2. `id` int(10) NOT NULL AUTO_INCREMENT,
  3. `registered_timestamp` varchar(50) DEFAULT NULL,
  4. `username` varchar(30) NOT NULL,
  5. `email` varchar(50) NOT NULL,
  6. `password` varchar(255) NOT NULL,
  7. `ip` varchar(100) NOT NULL,
  8. PRIMARY KEY (`id`)
  9. ) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;


Wszystko działa i dziękuje za pomoc
Go to the top of the page
+Quote Post
viking
post 25.08.2021, 15:31:48
Post #6





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

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


`registered_timestamp` varchar(50) tutaj jakiś typ daty powinien być np datetime. Nie ma na poziomie bazy sprawdzania unikalności loginu więc można kilka identycznych kont założyć (zmieniając również wielkość znaków). Przy insert nie potrzebujesz null dla kolumny auto increment.


--------------------
Go to the top of the page
+Quote Post
NeXt2k20
post 25.08.2021, 18:42:12
Post #7





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 16.02.2020

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


Typ varchar zmieniłem na datetime i wszystko, okay
A co do, "Przy insert nie potrzebujesz null dla kolumny auto increment."
To jest to koniecznie ponieważ, gdy usunę null to otrzymuje błąd.

Fatal error: Uncaught PDOException: SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row 1 in C:\wamp64\www\class.user.php on line 52
A jeśli wstawie same ' ', otrzymuje:
Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'id' at row 1 in C:\wamp64\www\class.user.php on line 59
A przy użyciu null, wszystko działa.
Go to the top of the page
+Quote Post
viking
post 25.08.2021, 19:02:00
Post #8





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

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


Oczywiście, lista kolumn musi się zgadzać. Dlatego id też możesz usunąć, wstawi się samo z automatu.


--------------------
Go to the top of the page
+Quote Post
trueblue
post 25.08.2021, 19:07:24
Post #9





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

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


Na registered_timestamp ustaw typ TIMESTAMP i pomiń to pole przy INSERT.


--------------------
Go to the top of the page
+Quote Post
NeXt2k20
post 26.08.2021, 14:15:18
Post #10





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 16.02.2020

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


INSERT wygląda teraz tak:
  1. $sth = $this->dbh->prepare("INSERT INTO users ( username, email, password, ip) VALUES( :username, :email, :password, :ip)");


A struktura db tak:
  1. --
  2. -- Struktura tabeli dla tabeli `users`
  3. --
  4.  
  5. DROP TABLE IF EXISTS `users`;
  6. CREATE TABLE IF NOT EXISTS `users` (
  7. `id` int(10) NOT NULL AUTO_INCREMENT,
  8. `registered_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  9. `username` varchar(30) NOT NULL,
  10. `email` varchar(50) NOT NULL,
  11. `password` varchar(255) NOT NULL,
  12. `ip` varchar(100) NOT NULL,
  13. PRIMARY KEY (`id`)
  14. ) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
  15.  


Czy teraz wszystko jest tak jak powinno ?
Go to the top of the page
+Quote Post
nospor
post 26.08.2021, 15:54:08
Post #11





Grupa: Moderatorzy
Postów: 36 441
Pomógł: 6290
Dołączył: 27.12.2004




email moze miec wiecej niz 50 znakow
zas IP chyba nie ma 100 znakow

ot taka drobnostka by sie do czegos przyczepic wink.gif


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

"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
viking
post 26.08.2021, 17:41:14
Post #12





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

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


Tak samo hash hasła też nie będzie miał 255 znaków. Zarejestruj 2 konta na ten sam email ale różna wielkość znaków.


--------------------
Go to the top of the page
+Quote Post
NeXt2k20
post 27.08.2021, 10:35:58
Post #13





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 16.02.2020

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


A więc tak, w google wyczytałem że email może zawierać 255 znaków
więc ustawiłęm wartość na 255 zaś o ip wyczytałem że idealna wartość
to 15 i będzie okay, tak też zrobiłem. Każdy hash zawiera 60 znaków więc
ustawiłem varchar(60). A jeśli chodzi o "Zarejestruj 2 konta na ten sam email ale różna wielkość znaków."
Jest to nie możliwe tak samo jest w przypadku loginu.

Struktura tabeli
  1. CREATE TABLE IF NOT EXISTS `users` (
  2. `id` int(10) NOT NULL AUTO_INCREMENT,
  3. `registered_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  4. `username` varchar(30) NOT NULL,
  5. `email` varchar(255) NOT NULL,
  6. `password` varchar(60) NOT NULL,
  7. `ip` varchar(15) NOT NULL,
  8. PRIMARY KEY (`id`)
  9. ) ENGINE=MyISAM AUTO_INCREMENT=21 DEFAULT CHARSET=utf8;
Go to the top of the page
+Quote Post
nospor
post 27.08.2021, 11:05:01
Post #14





Grupa: Moderatorzy
Postów: 36 441
Pomógł: 6290
Dołączył: 27.12.2004




Cytat
Tak samo hash hasła też nie będzie miał 255 znaków

Akurat tutaj niekoniecznie. Ok, teraz nie bedzie mial, ale moze sie zmienic. On uzywa DEFAULT dla hasha i w manualu zalecaja by w takim przypadku trzymac wielkosc 255 poniewaz DEFAULT moze sie zmienic. Temu nie lubie nigdy dawac DEFAULT wink.gif


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

"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
viking
post 27.08.2021, 16:08:35
Post #15





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

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


Jeśli się zmieni to długość hasha będzie najmniejszym problemem.


--------------------
Go to the top of the page
+Quote Post
NeXt2k20
post 28.08.2021, 05:37:32
Post #16





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 16.02.2020

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


Na chwile obecną zostane przy PASSWORD_DEFAULT i chciał bym wszystki podziękować za pomoc
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: 16.04.2024 - 06:48