Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Przerobienie logowania
Forum PHP.pl > Forum > Przedszkole
buliyo
Witam znalazłem kiedyś na tym forum taki zgrabny skrypcik do logowania sie na sesjach z userem w mysql..
  1. <?
  2. require_once('./config.php');
  3. if($_SESSION['access'] != 'root'){
  4. @header ("Location:  index.php");
  5. }
  6. function usun($data)
  7. {
  8. GLOBAL $dbc;
  9.  if (ini_get('magic_quotes_gpc'))
  10.  {
  11.      $data = stripslashes($data);
  12.  }
  13. return mysql_real_escape_string($data, $dbc);
  14. }
  15.  if (isset($_POST['submit'])){
  16.  if (empty($_POST['login'])){
  17.      $message .= '<font class="blad">Nie podałeś loginu</font><br />';
  18.      $l = FALSE;}
  19.  else
  20.  {
  21.  $l = usun($_POST['login']);
  22.  }
  23.  if (empty($_POST['haslo']))
  24.  {
  25.  $message .= '<font class="blad">Nie podałeś hasła</font><br />';
  26.  $h = FALSE;
  27.  }
  28.  else
  29.  {
  30.  $h = usun($_POST['haslo']);
  31.  }
  32.  if ( $l && $h )
  33.  {
  34.  $query = "SELECT username, access FROM user WHERE username='$l' AND haslo=password('$h')";
  35.  $result = mysql_query($query);
  36.  $row = mysql_fetch_array ($result, MYSQL_ASSOC);
  37.  if($row)
  38.  {
  39.  $_SESSION['username'] = $row['username'];
  40.  $_SESSION['access'] = $row['access'];
  41.  $_GET['cmd'] = 'ok';
  42.  header ("Location: list.php");  // przekierowuje nas na jaka strone chcemy
  43.  }
  44.  else
  45.  {
  46.  $message .= '<font class="blad">Błędne hasło lub login</font><br />';
  47.  }
  48.  }
  49.  else
  50.  {
  51.  $message .= '<font class="blad">Spróbuj jeszcze raz</font>';
  52.  }
  53. }
  54. ?>
  55. <div align="center">
  56. <? if(isset($message)){
  57. echo $message;
  58. }
  59. ?>
  60. </div>


chciałem go przerobić aby user i haslo bylo na sztywno w kodzie, zrobilem cos takiego:
  1. <?
  2. if($_SESSION['access'] != 'root'){
  3. @header ("Location:  index.php");
  4. }
  5. function usun($data)
  6. {
  7. GLOBAL $dbc;
  8.  if (ini_get('magic_quotes_gpc'))
  9.  {
  10.      $data = stripslashes($data);
  11.  }
  12. return mysql_real_escape_string($data, $dbc);
  13. }
  14.  if (isset($_POST['submit'])){
  15.  if (empty($_POST['login'])){
  16.      $message .= '<font class="blad">Nie podałeś loginu</font><br />';
  17.      $l = FALSE;}
  18.  else
  19.  {
  20.  $l = usun($_POST['login']);
  21.  }
  22.  if (empty($_POST['haslo']))
  23.  {
  24.  $message .= '<font class="blad">Nie podałeś hasła</font><br />';
  25.  $h = FALSE;
  26.  }
  27.  else
  28.  {
  29.  $h = usun($_POST['haslo']);
  30.  }
  31.  {
  32.  $_SESSION['username'] = 'admin';
  33.  $_SESSION['access'] = 'admin';
  34.  $_GET['cmd'] = 'ok';
  35.  header ("Location: tabelki.php");  // przekierowuje nas na jaka strone chcemy
  36.  }
  37.  else
  38.  {
  39.  $message .= '<font class="blad">Błędne hasło lub login</font><br />';
  40.  }
  41.  }
  42.  else
  43.  {
  44.  $message .= '<font class="blad">Spróbuj jeszcze raz</font>';
  45.  }
  46. }
  47. ?>
  48. <div align="center">
  49. <? if(isset($message)){
  50. echo $message;
  51. }
  52. ?>
  53. </div>

