Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]problem z logowaniem
Forum PHP.pl > Forum > Przedszkole
Remes
witam mam dziwny problem z logowaniem... zależnie od ściezki gdzie mam być zaprowadzony po zalogowaniu jestem albo wyrzucany albo loguje sie nawet na błednym haśle...

skrypt:

index.php
  1. <?php
  2.  
  3. if (!isset($_SESSION['kontrola_sesji'])){
  4.    $_SESSION['kontrola_sesji'] = true;
  5.    $_SESSION['adres_ip'] = $_SERVER['REMOTE_ADDR'];
  6. }
  7. if($_SESSION['adres_ip'] !== $_SERVER['REMOTE_ADDR']){
  8.    $info = "Błąd: Próba przejęcia sesji!";
  9.    exit;
  10. }
  11.  
  12. include('users.php');
  13.  
  14. $login = $_POST['login'];
  15. $haslo = $_POST['haslo'];
  16.  
  17. $haslo = sha1($haslo);
  18. foreach($uzytkownicy as $id => $dane) {
  19.    if($dane['login'] == $login && $dane['haslo'] == $haslo) {
  20.        $_SESSION['uzytkownik'] = $id;
  21.    }
  22. }
  23.  
  24. $info = "";
  25.  
  26. if(isset($_SESSION['uzytkownik'])) {
  27.    header ('Location: panel.php');
  28. } else {
  29.    if(isset($id) && !empty( $_POST['login'] ) && !empty( $_POST['haslo'] )) {
  30.        $info = "Podałeś zły login lub hasło!";
  31.    }
  32. ?>
  33.  
  34. <?php
  35.  
  36. function formularz()
  37. {
  38.         echo '<FORM ACTION="index.php" METHOD="post">
  39.                     Wpisz login i hasło<br />
  40.                     Login: <INPUT TYPE="tekst" NAME="log"><br />
  41.                     Hasło: <INPUT TYPE="tekst" NAME="has"><br />
  42.                     <input type="submit" value="zaloguj">
  43.              </FORM>';
  44. }
  45. function sprawdz($l, $h, $login, $haslo)
  46. {
  47.         if ($l == $login && md5($h) == $haslo){
  48.            return TRUE;
  49.         }
  50.         else return FALSE;
  51. }
  52.  
  53.  
  54. // -- MAIN --
  55.  
  56. $l = $_POST['log'];
  57. $h = $_POST['has'];
  58.  
  59. if (sprawdz($l, $h, $login, $haslo)){
  60.  
  61.   // -- obsługa sesji --
  62.  
  63.   if (!isset($_SESSION['id'])){
  64.      $_SESSION['id'] = $login;
  65.      header("Location: panel.php" . SID);
  66.   }
  67.  
  68. }
  69. else if ($l == TRUE || $h == TRUE){
  70.     echo('Dane niepoprawne - spróbuj jeszcze raz<br>');
  71.     formularz();
  72. }
  73. else formularz();
  74.  
  75. ?>
  76.  
  77. <?php
  78. }
  79. ?>


panel.php
  1. <?php
  2.  
  3. if(isset($_SESSION['uzytkownik'])) {
  4. ?>
  5.  
  6. strona widziana po zalogowaniu
  7.  
  8. <?php
  9. } else {
  10.    header ('Location: index.php');
  11. }
  12. ?>

przy tym ustawieniu zawsze wyskakuje mi błąd logowania - złe hasło...

no i users.php:
  1. <?php
  2. $uzytkownicy = array(1 =>
  3.     array('login' => 'admin', '12345' => sha1('u1')),
  4.     array('login' => 'user2', 'haslo' => sha1('u2'))
  5. );
  6. ?>
-gox-
Eh, nie rozwodzac sie nad innymi bledami, przejde od razu do sedna, blad masz tutaj:

  1. <?php
  2. include('users.php');
  3.  
  4. $login = $_POST['login'];
  5. $haslo = $_POST['haslo'];
  6.  
  7. $haslo = sha1($haslo);
  8. foreach($uzytkownicy as $id => $dane) {
  9.   if($dane['login'] == $login && $dane['haslo'] == $haslo) {
  10.       $_SESSION['uzytkownik'] = $id;
  11.   }
  12. }
  13. ?>


Powinno byc:
  1. <?php
  2. include('users.php');
  3.  
  4. $haslo = sha1($haslo);
  5. foreach ( $uzytkownicy as $db_login => $db_haslo) {
  6.   if ( $db_login === $_POST['login'] AND $db_haslo === $_POST['haslo'])
  7.       $_SESSION['uzytkownik'] = $db_login;
  8. }
  9. ?>
Remes
teraz to wogóle mi pokazuje błąd wczytywania strony :/

Cytat
Firefox wykrył, że serwer przekierowuje żądanie tego zasobu w sposób uniemożliwiający jego ukończenie.
parzygnat
Z tego co widzę to wywołujesz funkcję header() po tym jak przesłałeś juz kod HTML do przeglądarki. Zobacz:
Cytat
<?php
session_start();

if(isset($_SESSION['uzytkownik'])) {
?>

strona widziana po zalogowaniu

<?php
} else {
header ('Location: index.php');
}
?>

a zrób tak:
  1. <?php
  2.  
  3. if(isset($_SESSION['uzytkownik'])) {
  4. strona widziana po zalogowaniu
  5. }
  6. else {
  7.   header ('Location: index.php');
  8. }
  9. ?>

Twój sposób buforowania jest dziwny bo mi się wydaje że mimo takiego zapisu jak zastosowałeś to i tak to zostanie przesłane do przeglądarki
Remes
nadal wyskakuje "Dane niepoprawne - spróbuj jeszcze raz" :/

pominąłem coś w jakimś pliku?
parzygnat
To
  1. <?php
  2. function sprawdz($l, $h, $login, $haslo)
  3. {
  4.        if ($l == $login && md5($h) == $haslo){
  5.           return TRUE;
  6.        }
  7.        else return FALSE;
  8. }
  9. ?>

spróbuj tak:
  1. <?php
  2. function sprawdz($l, $h, $login, $haslo)
  3. {
  4.        if ($l === $login && md5($h) === $haslo){
  5.           return TRUE;
  6.        }
  7.        else return FALSE;
  8. }
  9. ?>

czyli dodaj jeszcze porownanie typow '==='
Remes
nadal nic sad.gif
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.