Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [HTML][PHP]Formularz rejestracji i logowania bez bazy danych
badowl
post 27.07.2011, 21:46:08
Post #1





Grupa: Zarejestrowani
Postów: 62
Pomógł: 0
Dołączył: 18.07.2011

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


Witam mam pewien problem. To treść zadania z książki którą czytam:

"Napisz program, który zapyta użytkownika nazwę użytkownika oraz hasło.
(...)Nazwa użytkownika oraz nowe hasło powinny być przechowywane w pliku o nazwie
db.password. Następnie Utwórz program PGP pytający o nazwę użytkownika oraz hasło
i wpuszczający użytkownika tylko wtedy, gdy poda on prawidłowe dane.
Jeśli dane uwierzytelniające będą prawidłowe należy wyświetlić zawartość pliku datebook."

Plik index.php:
  1. <?php
  2. if (isset($_POST['submit'])){
  3. $login = $_POST['login'];
  4. $pass = $_POST['pass'];
  5. $pass1 = $_POST['pass1'];
  6. if($pass === $pass1){
  7. $filename = "$_SERVER[DOCUMENT_ROOT]/file/bd.password";
  8. $file = fopen($filename, 'r+');
  9. $nowy = $login . " " . $pass . "\r\n";
  10. $filehandle = fopen($filename, 'ab');
  11. fwrite($filehandle, $nowy, strlen($nowy));
  12. print " rejstracja powiodła się! za 2 sekund zostaniesz automatycznie przekierowany do strony logowania.";
  13. header("Refresh: 2; URL=index2.php");
  14. }
  15. else{
  16. echo "Podane hasła muszą być identyczne!";
  17. header("Refresh: 2; URL=index.php");
  18. }
  19. }
  20. else {
  21. ?>
  22. Jeśli nie masz konta utwórz je!
  23. <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method='post'>
  24. login
  25. <input type="text" name="login" /> <br />
  26. hasło
  27. <input type="password" name="pass" /> <br />
  28. powtórz hasło
  29. <input type="password" name="pass1" /> <br />
  30. <input type="submit" name="submit" value="rejestruj" />
  31. </form>
  32. Jeśli masz już konto kliknij <a href="index2.php">tutaj</a> aby sie zalogować.
  33. <?php
  34. }
  35. ?>


Plik index2.php
  1. <?php
  2. if (isset($_POST['submit'])){
  3. $login = trim($_POST['login']);
  4. $pass = trim($_POST['pass']);
  5. $password = "$_SERVER[DOCUMENT_ROOT]/file/bd.password";
  6. $list = file($password);
  7. $count = 0;
  8. foreach($list as $key => $val){
  9. $log = explode(' ', $val);
  10. if(strcasecmp($login, $log[0]) == 0 && strcasecmp($pass, $log[1]) == 0){ //// PRAWDOPODOBNIE COŚ TU JEST ŹLE.
  11. $filename = "$_SERVER[DOCUMENT_ROOT]/file/datebook";
  12. $text = file_get_contents($filename);
  13. echo $text;
  14. $count++;
  15. }
  16. }
  17. if($count == 0){
  18. print "Użytkownik $login nie istnieje w bazie! Zarejstruj się!";
  19. }
  20. }
  21. else {
  22. ?>
  23. Wpisz nazwę użytkownika i hasło.
  24. <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method='post'>
  25. login
  26. <input type="text" name="login" /> <br />
  27. hasło
  28. <input type="password" name="pass" /> <br />
  29. <input type="submit" name="submit" value="loguj" />
  30. </form>
  31. <?php
  32. }
  33. ?>


Zawartość pliku db.password
Kod
uzytkownik1 haslo1
uzytkownik2 haslo2


Zawartość pliku datebook:
Kod
Imie Nazwisko dd\mm\rrrr Adres
Imie2 Nazwisko2 dd\mm\rrrr Adres2


Wie ktoś na czym polega błąd?
Pozdrawiam smile.gif
Go to the top of the page
+Quote Post
zend
post 27.07.2011, 21:49:04
Post #2





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

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


Ok, napiszesz coś o błędzie czy mamy się sami domyślać?
Go to the top of the page
+Quote Post
badowl
post 27.07.2011, 21:52:22
Post #3





Grupa: Zarejestrowani
Postów: 62
Pomógł: 0
Dołączył: 18.07.2011

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


