qdesigner
18.11.2008, 22:28:39
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
18.11.2008, 22:42:33
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.
qdesigner
18.11.2008, 22:51:20
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
18.11.2008, 22:58:17
SELECT * FROM tabela_z_loginami_i_haslami WHERE login='login podany przez użytkownika' AND haslo='haslo podane przez uzytkownika'
mecenas
18.11.2008, 22:59:59
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ś

Poszukaj na googlu tutoriali. Warto poczytać

Podpowiedź: select sprawdzający warunki i potem przykładowo mysql_num_rows

Bo chyba nie chodzi Ci o gotowca?
qdesigner
18.11.2008, 23:31:23
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
chodzi mniej więcej o coś takiego?
<?php
polaczenie z baza
..
wyszukanie
if($num!=0)
{
$_SESSION[haslo] = $haslo;
header ("Location: plik-na-hslo.php"); }
else
{
echo 'Podałeś niewłaściwy login lub hasło'; }
?>
hostingekspert
19.11.2008, 01:33:04
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
19.11.2008, 09:41:30
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
19.11.2008, 16:59:34
Tak, jak przedmówcy:
Cytat
<?php
if($num!=0)
{
$_SESSION[haslo] = $haslo;
header ("Location: plik-na-hslo.php"); }
?>
Ale po co trzymasz całe hasło w sesji? Nie kuś losu.

Wystarczy Ci chociażby
$_SESSION['authorized'] = true;ad. punktu 4. Jak wcześniej napisałem. Do tego
register_globals na
off i

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ś?
qdesigner
19.11.2008, 18:16:01
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
19.11.2008, 18:25:12
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
19.11.2008, 18:33:33
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
19.11.2008, 18:37:16
No można.

Ale po co oba? Wstawiasz np:
<?php
$_SESSION['user'] = 38472;
?>
i sprawdzasz przez
empty" title="Zobacz w manualu PHP" target="_manual ten klucz. ID 0 raczej nikt nie będzie miał.
qdesigner
19.11.2008, 18:47:49
Fajny numerek,ale aż tylu userów nie będzie
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.

Chyba że chodziło Ci o coś takiego:
if (!empty($ID)
{
treść na hasło
}
erix
19.11.2008, 19:00:59
Ale przecież niezalogowany user nie będzie trzymał identyfikatora w sesji.

Po co nadmiarowe dane?
qdesigner
19.11.2008, 20:57:47
<?php
if (!empty($_POST['login']) && !empty($_POST['haslo'])) {
$user="xxx";
$password="xxx";
$database="xxx";
$query="SELECT * FROM klienci WHERE login='$login' AND haslo='$haslo'";
{
$_SESSION[ID] = $id;
header ("Location: mietek.php"); }
else
{
echo 'Podałeś(aś) niewłaściwy login lub hasło'; }
}
else
{
<form method="post">
Login: <input type="text" name="login">
Hasło: <input type="text" name="haslo">
<INPUT TYPE="SUBMIT" VALUE="Zaloguj">
</form>';
}
?>
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
19.11.2008, 20:59:52
ja korzystam z takiego logowania...
<?php
$login = $_POST['loguj'];
if($login)
{
$user = $_POST['login'];
$haslo = $_POST['pass'];
include('../mysql.inc');
$sql = mysql_query("SELECT * FROM admin WHERE user='$user' AND pass='$haslo'");
{
header("Location: admin.php"); }
else
{
$message="Nieprawidłowa nazwa użytkownika lub hasło.";
}
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
</head>
<body>
<form name="login" action="
<? echo $_SERVER['PHP_SELF']; ?>" method="post">
<table>
<tr>
<td>Login:</td><td><input type="text" name="login" id="login" /></td>
</tr>
<tr>
<td>Pass:</td><td><input type="password" name="pass" id="pass" /></td>
</tr>
</table>
<input type="submit" name="loguj" value="Loguj" />
</form>
</body>
</html>
i później na stronie do której ma być hasło sprawdzam:
<?php
{
header("Location: login.php"); }
?>
qdesigner
20.11.2008, 00:33:43
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
erix
20.11.2008, 17:02:54
No pewnie, że możesz; sesja, to tak naprawdę zwykła tablica.

[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?
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.