Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Skrypt logowania - problem
Forum PHP.pl > Forum > Przedszkole
kulpek
Witam probuje stworzyc cos w stylu skryptu logowania... napisalem juz caly kod ale mimo to nie dziala on tak jak powinien. Oto fragment kodu ktory nie funkcjonuje jak nalezy:

  1. <?php
  2. if ($u && $p) { // jesli nie wystapily problemy
  3. // wysyla zapytania do bazy danych
  4. $query = "SELECT user_id, username FROM users WHERE username='$u' AND password=PASSWORD('$p')";
  5. $result = @mysql_query ($query);
  6. $row = mysql_fetch_array ($result, MYSQL_NUM);
  7. if ($row) { // w bazie znaleziono szukane dane.
  8. // rozpoczecie sesji, zarejestrowanie wartosci i przekierowanie
  9. $_SESSION['username'] = $row[1];
  10. $_SESSION['user_id'] = $row[0];
  11.  
  12. ob_end_clean(); // usuniecie bufora
  13.  
  14. header ("Location: http://" . $_SERVER['HTTP_HOST'] . "/index.php");
  15. exit();
  16. } else { // w bazie nie ma szukanych danych
  17. echo '<span style="color:red">Podany login i hasło nie zostały znalezione w naszej bazie!</span><br />';
  18. }
  19. } else { // jesli wystapily problemy
  20. echo '<span style="color:red">Proszę spróbować ponownie.</span><br /><br />';
  21. }
  22. ?>


Wpisuje do formularza poprawne dane, ktore sa w bazie bo sprawdzalem wielokrotnie, a on za kazdym razem wypisuje "Podany login i hasło nie zostały znalezione w naszej bazie!". Domyslam sie, ze cos zepsulem w wywolaniu funkcji "mysql_fetch_array". Jesli ktos widzi jakis problem to prosze o odpowiedz winksmiley.jpg z gory dzieki
Daimos
  1. <?php
  2. $query = "SELECT user_id, username, password FROM users WHERE username='$u' AND password=PASSWORD('$p')";
  3. ?>
