Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Problem z logowaniem
Forum PHP.pl > Forum > Przedszkole
wojtek111
Witam, ucze sie obecnie php i mysql. Probuje obecnie stworzyc strone z rejestracja i logowaniem. Ogolnie rejestracja dziala jak najbardziej ale mam problem z logowaniem. Mimo wpisywania dobrych danych i tak wyskakuje ze wpisalem zle haslo. Czy popelnilem jakis blad tutaj?

  1. $con = new mysqli("localhost","nazwa","haslo","bazadanych");
  2. if (mysqli_connect_errno())
  3. {
  4. echo "Nie udalo sie polaczyc: " . mysqli_connect_error();
  5. }
  6.  
  7. if(isset($_POST['username'])){
  8.  
  9. $uname=$_POST['username'];
  10. $password=$_POST['password'];
  11.  
  12. $sql="select * from users where username='".$uname."'AND password='".$password."'limit 1 ";
  13.  
  14. $result=mysqli_query($con,$sql);
  15.  
  16. if(mysqli_num_rows($result)==1){
  17. echo "Dobre haslo";
  18. exit();
  19. }
  20. else{
  21. echo "Zle haslo";
  22. exit();
  23. }
  24.  
  25. }
  26. ?>
Neutral
Powinno być OK. Jakie typy masz w bazie danych dla tych dwóch kolumn? Powinny być ustawione na typy tekstowe (string), bo używasz znaków apostrof, cudzysłów dla wartości.

Sprawdź, co siedzi w zmiennej $result, napisz tak

  1. var_dump($result);


i wklej tutaj co ta instrukcja zwróciła.
wojtek111
Cytat(Neutral @ 30.06.2019, 17:54:29 ) *
Powinno być OK. Jakie typy masz w bazie danych dla tych dwóch kolumn? Powinny być ustawione na typy tekstowe (string), bo używasz znaków apostrof, cudzysłów dla wartości.

Sprawdź, co siedzi w zmiennej $result, napisz tak

  1. var_dump($result);


i wklej tutaj co ta instrukcja zwróciła.


Wyskakuje cos takiego:

object(mysqli_result)#2 (5) { ["current_field"]=> int(0) ["field_count"]=> int(5) ["lengths"]=> NULL ["num_rows"]=> int(0) ["type"]=> int(0) }

typy to varchar(50)
Neutral
Musisz podawać nieprawidłowe dane. Może masz dwie tabele, czy coś i nie odwołujesz się do tej co trzeba? A może podajesz za długi login i/lub hasło ponad 50 znaków, które zadeklarowałeś jako typ varchar(50)?

Cytat
object(mysqli_result)#2 (5) { ["current_field"]=> int(0) ["field_count"]=> int(5) ["lengths"]=> NULL ["num_rows"]=> int(0) ["type"]=> int(0) }


Błędny login i/lub hasło, ponieważ num_rows zwróciło zero (0).

Napisz tak:

  1. // ...
  2. $uname=$_POST['username'];
  3. $password=$_POST['password'];
  4.  
  5. echo "<pre>";
  6. var_dump($uname);
  7. var_dump($password);
  8. echo "</pre>";
  9.  
  10. $uname = "x";
  11. $password = "y";
  12. // ...


Za x i y podstaw swoje dane, żeby móc się zalogować.

