Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Panel administracyjny - logowanie
Forum PHP.pl > Forum > Gotowe rozwiązania
tomek55
Witam!

Mam taki scrypt (troche pomieszany, bo jeden z pierwszych) smile.gif służy on do logowania do panelu administracyjnego, i mam problem bo nie wiem jak zrobić autologowanie, chodzi o coś takiego np. zalogowałem się -> wchodze na np onet -> wracam na strone gdzie sie logowałem przedchwilą i już jestem zalogowany... Jak to zrobić...? Próbowałem na sesjach ale coś mi nie wychodzi (nigdy jeszcze ich nie używałem...)

Proszę pomóżcie smile.gif

scrypt:

[php:1:d26c988b9b]<?php
include("config.php");

session_start();
echo"Numer sesji: ";
print session_id();

session_register ("login");
session_register ("haslo");

$hasla = array (''.$_POST["login"].'' => ''.$_POST["haslo"].'');

#end



$wynik = mysql_query("select * from admini");

while ($rekord = mysql_fetch_array ($wynik)) {
$id = $rekord[0];
$date=$rekord[1];
$login = $rekord[2];
$haslo = $rekord[3];
$ggg = $rekord[4];
}

$wynik = mysql_query("select * from hhnews order by id desc");

//instrukcja logowania
if (($_POST["login"]) && ($_POST["haslo"])) {
if ($hasla[$_POST["login"]] == $_POST["haslo"]) {



echo"<br><a href="wyloguj.php">Wyloguj</a>";
//loginy i hasla

$_SESSION["login"] = $_POST["login"];
$_SESSION["login"] = $_POST["haslo"];//


//panel

echo"<table border=1 width=555><tr><td width=17>Id</td><td width=150>Tytuł</td><td width=85>Autor</td><td>Data dodania</td><td width=50>Edytuj</td><td width=50>Skasuj</td></tr>";


while ($rzad = mysql_fetch_array($wynik))
{


echo"<table border=1 width=555>
<tr><td width=17>$rzad[id]</td><td width=150>$rzad[title]</td><td width=85>$rzad[autor]</td><td>$rzad[date]</td><td width=50><a href=edytuj.php?id=$rzad[id]>Edytuj</a></td><td width=50><a href=ed.php?co=skasuj&id=$rzad[id]>skasuj</td></tr>


</table>";


}

//instrukcja kasowania

if($co=='skasuj') {

$wynik=mysql_query

("DELETE FROM hhnews WHERE id='$id';");

}


//instrukcja dodawania

if ($co == 'dodaj') {
if ($title && $text && $autor) {
mysql_query("INSERT INTO hhnews VALUES('', now(), '$title','$text','$autor')");
} else{ echo"uzupelnij wszystkie pola"; }
}
elseif ($co == 'pokaz_dodaj') {

}

echo'<br><br><br>Dodaj newsa:<br><form action="ed.php" method="post">
<input type="hidden" name="co" value="dodaj">
<table><tr><td>tytuł</td><td><input type="text" name="title" value='.$rzad[title].'></td></tr>
<tr><td>treść newsa:</td><td><input type="text" name="text" value='.$rzad[text].'></td></tr>
<tr><td>autor</td><td><input type="text" name="autor" value='.$rzad[autor].'></td></tr></table>

<input type="submit" VALUE="dodaj"></form>';


// jesli zostaly podane zle dane przy logowaniu

}else {
echo("zle dane!");
}

//formularz logowania
} else {

echo'<form action="ed.php" method="post">
<table><tr><td>Login:</td><td><input type="text" name="login" value="'.$_POST["login"].'"></td></tr>
<tr><td>Haslo:</td><td><input type="password" name="haslo" value="'.$_POST["haslo"].'"></td></tr><tr><td><input type="submit" value="wyslij" ></td></tr></table></form>';
}
?>[/php:1:d26c988b9b]
mhs
ogolny schemat postepowania jest taki:

wykorzystujesz do tego ciasteczka (zapoznaj sie z tym m.in. z funkcja [manual:12c1871fd1]setcoockie()[/manual:12c1871fd1])

oczywiscie tworzysz dodatkowe pole w formularzu (checkbox) - jezeli uzytkownik zaznaczy je (sprawdzasz przy uzyciu instrukcji):
[php:1:12c1871fd1]<?php
if ($_POST['NazwaPolaWFormularzu'] == 'on')
?>[/php:1:12c1871fd1]
to ustawiasz ciasteczko w ktorym zapisujesz nazwe uzytkownika i np. poddane dzialaniu funkcji [manual:12c1871fd1]md5()[/manual:12c1871fd1] haslo

na koniec na poczatku kazdego skryptu sprawdzasz czy po stronie uzytkownika zostalo ustawione ciastko i sprawdzasz poprawnosc zapisanych w nim danych (porownujesz na przyklad z tym co masz w bazie danych) i jezeli jest ok to rejestrujesz to automatycznie logujesz...

