Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][SQL]Strona na hasło
Forum PHP.pl > Forum > Przedszkole
qdesigner
Witam!

Szukałem rozwiązania na różnych stronach oraz forach natomiast nic nie znalazłem, więc pytam.
Tak zupełnie zielony z PHP nie jestem natomiast mógłbym zostać opierniczony że pisze pierwszego posta poza subforum "przedszkole".

Mam problem, a mianowicie zrobiłem prosty formularz zamówienia, w którym użytkownik wpisuje swoje dane oraz login i hasło.
Wszystkie dane są zapisywane do bazy danych.
W następnym kroku chciałem zrobić stronkę na, którą użytkownik miałby dostęp po wpisaniu loginu i hasła.

Wszystko wygląda prosto, ale tylko gdy strona jest na jedno i to samo hasło.

A ja chciałbym, aby każdy użytkownik miał swoje hasło i swój login.

Zrobiłem skrypt, który czyta z pliku pojedyncze hasło.

Ale nie mogę przy każdym nowym użytkowniku modyfikować pliku na serwerze.

Dlatego chciałem powiązać wpis użytkownika do bazy (hasło i login) ze skryptem logowania. Natomiast nie wiem w jaki sposób mam przeszukać bazę w poszukiwaniu hasła.
Użyć pętli?
Jak miałaby wyglądać taka pętla?

Miałoby to wyglądać tak:

Pierwsze zamówienie (użytkownik podaje login i hasło) -> wpis do bazy -> kolejne zamówienie (logowanie przez stronę na hasło) -> wpisane hasło porównuje z hasłami z bazy, jak znajdzie hasło to porównuje z loginem, jeżeli jest ok to przechodzi na stronkę zastrzeżoną hasłem -> pobiera pozostałe dane (zniżka itp.)

Proszę o jakieś naprowadzenie.
Z góry dziękuje.
erix
Cytat
Dlatego chciałem powiązać wpis użytkownika do bazy (hasło i login) ze skryptem logowania. Natomiast nie wiem w jaki sposób mam przeszukać bazę w poszukiwaniu hasła.

To zwykły SELECT z odpowiednim WHERE (sprawdzasz, czy login=wpisany login, hasło=wpisane hasło). Jeśli zwraca rekord, poprawne logowanie, jeśli nie - intruz. smile.gif
qdesigner
No i właśnie chodzi o to w jaki sposób to sprawdzić czy login=login wpisany? Wiem jak pobrać kolumnę z tabeli tylko jak mam 50 loginów i 50 haseł to jak je przeszukać?

Jak powinno wyglądać takie przeszukanie?

Chyba,że chodziło Ci o WHERE haslo LIKE '$pass'?
PanGuzol
  1. SELECT * FROM tabela_z_loginami_i_haslami WHERE login='login podany przez użytkownika' AND haslo='haslo podane przez uzytkownika'
mecenas
Cytat
Tak zupełnie zielony z PHP nie jestem natomiast mógłbym zostać opierniczony że pisze pierwszego posta poza subforum "przedszkole".


Oj chyba jednak jesteś winksmiley.jpg

Poszukaj na googlu tutoriali. Warto poczytać smile.gif

Podpowiedź: select sprawdzający warunki i potem przykładowo mysql_num_rows smile.gif
Bo chyba nie chodzi Ci o gotowca? dry.gif
qdesigner
Z mysql-em dopiero zaczynam to fakt. W php się sporo bawiłem. Dziękuję za informacje. Aż taki zielony nie jestem - napisałem skrypt do pobierania danych z formularza, a wcześniej utworzyłem bazę danych. "Zielony" oznacza - nic nie kumam w temacie,a ja potrzebuje drobnych wskazówek. Co do bazy danych wolę się upewnić bo już raz metodą prób i błędów przeciążyłem serwer. I od razu mówię że nie chcę gotowca :-P

Przeczytałem już kilka tutoriali smile.gif

chodzi mniej więcej o coś takiego?
  1. <?php
  2. polaczenie z baza
  3. ..
  4. wyszukanie
  5.  
  6. $num=mysql_numrows($result);
  7.  
  8. if($num!=0)
  9. {
  10. $_SESSION[haslo] = $haslo;
  11. header ("Location: plik-na-hslo.php");
  12. }
  13.  
  14. else
  15. {
  16. echo 'Podałeś niewłaściwy login lub hasło';
  17. }
  18. ?>
