Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Problem z logowaniem poprzez session
Forum PHP.pl > Forum > Przedszkole
przemo191
Witam mam taki problem, zrobiłem skrypt logowania, który sprawdza poprawność pola login i hasło z bazą danych. Kiedy wpisujemy złe dane do formularza logowania skrypt zachowuje się jak należy, natomiast kiedy wpiszemy dobre dane to wywala błąd:
Notice: Undefined index: test in C:\wamp\www\depis\baza_napraw\loguj.php on line 42

Kod php to:
  1. <?php
  2.  
  3. $user1 = $_POST['user'];
  4. $pass1 = $_POST['password'];
  5. $typ_bazy = $_POST['typ_bazy'];
  6.  
  7. $user2 = ($user1);
  8. $pass2 = md5($pass1);
  9.  
  10. include("../db_pass.php");
  11. mysql_connect($host,$username,$password);
  12. mysql_select_db($database) or die("Nie odnaleziono bazy danych");
  13. $query="SELECT * FROM account WHERE USER='$user2' and TYP_BAZY='$typ_bazy' and PASSWORD='$pass2'";
  14. $result=mysql_query($query);
  15. $num=mysql_numrows($result);
  16.  
  17. $i=0;
  18. while ($i < $num) {
  19. $user3 = mysql_result($result,$i,"USER");
  20. $pass3 = mysql_result($result,$i,"PASSWORD");
  21. $i++;
  22. }
  23.  
  24. if($pass2 = $pass3){
  25. $pass4 = "$pass2";
  26. }else{
  27. header('Location: index.html');
  28. }
  29.  
  30. if($user2 = $user3){
  31. $user4 = "$user2";
  32. }else{
  33. header('Location: index.html');
  34. }
  35.  
  36.  
  37. function loguj($user, $password){
  38. $users['$user3'] = '$pass3';
  39.  
  40. if($users[$user] == $password && $password != "") {
  41. $_SESSION['is_logged'] = true;
  42. return true;
  43. }
  44. else {
  45. return false;
  46. }
  47. }
  48.  
  49. if(loguj("$user4", "$pass4")){
  50. if(!isset($_SESSION['redirect_to'])) $to = 'startowa.php';
  51. else {
  52. $to = $_SESSION['redirect_to'];
  53. }
  54. header('Location: '.$to);
  55. }
  56. else {
  57. header('Location: index.html');
  58. }
  59. ?>


Nie wiem gdzie jest błąd.
Rid
Niech Pan spróbuje tak:
  1. $users['$user3'] = '$pass3'; zamienić
  2. na
  3. $users['$user3'] = $pass3;


  1. $_SESSION['is_logged'] = true;
  2. zamienić na:
  3. $_SESSION['is_logged'] = "true";
,nie wiem czy to pomoże,ale spróbować można.
!*!
Sprawdzanie loginu i hasła jest co najmniej dziwne i to:

  1. if($users[$user] == $password && $password != "")


CZyli mogę wpisać " " (x2) i przejdzie? Poza tym user jest porównaniem do hasła?
przemo191
Cytat(!*! @ 29.08.2011, 17:52:30 ) *
Sprawdzanie loginu i hasła jest co najmniej dziwne i to:

  1. if($users[$user] == $password && $password != "")


CZyli mogę wpisać " " (x2) i przejdzie? Poza tym user jest porównaniem do hasła?


Właśnie nie wiem jak to zrobić inaczej ;(

@Rid - niestety nie działa
!*!
Podstawy. Poczytaj o isset, empty, trim na php.net i poszukaj jakiegoś gotowego rozwiązania jeśli chodzi o logowanie, bo to co podałeś wyżej jest... po co ta pętla? i w ogóle dużo tych $passX.
przemo191
Nie mówię, że ten skrypt ma sens wink.gif Tylko że nie działa i nie wiem czemu. Czyżby przez to że właśnie to jest bez sensu?
Rid
  1. if($pass2 = $pass3){
  2. $pass4 = "$pass2";
  3. }else{
  4. header('Location: index.html');
  5. }
  6.  
  7. if($user2 = $user3){
  8. $user4 = "$user2";
  9. }else{
  10. header('Location: index.html');
  11. }


ni wiem czy dobrze wnioskuję ,ale jeśli $pass2=$pass3 to
$pass4 przyrównaj napis $pass2.Nie wiem czy dobrze wnioskuję ,ja tam przyzwyczaiłem się już do rzutowania typów danych w c#-ciężko mi już powiedzieć czy to napis czy zmienna. blink.gif
przemo191
$pass2 to jest to co użytkownik wpiszę do formularza i jest to kodowane przez md5
$pass3 jest to hasło w postaci md5 wyciągnięte z bazy danych.
!*!
Tak w skrócie... Robisz odwołanie do bazy, potem nie wiadomo po co pętle, następnie sprawdzasz hasło z hasłem, usera z userem, żeby później sprawdzić usera z hasłem. To już brzmi kiepsko wink.gif

  1. $sql="SELECT login,password FROM user WHERE login='$myusername' and password='$mypassword'";
  2. $result=mysql_query($sql);
  3.  
  4. $count=mysql_num_rows($result);
  5.  
  6. if($count==1){
  7. echo 'zalogowany porpawnie';
  8. }
  9. else {
  10. echo 'zle haslo lub login';
  11. }


Przed wysłaniem sprawdź czy w ogóle istnieją.
przemo191
Coś mi się wydaje że sam tego nie naprawię. Mógłbym prosić o jakiś link lub lekturkę z systemem logowania połączoną z bazą danych.
!*!
Google na forum też już było sporo tematów i rozwiązań.
nospor
Cytat
Coś mi się wydaje że sam tego nie naprawię.
Przecież w swoim przedostatnim poście !*! podał ci rozwiązanie. To jest cały kod. Jedyne co musisz zrobić to wstawić swoje dane w ten kod.

Cytat
$_SESSION['is_logged'] = true;
zamienić na:
$_SESSION['is_logged'] = "true";
Nie za bardzo rozumiem.... niby w czym ma pomóc zamiana TRUE (wartość logiczna, mówiąca czy coś jest prawdą czy nie) na tekst 'TRUE'?

@przemo191 zapoznaj się dodatkowo z podstawami php, bo leżysz na tym totalnie.
if($user2 = $user3){
To nie jest porównanie.
To jest porównanie:
if($user2 == $user3){

'$pass3' - to jest tekst $pass3
$pass3 - to jest zmienna $pass3

Nie strzelaj kodem na chybił trafił tylko patrz co piszesz.
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.