ale niestety wywala

Parse error: syntax error, unexpected T_ELSE in /login.php on line 42

czy ogolnie moj zamysl jest dobry tylko mam gdzies blad ze skladnia?
wizard144
Cytat(buliyo @ 9.05.2009, 22:17:36 ) *
Witam znalazłem kiedyś na tym forum taki zgrabny skrypcik do logowania sie na sesjach z userem w mysql..
[php]

else
{
$h = usun($_POST['haslo']);
}
{ /// <<<<<<<<<<<<<<<<<<<<<<<<<<<<< Tu błąd
session_start();
$_SESSION['username'] = 'admin';
$_SESSION['access'] = 'admin';
$_GET['cmd'] = 'ok';
header (\"Location: tabelki.php\"); // przekierowuje nas na jaka strone chcemy
}


po 1. brak warunku if
po 2. ob_start masz 2 razy... po co ?

a co do Twojej ideologii hmmm... przydało by się sprawdzić czy zmienna $_POST['login'], $_POST['haslo'] jest równa czemuś nie uważasz ? =] i wtedy ustawiać zmienne sesyjne dopiero smile.gif

Edit :

To właśnie ten warunek if smile.gif if($_POST['login'] == 'admin' && $_POST['haslo'] == 'admin') i tu masz ten błąd 42 linii smile.gif
buliyo
  1. <?
  2. if($_SESSION['access'] != 'root'){
  3. @header ("Location:  index.php");
  4. }
  5. function usun($data)
  6. {
  7. GLOBAL $dbc;
  8.  if (ini_get('magic_quotes_gpc'))
  9.  {
  10.      $data = stripslashes($data);
  11.  }
  12. return mysql_real_escape_string($data, $dbc);
  13. }
  14.  if (isset($_POST['submit'])){
  15.  if (empty($_POST['login'])){
  16.      $message .= '<font class="blad">Nie podałeś loginu</font><br />';
  17.      $l = FALSE;}
  18.  else
  19.  {
  20.  $l = usun($_POST['login']);
  21.  }
  22.  if (empty($_POST['haslo']))
  23.  {
  24.  $message .= '<font class="blad">Nie podałeś hasła</font><br />';
  25.  $h = FALSE;
  26.  }
  27.  else
  28.  {
  29.  $h = usun($_POST['haslo']);
  30.  }
  31.  if ( $l && $h )
  32.  {
  33.  if($_POST['login'] == 'admin' && $_POST['haslo'] == 'admin')
  34.  {
  35.  $_SESSION['username'] = 'admin';
  36.  $_SESSION['access'] = 'admin';
  37.  $_GET['cmd'] = 'ok';
  38.  header ("Location: tabelki.php");  // przekierowuje nas na jaka strone chcemy
  39.  }
  40.  else
  41.  {
  42.  $message .= '<font class="blad">Błędne hasło lub login</font><br />';
  43.  }
  44.  }
  45.  else
  46.  {
  47.  $message .= '<font class="blad">Spróbuj jeszcze raz</font>';
  48.  }
  49. }
  50. ?>
  51. <div align="center">
  52. <? if(isset($message)){
  53. echo $message;
  54. }
  55. ?>
  56. </div>


Po takiej modyfikacji skryptu, błąd nie wyświetla się ale niestety po wpisaniu hasła i loginu jesteśmy jeszcze raz kierowani na stronę index.php, sesja nie jest otwierana ponieważ ręczne wejście na tabelki.php też zwraca nas na index.php
kwiateusz
rozumiem że w skrypcie ktory kieruje do tego podanego wyżej ustawiasz $_SESSION['access'] na root?
buliyo
  1. <?
  2.  
  3. if($_SESSION['access'] != 'root'){
  4. @header ("Location:  index.php");
  5. }
  6. ?>