hostingekspert
1. na początku kodu, powiedzmy w linii 0 dodaj session_start();
2. przed polaczeniem z baza ustaw
if (!empty($_POST['login'] && !empty($_POST['haslo'])
{ //logowanie }
else
echo '
<form method="post">
Login: <input type="text" name="login">
Hasło: <input type="text" name="haslo">
</form>';
3. 11 linijke zamieniłbym na przechowywanie loginu, identyfikatora swiadczacego o zalogowaniu np. $_SESSION['zalogowany']='tak';
4. 12 linijka nie podoba mi się, wystarczyłoby wpisać adres w przeglądarce do pliku plik-na-haslo.php, aby uzyskac dostep bez logowania, w plikach które maja wymagac autoryzacji umiesciłbym cos na styl if ($_SESSION['zalogowany']=='tak')
{

//zawartosc pliku

}
else
echo '
<form method="post">
Login: <input type="text" name="login">
Hasło: <input type="text" name="haslo">
</form>';
5. napisalem to bez funkcji, ale juz z samych poczatkow poczytaj o programowaniu funkcyjnym, jest wygodniejsze, a z czasem bedzie latwiej Ci przejsc na programowanie obiektowe jesli z php wiazesz przyszlosc
qdesigner
Cytat(hostingekspert @ 19.11.2008, 01:33:04 ) *
4. 12 linijka nie podoba mi się, wystarczyłoby wpisać adres w przeglądarce do pliku plik-na-haslo.php, aby

Spokojnie pliki wymagające autoryzacji też bym zabezpieczył po to właśnie przenoszę hasło oraz login w sesji.
Zawartość strony z "plik-na-haslo.php" wyświetlałaby sie dopiero po autoryzacji.

Dziekuje również za cenne wskazówki.

Pozdrawiam.
erix
Tak, jak przedmówcy:
Cytat
  1. <?php
  2. if($num!=0)
  3. {
  4. $_SESSION[haslo] = $haslo;
  5. header ("Location: plik-na-hslo.php");
  6. }
  7. ?>

Ale po co trzymasz całe hasło w sesji? Nie kuś losu. tongue.gif
Wystarczy Ci chociażby $_SESSION['authorized'] = true;

ad. punktu 4. Jak wcześniej napisałem. Do tego register_globals na off i guitar.gif

Cytat
Co do bazy danych wolę się upewnić bo już raz metodą prób i błędów przeciążyłem serwer.

A o cache'u słyszałeś? snitch.gif
qdesigner
Tylko problem jest taki że jak w sesji nie przekaże hasła i loginu to w jaki sposób na stronie "na hasło" pobiorę resztę danych z tabeli?

Np. w celu autoryzacji wyszukuje loginu i hasła jeżeli się zgadza to umożliwiam dostęp i wtedy przechodzi na stronę "na hasło" i na tej stronie ma pobierać resztę danych użytkownika np. ile kupił produktów i jaką ma zniżkę.

A przekazując samo:

$_SESSION['authorized'] = true;

musiałbym jeszcze raz w pliku "na hasło" pytać o login i hasło. chyba żebym zrobił to w jednym pliku. Tak aby treść była ukryta i pojawiała się po wpisaniu loginu i hasła - wtedy będę miał możliwość operowania na pobranym z bazy haśle i loginie.
erix
Nie musiałbyś pytać, bo w sesji już miałbyś zapisane UŻYTKOWNIK ZALOGOWANY, czy też samo ID usera (co w Twoim wypadku rozwiązywałoby problem).

Przecież tej flagi nikt Ci z zewnątrz nie przestawi (pomijam fakt ingerencji w pliki sesyjne, czy przechwycenie identyfikatora sesji).
qdesigner
No tak na temat zalogowania nie musiałbym pytać ale po to żeby pobrać resztę danych z bazy. Bo wyszukałem po loginie i haśle czy taki user istnieje. Jeżeli tak to w sesji jest przekazywana informacja o autoryzacji. A czy można przesłać i info o zalogowaniu $_SESSION['authorized'] = true; i info o ID usera?
erix
No można. winksmiley.jpg

Ale po co oba? Wstawiasz np:

  1. <?php
  2. $_SESSION['user'] = 38472;
  3. ?>


i sprawdzasz przez empty" title="Zobacz w manualu PHP" target="_manual ten klucz. ID 0 raczej nikt nie będzie miał.
qdesigner
Fajny numerek,ale aż tylu userów nie będzie tongue.gif

Po to oba żeby pierwszym if($_SESSION['authorized'] == true) {} otworzyć dostęp do zablokowanej treści a drugim pobrać dane z bazy już po odblokowaniu treści. winksmiley.jpg


Chyba że chodziło Ci o coś takiego:

if (!empty($ID)
{
treść na hasło
}
erix
Ale przecież niezalogowany user nie będzie trzymał identyfikatora w sesji. winksmiley.jpg

Po co nadmiarowe dane?
qdesigner
  1. <?php
  2.  
  3.  
  4. if (!empty($_POST['login']) && !empty($_POST['haslo']))
  5. {
  6. $user="xxx";
  7. $password="xxx";
  8. $database="xxx";
  9. mysql_connect(localhost,$user,$password);
  10. @mysql_select_db($database) or die( "Unable to select database");
  11. $query="SELECT * FROM klienci WHERE login='$login' AND haslo='$haslo'";
  12.  
  13. $result=mysql_query($query);
  14. $num=mysql_numrows($result);
  15.  
  16. $id=mysql_result($result,"id");
  17.  
  18. if(!empty($num))
  19. {
  20. $_SESSION[ID] = $id;
  21. header ("Location: mietek.php");
  22. }
  23. else
  24. {
  25. echo 'Podałeś(aś) niewłaściwy login lub hasło';
  26. }
  27. }
  28. else
  29. {
  30. <form method="post">
  31. Login: <input type="text" name="login">
  32. Hasło: <input type="text" name="haslo">
  33. <INPUT TYPE="SUBMIT" VALUE="Zaloguj">
  34. </form>';
  35. }
  36.  
  37. ?>


Zrobiłem coś takiego tylko jest problem że czy podam dobre dane czy złe to i tak przekierowuje do pliku. Jaki błąd popełniłem? Kombinuje już sporo i nie mogę go znaleźć.
piotrooo89
ja korzystam z takiego logowania...
  1. <?php
  2.    ob_start();
  3.    session_start();
  4.    
  5.    $login = $_POST['loguj'];
  6.    if($login)
  7.    {
  8.        $user = $_POST['login'];
  9.        $haslo = $_POST['pass'];
  10.        
  11.        include('../mysql.inc');
  12.        
  13.        $sql = mysql_query("SELECT * FROM admin WHERE user='$user' AND pass='$haslo'");
  14.        
  15.        if(@mysql_num_rows($sql))
  16.        {
  17.            session_register("uzytkownik");
  18.            header("Location: admin.php");
  19.        exit;
  20.        }
  21.        else
  22.        {
  23.            $message="Nieprawidłowa nazwa użytkownika lub hasło.";
  24.        }
  25.    }
  26.    ob_end_flush();
  27. ?>
  28. <html>
  29. <head>
  30.    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  31. <title></title>
  32. </head>
  33. <body>
  34.  
  35. <form name="login" action="<? echo $_SERVER['PHP_SELF']; ?>" method="post">
  36.    <table>
  37.        <tr>
  38.            <td>Login:</td><td><input type="text" name="login" id="login" /></td>
  39.        </tr>
  40.        <tr>
  41.            <td>Pass:</td><td><input type="password" name="pass" id="pass" /></td>
  42.        </tr>
  43.    </table>
  44.        <input type="submit" name="loguj" value="Loguj" />
  45. </form>
  46.  
  47.  
  48. </body>
  49. </html>


i później na stronie do której ma być hasło sprawdzam:
  1. <?php
  2.    ob_start();
  3.    session_start();
  4.    
  5.    if(!session_is_registered("uzytkownik"))
  6.    {
  7.        header("Location: login.php");
  8.    }
  9.    ob_end_flush();
  10. ?>
qdesigner
A czy mogę w sesji przenieść cos takiego?

$_SESSION["ident"]=$id;


Logowanie już działa natomiast po przeniesieniu do drugiego pliku nie ma nic w $_SESSION["ident"]

Już działa smile.gif
erix
No pewnie, że możesz; sesja, to tak naprawdę zwykła tablica. winksmiley.jpg

[quote]Logowanie już działa natomiast po przeniesieniu do drugiego pliku nie ma nic w $_SESSION["ident"]

Już działa [/quuote]
To w końcu działa, czy nie? tongue.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.