Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]pomoc w poprawieniu znalezionego w sieci skryptu logowania który niemal działa ;]
Forum PHP.pl > Forum > Przedszkole
czarnaowca777
Witam
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

}



}

?>



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).
Kshyhoo
Cytat(czarnaowca777 @ 21.03.2012, 18:45:18 ) *
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

Poszukaj na forum, o co chodzi z "Notice", podpowiem, że nie masz zadeklarowanych zmiennych.
Cytat(czarnaowca777 @ 21.03.2012, 18:45:18 ) *
2. błędy w widoku po poprawnym zalogowaniu:
Notice: Undefined index: p in C:\xampp\htdocs\test\log.php on line 67

j.w.
Cytat(czarnaowca777 @ 21.03.2012, 18:45:18 ) *
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 ?

jak najbardziej trzeba...
Cytat(czarnaowca777 @ 21.03.2012, 18:45:18 ) *
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).

poczytaj o czasie życia sesji i ciasteczek.
czarnaowca777
wiem że nie są zadeklarowane ale nie wiem jak zadeklarować je i gdzie.
Nie za bardzo rozumiem jaką funkcję pełni tutaj 'admin' i 'p' być może dlatego nie wiem jako co powinno to być zadeklarowane.
Chciałabym też wiedzieć po co tam jest coś określone jako filtracja zmiennej?
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.