Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php]Skrypt logowania nie chce działać, Gdy do pola login i hasło wpisuję odpowiednie dane, wyświetla się błąd
zurek
post 5.09.2007, 10:04:17
Post #1





Grupa: Zarejestrowani
Postów: 88
Pomógł: 0
Dołączył: 4.09.2007
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Jestem początkującym programistą PHP. Chciałem napisać skrypt logowania na swojej stronie z użyciem sesji na podstawie książki, z której się uczę. Poniżej przedstawiam kod tego skryptu:

To jest add_admin.php, który dodaje administratorów do bazy danych:



  1. <?
  2.  
  3. //połączenie z bazą danych
  4. require_once('../mysql_connect.php');
  5.  
  6. //funkcja wstawiaąca przed znakami specjalnymi znak odwrotnego ukośnika.
  7.  
  8. function escape_data ($data){
  9.  
  10. //Potrzebne połączenie
  11. global $dbc;
  12.  
  13. if(ini_get('magic_quotes_gpc')){
  14. $data = stripslashes($data);
  15. }
  16.  
  17. return mysql_real_escape_string(trim($data), $dbc);
  18. }
  19.  
  20. //tablica typu array na błędy
  21. $errors = array();
  22.  
  23. if($_POST['wyslij']){
  24.  
  25. //sprawdzanie, czy wszystkie pola są wypełnione
  26.  
  27. //nazwa admina
  28. if(empty($_POST['name'])){
  29. $errors[] = "Nie podano nazwy admina.";
  30. }
  31. else{
  32. $name = escape_data($_POST['name']);
  33. }
  34.  
  35. //email
  36. if(empty($_POST['email'])){
  37. $errors[] = "Nie podano adresu e-mail admina.";
  38. }
  39. else{
  40. $email = escape_data($_POST['email']);
  41. }
  42.  
  43. //haslo
  44. if(empty($_POST['password'])){
  45. $errors[] = "Nie podano hasła admina.";
  46. }
  47. else{
  48. $password = escape_data($_POST['password']);
  49. }
  50.  
  51. //jeśli nie ma błędów
  52. if(empty($errors)){
  53.  
  54. //zapytanie
  55. $query = "INSERT INTO admins (name, email, password, date) VALUES ('$name', '$email', SHA('$password'), NOW())";
  56. $result = mysql_query($query);
  57.  
  58. //jeśli zapytanie zostało przyjęte
  59. if($result){
  60. print "Dodano nowy rekord do bazy danych.";
  61. }
  62. else{
  63. print "Nie można dodać nowego rekordu do bazy danych z powodu prawdopodobnych błęd
    ów w serwisie."
    ;
  64. }
  65.  
  66. }
  67. //a jeśli błędy są
  68. else{
  69. print 'Wystąpiły następujące błędy w formularzu: <br/><br/>';
  70.  
  71. foreach($errors AS $raport){
  72. print " - $raport <br/>";
  73. }
  74. }
  75.  
  76. }
  77.  
  78. ?>