Popraw warunek if'a na;

  1. if(isset($_POST['username']) && isset($_POST['password'])){
  2. // ...
wojtek111
Cytat(Neutral @ 30.06.2019, 19:22:19 ) *
Musisz podawać nieprawidłowe dane. Może masz dwie tabele, czy coś i nie odwołujesz się do tej co trzeba? A może podajesz za długi login i/lub hasło ponad 50 znaków, które zadeklarowałeś jako typ varchar(50)?



Błędny login i/lub hasło, ponieważ num_rows zwróciło zero (0).

Napisz tak:

  1. // ...
  2. $uname=$_POST['username'];
  3. $password=$_POST['password'];
  4.  
  5. echo "<pre>";
  6. var_dump($uname);
  7. var_dump($password);
  8. echo "</pre>";
  9.  
  10. $uname = "x";
  11. $password = "y";
  12. // ...


Za x i y podstaw swoje dane, żeby móc się zalogować.

Popraw warunek if'a na;

  1. if(isset($_POST['username']) && isset($_POST['password'])){
  2. // ...


Wpisuje poprawne dane. Uzylem loginu test i hasla test. Sprawdzalem juz chyba milion razy i nic nie dziala, Jesli przypisze $username="test" i $password="test" to tez nie dziala.

Mam trzy tabele w bazie danych ale uzywam poprawnej o nazwie "users"

var_dump zwraca tak:

string(4) "test"
string(4) "test"
Neutral
Utwórz nową tabelę, np. taką:
Kod
+----+-----------+
| id | nme       |
+----+-----------+
|  1 | yellow    |
|  2 | green     |
|  3 | orange    |
|  4 | white     |
|  5 | darkgreen |
|  6 | orange    |
|  7 | grey      |
|  8 | orange    |
|  9 | orange    |
| 10 | orange    |
| 11 | orange    |
| 12 | orange    |
| 13 | orange    |
| 14 | orange    |
| 15 | orange    |
| 16 | orange    |
| 17 | grey      |
| 18 | grey      |
| 19 | white     |
| 20 | white     |
| 21 | white     |
| 22 | white     |
| 23 | grey      |
+----+-----------+


  1. CREATE TABLE `hello` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `nme` varchar(20) DEFAULT NULL,
  4. PRIMARY KEY (`id`)
  5. ) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci


I wpisz w user np. 19 i w password white.
viking
Sprawdzałeś czy w bazie te dane na pewno są zapisane?
Dodatkowo kilka uwag.
1. new mysqli("localhost","nazwa","haslo","bazadanych"); Tworzysz nowy obiekt. Dlaczego potem przeskakujesz na styl proceduralny?
2. Wyjątki. Poczytaj jak łapać zamiast ifować błędy.
3. Binduj parametry zamiast przekazywać bezpośrednio - otwierasz drogę na ataki sql injection.
4. Hasło przechowuj jako password_hash i sprawdzaj password_verify.
wojtek111
Cytat(Neutral @ 30.06.2019, 20:03:51 ) *
Utwórz nową tabelę, np. taką:
Kod
+----+-----------+
| id | nme       |
+----+-----------+
|  1 | yellow    |
|  2 | green     |
|  3 | orange    |
|  4 | white     |
|  5 | darkgreen |
|  6 | orange    |
|  7 | grey      |
|  8 | orange    |
|  9 | orange    |
| 10 | orange    |
| 11 | orange    |
| 12 | orange    |
| 13 | orange    |
| 14 | orange    |
| 15 | orange    |
| 16 | orange    |
| 17 | grey      |
| 18 | grey      |
| 19 | white     |
| 20 | white     |
| 21 | white     |
| 22 | white     |
| 23 | grey      |
+----+-----------+


  1. CREATE TABLE `hello` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `nme` varchar(20) DEFAULT NULL,
  4. PRIMARY KEY (`id`)
  5. ) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci


I wpisz w user np. 19 i w password white.


to samo sie dzieje sad.gif Nie mam pojecia co jest nie tak juz
Neutral
Napisz może bez żadnych warunków, żeby pokazała Ci się cała tabela wyciągnięta z bazy, czyli tak jak ja poniżej.

  1. <body style="background: darkolivegreen;">
  2. <pre>

  1. <?php
  2. $con = new mysqli("localhost","root","hello","x");
  3.  
  4. $query = "SELECT * FROM `hello`";
  5. $a_query = $con->query($query);
  6.  
  7. while($result = $a_query->fetch_assoc()) {
  8. var_dump($result['id']);
  9. var_dump($result['nme']);
  10. }
  11. ?>

  1. </pre>
  2. </body>


Możliwe, że jakieś niewidzialne znaki się doklejają lub jakieś kodowanie przeszkadza. Ewentualnie ustawienia w MySQL są skopane.
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.