Jestem początkująca w tym temacie jednak byłam zmuszona do stworzenia logowania a raczej do włączenia gotowca do strony którą robię.
Z braku umiejętności wyszperałam gotowca, dość przyzwoicie działa jak na moje potrzeby, staram się go zrozumieć idzie "średnio" bo o sesjach nie wiele się miałam okazję nauczyć.
Niestety autor w miejscu publikacji już się nie udziela a mam kilka pytań. Jeśli możecie mi pomóc w zrozumieniu tego magicznego skryptu to bardzo proszę. Przy okazji może komuś się przyda jako że wiele tego w internecie ale wypróbowałam masę podobnych "prostych skryptów logowania" i wiele zwyczajnie nie działa/brak jest komentarzy dla zielonych.
Kod
<?php
//prosty skrypt logowania oparty o baze danych mysql, sesje i ciasteczka
//autor: Maciej Wrona (c), 2008
//uzywaj i rozpowszechniaj jesli chcesz, tylko nie kasuj komentarza autorskiego
session_start(); //sesje, do logowania
ob_start(); //emulacja headerow
@mysql_query("SET NAMES 'utf8';");
$adres_ip_serwera_mysql_z_baza_danych = '127.0.0.1';
$nazwa_bazy_danych = 'baza';
$login_bazy_danych = 'root';
$haslo_bazy_danych = '';
if ( !mysql_connect($adres_ip_serwera_mysql_z_baza_danych,$login_bazy_danych,$haslo_bazy_danych) ) {
echo 'Nie moge polaczyc sie z baza danych';
exit (0);
}
if ( !mysql_select_db($nazwa_bazy_danych) ) {
echo 'Blad otwarcia bazy danych';
exit (0);
}
/* sprawdzamy poprawnosc przeslanych danych */
if(isset($_POST['login']) && isset($_POST['pass'])) {
$login = isset($_SESSION['login']) ? $_SESSION['login'] : mysql_escape_string($_POST['login']); //filtracja zmiennej
$haslo = mysql_escape_string(md5($_POST['pass'])); //filtracja + haszowanie hasla
$zapytanie = mysql_query("SELECT * FROM redakcja WHERE `login` = '$login'"); //pobranie rekordow
$dane = mysql_fetch_array($zapytanie);
if($login ==''.$dane['login'].'' && $haslo ==''.$dane['haslo'].'')
{
$_SESSION['admin']='ok'; //sesja przyjmuje wartosc 'ok' gdy dane z formularza zgadzaja sie z danymi z bazy
$_SESSION['login']=''.$dane['login'].'';
setcookie("log" , "log", time()+3600, "/","", 0); //tworzymy ciastko
header("Location: log.php"); //przenosimy na strone
}
else { echo 'Blad logowania, probuj dalej :)'; } //w przypadku zlych danych
}
if(!isset($_SESSION['admin']) && !isset($_SESSION['login']) && $_SESSION['admin'] != 'ok' && !isset($_POST['submit']) && $_GET['p']!='wyloguj' && !isset($_COOKIE['log']))
{
echo'
<form action="log.php" method="POST">
Login:<input type="text" name="login"><br/>
Haslo:<input type="password" name="pass"><br/>
<input type="submit" name="submit" value="Loguj"></form>';
}
if($_SESSION['admin'] == 'ok' && isset($_COOKIE['log'])) //warunek, ktory sprawdza czy sesja ma odpowiednia wartosc oraz czy istnieje ciastko, jest to koniunkcja, wiec bedzie prawdziwa jesli oba warunki zostana spelnione
{
echo 'Jestes zalgowany! jako '.$_SESSION['login'].', <a href="?p=wyloguj">Wyloguj ť</a>';
if($_GET['p']=='wyloguj') {
session_destroy(); //kasujemy sesje
setcookie("log" , "log", time()-3600, "/","", 0); //kasujemy cookies
header("Location: log.php"); //przenosimy na strone logowania
}
}
?>
//prosty skrypt logowania oparty o baze danych mysql, sesje i ciasteczka
//autor: Maciej Wrona (c), 2008
//uzywaj i rozpowszechniaj jesli chcesz, tylko nie kasuj komentarza autorskiego
session_start(); //sesje, do logowania
ob_start(); //emulacja headerow
@mysql_query("SET NAMES 'utf8';");
$adres_ip_serwera_mysql_z_baza_danych = '127.0.0.1';
$nazwa_bazy_danych = 'baza';
$login_bazy_danych = 'root';
$haslo_bazy_danych = '';
if ( !mysql_connect($adres_ip_serwera_mysql_z_baza_danych,$login_bazy_danych,$haslo_bazy_danych) ) {
echo 'Nie moge polaczyc sie z baza danych';
exit (0);
}
if ( !mysql_select_db($nazwa_bazy_danych) ) {
echo 'Blad otwarcia bazy danych';
exit (0);
}
/* sprawdzamy poprawnosc przeslanych danych */
if(isset($_POST['login']) && isset($_POST['pass'])) {
$login = isset($_SESSION['login']) ? $_SESSION['login'] : mysql_escape_string($_POST['login']); //filtracja zmiennej
$haslo = mysql_escape_string(md5($_POST['pass'])); //filtracja + haszowanie hasla
$zapytanie = mysql_query("SELECT * FROM redakcja WHERE `login` = '$login'"); //pobranie rekordow
$dane = mysql_fetch_array($zapytanie);
if($login ==''.$dane['login'].'' && $haslo ==''.$dane['haslo'].'')
{
$_SESSION['admin']='ok'; //sesja przyjmuje wartosc 'ok' gdy dane z formularza zgadzaja sie z danymi z bazy
$_SESSION['login']=''.$dane['login'].'';
setcookie("log" , "log", time()+3600, "/","", 0); //tworzymy ciastko
header("Location: log.php"); //przenosimy na strone
}
else { echo 'Blad logowania, probuj dalej :)'; } //w przypadku zlych danych
}
if(!isset($_SESSION['admin']) && !isset($_SESSION['login']) && $_SESSION['admin'] != 'ok' && !isset($_POST['submit']) && $_GET['p']!='wyloguj' && !isset($_COOKIE['log']))
{
echo'
<form action="log.php" method="POST">
Login:<input type="text" name="login"><br/>
Haslo:<input type="password" name="pass"><br/>
<input type="submit" name="submit" value="Loguj"></form>';
}
if($_SESSION['admin'] == 'ok' && isset($_COOKIE['log'])) //warunek, ktory sprawdza czy sesja ma odpowiednia wartosc oraz czy istnieje ciastko, jest to koniunkcja, wiec bedzie prawdziwa jesli oba warunki zostana spelnione
{
echo 'Jestes zalgowany! jako '.$_SESSION['login'].', <a href="?p=wyloguj">Wyloguj ť</a>';
if($_GET['p']=='wyloguj') {
session_destroy(); //kasujemy sesje
setcookie("log" , "log", time()-3600, "/","", 0); //kasujemy cookies
header("Location: log.php"); //przenosimy na strone logowania
}
}
?>
1. błędy w pierwszym widoku "przed zalogowaniem" :
Notice: Undefined index: admin in C:\xampp\htdocs\test\log.php on line 47
Notice: Undefined index: p in C:\xampp\htdocs\test\log.php on line 47
Notice: Undefined index: admin in C:\xampp\htdocs\test\log.php on line 61
Generalnie rozumiem mniej więcej czego to się czepia ale nie wiem jak to poprawić...
2. błędy w widoku po poprawnym zalogowaniu:
Notice: Undefined index: p in C:\xampp\htdocs\test\log.php on line 67
3. Pytanie: Załóżmy że mam stronę główną na której jest panel logowania.
Użytkownik niezalogowany znając ścierzkę do podstrony "tylko dla zalogowanych" będzie miał możliwość jej oglądania czy Trzeba zrobić na tej stronie warunek typu "jeżeli zalogowany to wyświetl jeżeli nie to komunikat"? dobrze rozumiem ?
Być może brzmi banalnie ale dla mnie to są pierwsze kroki niestety nauka musi przebiegać szokowo tzn. najpierw muszę to zrobić a później dopiero zrozumieć choć wolałabym odwrotnie no ale mus to mus ;]
4. Jak zrobić żeby użytkownik opuszczając stronę automatycznie został wylogowany? czy to jest bardzo ogólnie trudne czy do zrozumienia dla początkującego (nie prosze o gotową receptę tylko o radę czy warto to zrobić itd).