A to jest plik logowanie.php:

  1. <?
  2.  
  3. //jeśli formularz został wysłany
  4. if($_POST['wyslij']){
  5.  
  6. //połączenie z bazą danych
  7. require_once('../mysql_connect.php');
  8.  
  9. //////////////////////FUNCTION ESCAPE DATA//////////////////////////////
  10.  
  11. //funkcja wstawiaąca przed znakami specjalnymi znak odwrotnego ukośnika.
  12.  
  13. function escape_data ($data){
  14.  
  15. //Potrzebne połączenie
  16. global $dbc;
  17.  
  18. if(ini_get('magic_quotes_gpc')){
  19. $data = stripslashes($data);
  20. }
  21.  
  22. return mysql_real_escape_string(trim($data), $dbc);
  23. }
  24. ////////////////////KONIEC FUNKCJI ESCAPE DATA//////////////////////////
  25.  
  26. //tablica typu array przechowująca błędy
  27. $errors = array ();
  28.  
  29. //sprawdzanie pól formularza
  30.  
  31. //email
  32. if(empty($_POST['email'])){
  33. $errors [] = "Nie podano adresu mailowego.";
  34. }
  35. else{
  36. $email = escape_data($_POST['email']);
  37. }
  38.  
  39. //haslo
  40. if(empty($_POST['password'])){
  41. $errors [] = "Nie podano hasła.";
  42. }
  43. else{
  44. $password = escape_data($_POST['password;']);
  45. }
  46.  
  47. //jeśli nie ma błędów
  48. if(empty($errors)){
  49.  
  50. //pobranie identyfikatora administratora i nazwy do kombinacji loginu i hasła
  51. //zapytanie
  52. $query = "SELECT admin_id, name FROM admins WHERE email='$email' AND password=SHA('$password')";
  53. $result = @mysql_query($query);
  54. $row = mysql_fetch_array($result, MYSQL_NUM);
  55.  
  56. //jeśli zapytanie zwróciło jakiś rekord
  57. if($row){
  58.  
  59. /////////////////////////////USTAWIENIE SESJI///////////////////////////
  60. //ustawienie danych sesji
  61.  
  62. $_SESSION['admin_id'] = $row[0];
  63. $_SESSION['name'] = $row[1];
  64.  
  65. ///////////////////////KONIEC USTAWIANIA SESJI//////////////////////////
  66.  
  67. //przekierowanie do strony loggedin.php
  68. //definicja adresu URL
  69.  
  70. ///////////////////////////DEFINICJA ADRESU URL ////////////////////////
  71.  
  72. $url = 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']);
  73.  
  74. //sprawdzenie końcowego ukośnika
  75.  
  76. if((substr($url, -1) == '/') OR (substr($url, -1) == '//')){
  77.  
  78. //definicja adresu URL - ciąg dalszy
  79. //odcinamy ukośnik
  80. $url = substr($url, 0, -1);
  81. }
  82.  
  83. //definicja adresu URL - ciąg dalszy
  84. //dodanie strony
  85. $url .= './loggedin.php';
  86.  
  87. ////////////////////KONIEC DEFINICJI ADRESU URL ////////////////////////
  88.  
  89. //przekierowanie do wcześniej zdefiniowanego adresu url
  90. header("Location: $url");
  91.  
  92. exit(); //koniec działania skryptu
  93.  
  94. } //koniec klauzuli wyyrażenia warunkowego if($row)
  95.  
  96. //a jeśli zapytanie nie zwróciło żadnego rekordu
  97. else{
  98. print "Wprowadzony login i hasło są niepoprawne.";
  99. }
  100.  
  101.  
  102. } //zamknięcie klałzuli wyrażenia warunkowego if(empty($errors))
  103.  
  104. //koniec połączenia z bazą danych
  105.  
  106.  
  107. } //zamknięcie klałzuli wyrażenia warunkowego if($_POST['wyslij'])
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114. ?>




Problem jest następujący. Gdy dodaję admina i wpisuję jego odpowiednie dane, do panelu logowania wyświetla mi się za każdym razem:

Cytat
Wprowadzone dane są niepoprawne!


Tabela bazy danych admins została utworzona w serwisie cba.pl przez PHPMyAdmina.

Ten post edytował Cysiaczek 5.09.2007, 19:02:39
Powód edycji: dodałem tag (cysiaczek)
Go to the top of the page
+Quote Post
drPayton
post 5.09.2007, 13:00:26
Post #2





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


1. Popraw BBCode na php, będzie łatwiej czytać
2. Co to są "klałzule"?
3. $_POST['email;'] - wywal średnik
4. Tego nie jestem pewien, ale chyba raczej SHA1 ?!?
  1. VALUES ('$name', '$email', SHA('$password'), NOW())";


Na razie tyle, popraw i sprawdź rezultat (najpierw na nowo dodaj usera)

Ten post edytował drPayton 5.09.2007, 13:01:44
Go to the top of the page
+Quote Post
zurek
post 5.09.2007, 18:33:33
Post #3





Grupa: Zarejestrowani
Postów: 88
Pomógł: 0
Dołączył: 4.09.2007
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Niestety dalej to samo. Poprawiłem te błędy i dalej jest to samo...
Go to the top of the page
+Quote Post
markotny
post 5.09.2007, 19:13:53
Post #4





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 2.09.2007
Skąd: Wielkopolska

Ostrzeżenie: (0%)
-----


Nie rozumiem dlaczego tak skomplikowałeś cały algorytm logowania na strone. Dane login hasła użytkownik wpisuje w formularzu przesyłasz na strone z przekierowaniem zwrotnym gdzie pobierasz z mysql hasło dla danego loginu. Sprawdzasz czy obie zmienene są równe i ustawiasz użytkownika jako zalogowanego.
Ja taki system stosuję i chodzi szybko i sprawnie bez tak rozbudowanego kodu.
Pozdrowienia