ps. ide po jakies ciastka bo tak sama kawe pic to troche glupio... smile.gif
tomek55
a czy nie da się tego zrobić na sesjach?
mhs
w momencie gdy wywolujesz funkcje [manual:48a0c195f7]session_start()[/manual:48a0c195f7] juz w tej chwili korzystasz z sesji... to co ja Ci proponuje jest uzupelnieniem tego co juz napisales.... wiec tak czy siak operujesz na sesji...
tomek55
właśnie nie wiem dlaczego ale to co mam to nie działa... :/
squid
Cytat
[php:1:1f5aae25a5]<?php
$_SESSION["login"] = $_POST["login"];
$_SESSION["login"] = $_POST["haslo"];//
?>[/php:1:1f5aae25a5]


nie powinno byc tak?:

[php:1:1f5aae25a5]<?php
$_SESSION["login"] = $_POST["login"];
$_SESSION["haslo"] = $_POST["haslo"];
?>[/php:1:1f5aae25a5]
mhs
ok, napisalem Ci tutaj przykladowy skrypcik logowania...
wybacz, ale nie testowalem go tylko napisalem od reki... mysle, ze nie powinno byc tutaj wiekszych bledow...
przeanalizuj go sobie i napisz rownolegly to tego co ja proponuje (NIE skopiuj go gdyz moga byc tak jakies literowki czy cos) masz napisane komentarze wiec w razie blednego dzialania masz wskazowke co jak to zrobic poprawnie.

formularz logowania
[xml:1:bbad80f977]
<form action='loguj.php' method="post">
Podaj nazwe uzytkownika: <input type="text" name="user" /><br />
Podaj haslo: <input type="text" name="haslo" /><br />
Zaloguj mnie automatycznie<input type="checkbox" name="autolog" />
<input type="submit" value="logowanie" />
</form>
[/xml:1:bbad80f977]

kod php
[php:1:bbad80f977]<?php
//sprawdzam czy uzytkownik jest zarejestrowany
if (!$_SESSION['uzytkownik']) {
//sprawdzam czy uzytkownik wypelnij wszystkie pola w formularzu
if ($_POST['user'] && $_POST['haslo']) {
//dodaje przed wyslaniem do bazy danych stosowne znaki
$_POST['user'] = addslashes($_POST['user']);
$_POST['haslo'] = addslashes($_POST['haslo']);
//nawiazuje polaczenie z serwerem bazy danych - tutaj MySQL
$polaczenie = @mysql_pconnect('host', 'uzytkownik', 'haslo');
//sprawdzam czy zostalo ustawione polaczenie
if ($polaczenie) {
@mysql_select_db('nazwaTwojejBazyDanych');
//tworze zapytanie
//zakladam, ze nazwa tabeli w ktorej przechowujesz informacje to: uzytkownicy
//nazwa pola, gdzie sa przechowywane nazwy uzytkownikow to: uzytkownik
//nazwa pola, gdzie sa przechowywane hasla uzytkownikow: to haslo
//haslo jest haszowane funkcja MD5()
$zapytanie = "SELECT * FROM uzytkownicy WHERE uzytkownik = '".$_POST['user']."' AND haslo = '".md5($_POST['haslo'])."'";
//wysylam zapytanie do bazy danych
$wynikZapytania = mysql_query($zapytanie);
//sprawdzam czy zostal zwrocony rekord z bazy danych
if (mysql_num_rows($wynikZapytania) == 1) {
$_SESSION['uzytkownik'] = $_POST['user'];
//sprawdzam czy uzytkownik zaznaczyl pole autologowanie
if ($_POST['autolog'] == 'on') {
//ustawiam ciastko o nazwie uzytkownika na jeden miesiac
setcookie('autolog', $_POST['uzytkownik'], time() + 2592000);
setcookie('klucz', md5($_POST['haslo']), time() + 2592000);
}
}
else {
echo 'Podales niepoprawne dane.';
}
}
else {
echo 'Nie mozna nawizac polaczenia z serwerem bazy danych.';
}
}
}
else {
echo 'Jestes zalogowany.';
}



//funcja sprawdzajaca czy danych uzytkownik powinien zostac automatycznie zalogowany
//bedzie ona umieszczona na poczatku kazdego skryptu
function sprawdzAutologowanie() {
//sprawdzam, czy w ciasteczku sa odpowiednie dane
if ($_COOKIE['autolog'] && $_COOKIE['klucz']) {
//polaczenie z serwerem bazy danych zostalo juz wczesniej nawiazane
$zapytanie = "SELECT * FROM uzytkownicy WHERE uzytkownik = '".$_COOKIE['autolog']."' AND haslo = '".$_COOKIE['haslo']."'";
$wynikZapytania = mysql_query($zapytanie);
if (mysql_num_rows($wynikZapytania) == 1) {
//jezeli uzyskalem pozytywny wynik z bazy danych rejestruje uzytkownika
$_SESSION['uzytkownik'] = $_COOKIE['uzytkownik'];
return true;
}
}
else {
//zwracam false gdyz uzytkownik nie moze zostac automatycznie zalogowany
return false;
}
}

?>[/php:1:bbad80f977]
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-2024 Invision Power Services, Inc.