z rejestracją jest wszystko ok. Nazwa Użytkownika i hasło się dodają. Problem jest przy logowaniu. Jeśli wpisze się złe dane to wyświetla się komunikat że użytkownik nie istnieje ale kiedy się dobrze poda dane do nie dzieje się nic sad.gif( Pusta strona.


Gdy w pliku index2.php w lini 10 zamiast
  1. if(strcasecmp($login, $log[0]) == 0 && strcasecmp($pass, $log[1]) == 0){

wpisze się
  1. if(strcasecmp($login, $log[0]) == 0){

I przy logowaniu poda dobrą nazwę użytkownika to wszystko jest ok

Ten post edytował badowl 27.07.2011, 21:56:53
Go to the top of the page
+Quote Post
zend
post 27.07.2011, 21:58:56
Post #4





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

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


  1. ini_set('display_errors' , 'on'); //na poczatku skryptów
  2.  
  3. //po $log = explode(' ', $val); dodaj
  4. echo '<pre>'; print_r($log); echo '</pre>';


Podaj wyniki tego
Go to the top of the page
+Quote Post
badowl
post 27.07.2011, 22:03:29
Post #5





Grupa: Zarejestrowani
Postów: 62
Pomógł: 0
Dołączył: 18.07.2011

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


Kod
Array
(
    [0] => uzytkownik1
    [1] => haslo1

)
Array
(
    [0] => uzytkownik2
    [1] => haslo2

)
Array
(
    [0] => uzytkownik3
    [1] => haslo3

)
Go to the top of the page
+Quote Post
zend
post 27.07.2011, 22:14:55
Post #6





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

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


Spróbuj dać, albo porównuj $pass == $log[1]
  1. strcasecmp($pass, trim($log[1]))
Go to the top of the page
+Quote Post
badowl
post 27.07.2011, 22:39:02
Post #7





Grupa: Zarejestrowani
Postów: 62
Pomógł: 0
Dołączył: 18.07.2011

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


Nadal nic ;/

Kod
Użytkownik uzytkownik1 nie istnieje w bazie! Zarejstruj się!


Nikt nie zna rozwiązania?

Ten post edytował badowl 27.07.2011, 22:20:16
Go to the top of the page
+Quote Post
zend
post 28.07.2011, 07:49:23
Post #8





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

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


Spróbuj jeszcze i sprawdź czy dane są poprawne
  1. echo '<pre>'; print_r($_POST); echo '</pre>';


Ten post edytował zend 28.07.2011, 07:49:36
Go to the top of the page
+Quote Post
badowl
post 28.07.2011, 07:58:45
Post #9





Grupa: Zarejestrowani
Postów: 62
Pomógł: 0
Dołączył: 18.07.2011

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


Kod
Array
(
    [login] => uzytkownik1
    [pass] => haslo1
    [submit] => loguj
)


Ten post edytował badowl 28.07.2011, 07:59:06
Go to the top of the page
+Quote Post
zend
post 28.07.2011, 08:04:56
Post #10





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

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


Spróbuj tak i powiedz czy się coś wyświetli
  1. if(strcasecmp($login, $log[0]) == 0 && strcasecmp($pass, $log[1]) == 0){ exit('dane poprawne');
  2. //dalsza część skryptu
Go to the top of the page
+Quote Post
badowl
post 28.07.2011, 08:18:01
Post #11





Grupa: Zarejestrowani
Postów: 62
Pomógł: 0
Dołączył: 18.07.2011

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


Kod
Użytkownik uzytkownik1 nie istnieje w bazie! Zarejstruj się!


Ten post edytował badowl 28.07.2011, 08:18:16
Go to the top of the page
+Quote Post
mortus
post 28.07.2011, 08:52:47
Post #12





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


W pliku index2.php zamień albo linijkę 6 na:
  1. $list = file($password, FILE_IGNORE_NEW_LINES);

albo linijkę 10 na:
  1. if(strcasecmp($login, $log[0]) == 0 && strcasecmp($pass, trim($log[1])) == 0){

Mam nadzieję, że zdajesz sobie sprawę, że funkcja strcasecmp jest cese-insensitive, co oznacza, że TomeK = toMEk, przy porównywaniu tą funkcją.
Po pomyślnym zalogowaniu należałoby przerwać pętlę foreach (słówko break) i dopiero wtedy wykonywać pozostałe operacje.
Poza tym przy rejestracji nie sprawdzasz, czy użytkownik o podanym loginie i haśle już istnieje, czy nie istnieje i można go utworzyć (zatem możesz mieć użytkowników TomeK, ToMeK, tOMEk, itp. z różnymi hasłami, co będzie powodować problemy).
Go to the top of the page
+Quote Post
badowl
post 28.07.2011, 11:17:06
Post #13





Grupa: Zarejestrowani
Postów: 62
Pomógł: 0
Dołączył: 18.07.2011

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


Pierwszy sposób nic nie daje ;/ a drugi próbowałem. Zaproponował go już użytkownik Zend.
Tak, wiem ze ta funkcja nie rozróżnia wielkości liter wcześniej użyłem strcmp() ale myślałem że to może być powód błędu i dlatego ją zmieniłem.
To ze sprawdzaniem czy użytkownik już nie istnieje zamierzałem dodać później. Teraz męczy mnie inny problem ;/
Kompletnie nie mam pojęcia o co może chodzić ;/

Nikt mi nie potrafi pomóc ? co_jest.gif
Go to the top of the page
+Quote Post
mortus
post 28.07.2011, 14:23:54
Post #14





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


U mnie ten sam skrypt po zastosowaniu funkcji trim() działa bez zarzutu.

Opcjonalnie przed warunkiem:
  1. if(strcasecmp($login, $log[0]) == 0 && strcasecmp($pass, trim($log[1])) == 0){

sprawdź zawartość wszystkich zmiennych potrzebnych do logowania, czyli:
  1. var_dump($login, $log[0], $pass, $log[1]);

Zamiast funkcji spróbuj użyć operatorów porównania (na razie tylko kontrolnie):
  1. if($login == $log[0] && $pass == trim($log[1])) {
Go to the top of the page
+Quote Post
badowl
post 28.07.2011, 20:21:28
Post #15





Grupa: Zarejestrowani
Postów: 62
Pomógł: 0
Dołączył: 18.07.2011

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


Ok działa smile.gif wystarczyło zamiast funkcji strcasecmp() użyć operatorów porównania. Wielkie dzięki smile.gif chociaż dalej nie rozumiem dlaczego dlaczego nie działało to z tą funkcją..
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: 1.07.2025 - 23:29