P.S. Rozbudowana złożoność kodu nie świadczy o większej umiejętności programowania, a wręcz odwrotnie. smile.gif


--------------------
Początki są zawsze trudne, ale to nie znaczy że potem musi być łatwiej.
Go to the top of the page
+Quote Post
zurek
post 5.09.2007, 19:28:02
Post #5





Grupa: Zarejestrowani
Postów: 88
Pomógł: 0
Dołączył: 4.09.2007
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Cytat(markotny @ 5.09.2007, 20:13:53 ) *
P.S. Rozbudowana złożoność kodu nie świadczy o większej umiejętności programowania, a wręcz odwrotnie. smile.gif

Dobrze o tym wiem. Ale ja jestem narazie amatorem i nie umiem dokładnie i skutecznie zoptymalizować kodu php. Jak na początku mówiłem, ten kod jest napisay z pomocą książki.

markotny, czy możesz dokładniej mi to wytłumaczyć, bo ja za bardzo jeszcze tych wszystkich pojęć nie kapuję (np. przekierowanie zwrotne).
Go to the top of the page
+Quote Post
Krzysztof Klimon...
post 5.09.2007, 19:53:58
Post #6





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 5.09.2007

Ostrzeżenie: (0%)
-----


Pokaż co siedzi w admins (select * from admins;) bo kod (przynajmniej ten z logowanie.php) wygląda w porządku nie licząc średnika o którym pisał drPayton (bo np. SHA() i SHA1() są równoznaczne z tego co pamiętam).. no może za dużo komentarzy i brak wcięć ale to nie stanowi problemu (dla parsera bo czyta się to jak dziennik ustaw ;] ).

EDIT:

to nie jest powód ale zamień
if($_POST['wyslij']) {
na
if(isset($_POST['wyslij'])) {

a dodatkowo ustaw parser php by wyświetlał wszystkie błędy, warningi i inne informacje (info jak to zrobić jest na forum na pewno).

Ten post edytował Krzysztof Klimonda 5.09.2007, 19:58:16
Go to the top of the page
+Quote Post
markotny
post 5.09.2007, 20:08:06
Post #7





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 2.09.2007
Skąd: Wielkopolska

Ostrzeżenie: (0%)
-----


Przekierowanie zwrotne - ja tak to sobie nazywam - polega na tym że formularz logowania jest na stronie np. index.php jest tam formularz gdzie wysyłane dane wysyłasz na strone logowanie.php. Tam zachodzi cały proces zapisywania zmiennych, ustawiania sesji, pobierania danych z mysql'a, sprawdzania poprawności logowania i ustawiania statusu zalogowanego, ale jak na wtępie strony w nagłówku wpszesz
<?
header ("Location:index.php");
?>
to wrócisz na strone główna jako zalogowany smile.gif

Nie wiem czy da się to jakoś inaczej wytłumaczyć. smile.gif


--------------------
Początki są zawsze trudne, ale to nie znaczy że potem musi być łatwiej.
Go to the top of the page
+Quote Post
zurek
post 5.09.2007, 20:19:09
Post #8





Grupa: Zarejestrowani
Postów: 88
Pomógł: 0
Dołączył: 4.09.2007
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Mniej więcej wiem o co chodzi. Jednak nie rozumiem jak teoretycznie poprawny skrypt nie może działać. Błąd napewno jest gdzieś w porównywaniu adresu mailowego i hasła. To jest niemożliwe! Bazę danych mam raczej poprawną.
Go to the top of the page
+Quote Post
Krzysztof Klimon...
post 5.09.2007, 20:29:24
Post #9





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 5.09.2007

Ostrzeżenie: (0%)
-----


To wstaw po 52 linijce print $query;, z 53 linijki usuń @ i odpal jeszcze raz - może wyrzuci błąd ew. po zawartości zapytania dojdziesz co jest nie tak.. albo po prostu wkleisz i będziemy dochodzić (sic!) wpólnymi siłami ;]

Ten post edytował Krzysztof Klimonda 5.09.2007, 20:30:12
Go to the top of the page
+Quote Post
zurek
post 5.09.2007, 20:32:30
Post #10





Grupa: Zarejestrowani
Postów: 88
Pomógł: 0
Dołączył: 4.09.2007
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Przeglądnałem jeszcze raz cały kod i zauważyłem w linii 44 niepotrzebny średnik. I chyba się teraz udało.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 02:21