no tak mam zabezpieczona strone tabelki.php
o to chodz?

na stronie kierujacej czy lindex.php mam taki formularz:
  1. <FORM ACTION="login.php" METHOD="POST">
  2. <CENTER><div class="moje">login:<BR>
  3. <INPUT TYPE="TEXT" NAME="login" size=10><BR>
  4. hasło:<BR>
  5. <INPUT TYPE="PASSWORD" NAME="haslo" size=10><BR>
  6. <INPUT TYPE="SUBMIT" name="submit" VALUE="Akceptuj"></div></CENTER>
  7. </FORM>
kwiateusz
na stronie kierujacej tez musisz mieć session_start(), a potem $_SESSION['access'] = 'root' bo niby skąd taka zmienna mas się objawić? nie ma to skrypt z ifa zwraca true i jestes przekierowywane na index.php
buliyo
Po wrzuceniu na index.php
  1. <?
  2.  
  3. if($_SESSION['access'] != 'root'){
  4. @header ("Location:  index.php");
  5. }
  6. //phpinfo();
  7. ?>

Pętla przekierowań

Firefox wykrył, że serwer przekierowuje żądanie tego zasobu w sposób uniemożliwiający jego ukończenie.

Przeglądarka przerwała próby pobrania żądanego elementu. Witryna przekierowuje żądanie w sposób, który uniemożliwia jego dokończenie.

* Czy ciasteczka zostały wyłączone lub zablokowane dla tej witryny?
* UWAGA: Jeśli włączenie obsługi ciasteczek dla tej witryny nie rozwiązuje problemu, najprawdopodobniej jest to problem w konfiguracji serwera, a nie oprogramowania na Twoim komputerze.
kwiateusz
Ty zacznij czytac ze zrozumieniem, czy ja gdzieś napisałem że masz całego ifa przekleić? nie... więc czytaj jeszcze raz
buliyo
Cytat(kwiateusz @ 10.05.2009, 09:29:37 ) *
rozumiem że w skrypcie ktory kieruje do tego podanego wyżej ustawiasz $_SESSION['access'] na root?


jeszcze raz...
mam obecnie cos takiego:
index.php
  1. <?
  2. $_SESSION['access'] = 'root';
  3. ?>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  5. <html><head>
  6.  
  7. <TITLE>logowanie</TITLE>
  8. <META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=iso-8859-2">
  9. <link rel="stylesheet" type="text/css" href="styl.css">
  10. </HEAD>
  11. <BODY BGCOLOR="#434242">
  12. <FORM ACTION="login.php" METHOD="POST">
  13.  <CENTER><div class="moje">login:<BR>
  14.  <INPUT TYPE="TEXT" NAME="login" size=10><BR>
  15.  hasło:<BR>
  16.  <INPUT TYPE="PASSWORD" NAME="haslo" size=10><BR>
  17.  <INPUT TYPE="SUBMIT" name="submit" VALUE="Akceptuj"></div></CENTER>
  18.  </FORM>
  19.  
  20. </BODY>
  21. </HTML>

login.php
  1. <?
  2. if($_SESSION['access'] != 'root'){
  3. @header ("Location:  index.php");
  4. }
  5. function usun($data)
  6. {
  7. GLOBAL $dbc;
  8.  if (ini_get('magic_quotes_gpc'))
  9.  {
  10.      $data = stripslashes($data);
  11.  }
  12. }
  13.  if (isset($_POST['submit'])){
  14.  if (empty($_POST['login'])){
  15.      $message .= '<font class="blad">Nie podałeś loginu</font><br />';
  16.      $l = FALSE;}
  17.  else
  18.  {
  19.  $l = usun($_POST['login']);
  20.  }
  21.  if (empty($_POST['haslo']))
  22.  {
  23.  $message .= '<font class="blad">Nie podałeś hasła</font><br />';
  24.  $h = FALSE;
  25.  }
  26.  else
  27.  {
  28.  $h = usun($_POST['haslo']);
  29.  }
  30.  if ( $l && $h )
  31.  {
  32.  if($_POST['login'] == 'admin' && $_POST['haslo'] == 'admin')
  33.  {
  34.  $_SESSION['username'] = 'admin';
  35.  $_SESSION['access'] = 'admin';
  36.  $_GET['cmd'] = 'ok';
  37.  header ("Location: tabelki.php");  // przekierowuje nas na jaka strone chcemy
  38.  }
  39.  else
  40.  {
  41.  $message .= '<font class="blad">Błędne hasło lub login</font><br />';
  42.  }
  43.  }
  44.  else
  45.  {
  46.  $message .= '<font class="blad">Spróbuj jeszcze raz</font>';
  47.  }
  48. }
  49. ?>
  50. <div align="center">
  51. <? if(isset($message)){
  52. echo $message;
  53. }
  54. ?>
  55. </div>