dadexix
Kod
    if ($row) { // w bazie znaleziono szukane dane.


spróbuj zmienić na:

Kod
    if ($row['1'] == $u) { // w bazie znaleziono szukane dane.
oraz
Kod
    $result = @mysql_query ($query);

na
Kod
    $result = mysql_query($query);
i zobacz czy nie masz błędu

@my salsa... ale po co pobierać z bazy password jak ono do niczego nie potrzebne?
drPayton
Popraw proszę temat na zgodny z zasadami forum przedszkole, w przeciwnym wypadku wątek zostanie zamknięty.

Pozdrawiam!
kulpek
niestety ani jeden, ani drugi sposob nie pomagaja...

@dadexix

nie wywala zadnego bledu jak usune @

EDIT: To moze ja dam caly kod moze sie w czyms przyda...

  1. <?php
  2. if (isset($_POST['submit'])) { // sprawdzenie czy formularz zostal wypelniony
  3.  
  4. // Wstawia  przed znakami specjalnymi
  5. function escape_data ($data) {
  6. global $dbc; // Polaczenie
  7. if (ini_get('magic_quotes_gpc')) {
  8. $data = stripslashes($data);
  9. }
  10. return mysql_real_escape_string($data, $dbc);
  11. } // Koniec funkcji.
  12.  
  13. require_once ('mysql_connect.php'); // Polacz sie z baza danych
  14. if (empty($_POST['username'])) { // sprawdenie nicka
  15. $u = FALSE;
  16. echo '<span style="color:red">Proszę podać poprawną nazwę konta!</span><br />';
  17. } else {
  18. $u = escape_data($_POST['username']); 
  19. }
  20. if (empty($_POST['password'])) { // sprawdenie hasla
  21. $p = FALSE;
  22. echo '<span style="color:red">Proszę podać poprawne hasło!</span><br />';
  23. } else {
  24. $p = escape_data($_POST['password']); 
  25. }
  26. if ($u && $p) { // jesli nie wystapily problemy
  27. // wysyla zapytania do bazy danych
  28. $query = "SELECT user_id, username, password FROM users WHERE username='$u' AND password=PASSWORD('$p')";
  29. $result = mysql_query ($query);
  30. $row = mysql_fetch_array ($result, MYSQL_NUM);
  31. if ($row['1'] == $u) { // w bazie znaleziono szukane dane.
  32. // rozpoczecie sesji, zarejestrowanie wartosci i przekierowanie
  33. $_SESSION['username'] = $row[1];
  34. $_SESSION['user_id'] = $row[0];
  35.  
  36. ob_end_clean(); // usuniecie bufora
  37.  
  38. header ("Location: http://" . $_SERVER['HTTP_HOST'] . "/index.php");
  39. exit();
  40. } else { // w bazie nie ma szukanych danych
  41. echo '<span style="color:red">Podany login i hasło nie zostały znalezione w naszej bazie!</span><br />';
  42. }
  43. } else { // jesli wystapily problemy
  44. echo '<span style="color:red">Proszę spróbować ponownie.</span><br /><br />';
  45. }
  46. } // koniec instrukcji warunkowej submit
  47. ?>
PawelC
jeśli Ci się to przyda, ten skrypt sprawdza czy jest użytkownik o podanym loginie i haśle w bazie:
logowanie.php
  1. <?php
  2. ?>
  3. <?php
  4.  
  5. require_once ('mysql_connect.php'); // Polacz sie z baza danych
  6.  
  7. $username = trim($_POST['username']);
  8. $user_id = trim($_POST['user_id']);
  9. $query = "SELECT user_id, username FROM users WHERE username='$u' AND password=PASSWORD('$p')";
  10. $rekordy = mysql_query($query);
  11. if(mysql_num_rows($rekordy)==0)
  12. {
  13.  echo' Podany login i haslo są błędne';
  14.  exit;
  15. }
  16. else
  17. {
  18.  $_SESSION['username'] = $_POST['username']; 
  19.  $_SESSION['user_id'] = $_POST['user_id']; 
  20.  header ("Location: http://" . $_SERVER['HTTP_HOST'] . "/index.php");
  21.  exit;
  22. }
  23. ?>

plik zalogowany.php
  1. <?
  2. if(isset($_SESSION['zalogowany']))
  3. {
  4.  echo' Strona po zalogowaniu. Zalogowany jest: '. $_SESSION['zalogowany'];
  5. }
  6. else
  7. {
  8.  Header('location: logowanie.php');
  9.  exit;
  10. }
  11. echo '<a href="wylogowanie.php">Wyloguj się</a>';
  12. ?>

Plik wylogowanie.php
  1. <?
  2. // kod do strony o nazwie wylogowanie.php
  3. $_SESSION=array();
  4. Header('location: index.php');
  5. ?>

Formularz masz także niebędę pisał jego kodu, mi działa ten skrypt, sprawdź czy u Ciebie pójdzie.
kulpek
@exploit

wiesz.. moze to i by dzialalo, ale nie zalatwia to mojej sprawy, poniewaz uzytkownik nie podaje w formularzu "user_id" tylko nick i haslo.. a "user_id" ma byc wyciagniete z bazy na podstawie danych z formularza.

ps. skad ma sie wziac zmianna $_SESSION['zalogowany']; w pliku zalogowany.php questionmark.gif

EDIT:

Z mojej analizy wynika, ze blad powoduje czesc kodu, ktora porownuje haslo... czyli:
  1. <?php
  2. AND password=PASSWORD('$p')
  3. ?>

Z tym, ze przy rejestracji haslo jest szyfrowane poprzez PASSWORD('$p') wiec przy logowaniu powinienem zrobic tak samo... widzi ktos moze blad tutaj??
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.