tabelki.php
  1. <?
  2.  
  3. if($_SESSION['access'] != 'root'){
  4. @header ("Location:  index.php");
  5. }
  6. ?>
  7. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  8. <html><head>
  9.  
  10. <TITLE>tabelki</TITLE>
  11. <META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=iso-8859-2">
  12. <link rel="stylesheet" type="text/css" href="styl.css">
  13. </HEAD>
  14. <BODY BGCOLOR="#434242">
  15. działa!!
  16. </BODY>
  17. </HTML>

po logowaniu przy uzyciu admin/admin otrzymuje
Spróbuj jeszcze raz

sad.gif
wizard144
  1. <?php
  2. if($_SESSION['access'] != 'root'){
  3. ?>


  1. <?php
  2. if($_POST['login'] == 'admin' && $_POST['haslo'] == 'admin')
  3. {
  4. $_SESSION['username'] = 'admin';
  5. $_SESSION['access'] = 'admin';
  6. $_GET['cmd'] = 'ok';
  7. header ("Location: tabelki.php");  // przekierowuje nas na jaka strone chcemy
  8. }
  9. ?>



1. Hasło - > admin Login -> admin | tak ?
2. Skoro definiujesz że przy dobrym podaniu hasła zmienna $_SESSION['acces'] = 'admin'; to przy wejściu do tabelek nie możesz mieć if'a takiego jak masz...

powinno być

  1. <?php
  2. if($_SESSION['acces'] != 'admin')
  3. {
  4. @header ("Location:  index.php");
  5. }
  6. ?>


Popraw to i powinno działać

EDIT

  1. <?php
  2. if (empty($_POST['login'])){
  3.     $message .= '<font class="blad">Nie podałeś loginu</font><br />';
  4.     $l = FALSE;}
  5. /* else
  6.  {
  7.  $l = usun($_POST['login']);
  8.  }*/
  9. if (empty($_POST['haslo']))
  10. {
  11. $message .= '<font class="blad">Nie podałeś hasła</font><br />';
  12. $h = FALSE;
  13. }
  14. /* else
  15.  {
  16.  $h = usun($_POST['haslo']);
  17.  }*/
  18. ?>


zakomentuj to co ja, przecież po podaniu loginu i hasła jest ono usuwane z tego co widzę
kwiateusz
a zobacz do czego służy opcja usun? :] do usuwania s;ashy nie do usuwania hasła
2. a skad wystrzasnąłes $_SESSION['access'] = admin? to nie ma nijakiego związku z $_POST['login'], w pliku index ustala że root i sie zgadza nie wywołuje się pierwszy redirect, wiec o co Ci chodzi wizard?
wizard144
Racja mój błąd. Ale w pliku "tabelki.php" jest redirect z warunkiem

  1. <?php
  2. if($_SESSION['acces'] != 'root')
  3. ?>


A podczas logowania sam ustala że

  1. <?php
  2. $_SESSION['acces'] = 'admin'
  3. ?>


Nie ?
kwiateusz
a rzeczywiście, my fault kijowy ten skrypt że się tak wyraże smile.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.