Kamil995 Napisano Sierpień 12 Zgłoś Share Napisano Sierpień 12 Witam, dziś pokaże wam jak zrobić prosty skrypt logowania i rejestracji na podstawie funkcji. Zaczynamy od utworzenia odpowiedniej tabeli CREATE TABLE `portalsi_site`.`users` (`id` TINYINT NOT NULL AUTO_INCREMENT ,`name` VARCHAR( 32 ) NOT NULL ,`pass` TEXT NOT NULL ,`mail` VARCHAR( 54 ) NOT NULL ,`gg` VARCHAR( 20 ) NOT NULL ,PRIMARY KEY ( `id` ) ) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci [/SQL]Skoro mamy już tabelę możemy zacząć pisać kod. Na początku musimy stworzyć plik konfiguracyjny, który połączy nas z bazą[PHP]<? $connection = @mysql_connect('host', 'uzytkownik', 'haslo') or die('Nie można połączyć z bazą danych.<br />Błąd: '.mysql_error()); $db = @mysql_select_db('nazwa_bazy', $connection) or die('Nie mogę połączyć z bazą danych<br />Błąd: '.mysql_error()); ?>[/PHP]Zapisujemy to jako plik [b]config.php[/b].Zaczynamy od pliku [b]register.php[/b][PHP] <?phpinclude("config.php");//Ważne aby config.php byl w tym samym katalogu co register.phpfunction registerForm() { //Formularz rejestracji ?> <form method="POST"> Nazwa:<br /> <input type="text" name="name" /><br /> Hasło:<br /> <input type="password" name="pass" /><br /> E-mail:<br /> <input type="text" name="mail" /><br /> Gadu-Gadu:<br /> <input type="text" name="gg" /><br /> <input type="submit" name="submit" value="Rejestracja" /><br /> <?php}function register() { //Funkcja rejestracji //Odbieramy dane $name = $_POST['name']; $pass = md5($_POST['pass']); $mail = $_POST['mail']; $gg = $_POST['gg']; //Zmienna błedu $error = false; //Sprawdzamy czy wypełnione są pola nazwa, haslo i email if(empty($name)||empty($pass)||empty($mail)) { echo "Nie wypełniono wszystkich pól!<br />"; //Jesli nie wypelniono $error = true; } //Dodajemy do bazy jeżeli nie ma błedów if(!$error) { $query = "INSERT INTO `users` (`id`, `name`, `pass`, `mail`, `gg`) VALUES ('', '$name', '$pass', '$mail', '$gg');"; $result = mysql_query($query); echo "Zarejestrowano poprawnie, <a href=login.php>możesz się teraz zalogować!</a><br />"; }}//Teraz wywołujemy funkcje ifem if(isset($_POST['submit'])) { //Jeżeli wyslano formularz ;d register();} else { //Jeżeli nie wyslano registerForm();}?>[/PHP]Rejestracje mamy już za sobą, teraz pozostał tylko plik [b]login.php[/b][PHP] <?phpsession_start();include("config.php");//Funkcja formularza logowaniafunction loginForm() { ?> <form method="POST"> Login:<br /> <input type="text" name="name" /><br /> Hasło:<br /> <input type="password" name="pass" /><br /> <input type="submit" name="submit" value="Zaloguj" /> </form> <?php}//Teraz funkcja odpowiadająca za zalogowaniefunction login() { //Odbieramy dane $name = $_POST['name']; $pass = md5($_POST['pass']); $error = false; //Sprawdzamy puste pola if(empty($name)||empty($pass)) { echo "Nie wypełniono wszystkich pól!<br />"; $error = true; } //Sprawdzamy czy w bazie istnieje taki użytkownik i logujemy $query = "SELECT * FROM users WHERE name = '$name' AND pass = '$pass'"; $result = mysql_query($query); $dane = mysql_fetch_array($result); if($name == $dane['name'] && $pass == $dane['pass'] && !$error) { //Tu oczywiście możemy wczytać takie wartosci jakie chcemy $_SESSION['loged'] = true; $_SESSION['nick'] = $dane['name']; $_SESSION['gg'] = $dane['gg']; $_SESSION['mail'] = $dane['mail']; echo "Zostałeś poprawnie zalogowany!<br />"; } else { echo "Nie można zalogować, <a href=login.php>spróbój ponownie.</a><br />"; }}//Wczytujemy funkcjeif(isset($_POST['submit'])) { //Jesli wyslano formularz login();} else { //Jesli nie wyslano loginForm();}?>PHP]I taki mały „bajer” na sprawdzenie w postaci [b]index.php[/b][PHP] <?phpsession_start();header("Content-Type: text/html; charset=utf8");include("config.php");if($_SESSION['loged']) { echo 'Witaj '.$_SESSION['nick'].'<br />Twój e-mail to: '.$_SESSION['mail'].'<br />A gg: '.$_SESSION['gg'].'.';} else { echo '<a href=register.php>Zarejestruj się </a><a href=login.php>lub zaloguj.</a>';}?>[/PHP]Miłej zabawy w PHP, myślę że pomogłem Skrypt sprawdzony, u mnie działa 3 Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
WisJa Napisano Grudzień 25 Zgłoś Share Napisano Grudzień 25 Może i działa, ale widzę kilka problemów. Pierwszy to at przy połączeniu. Jest to ignorowanie na siłę błędów. Nie jest to raczej dobre rozwiązanie. Lepiej żeby błąd się na wyświetlił, żebyśmy wiedzieli co poprawić. Drugim, już poważniejszym jest zapisywanie statusu oraz danych w sesji. Można ją podrobić i łatwo podszyć się pod innego użytkownika. Najlepiej jest to zrobić przy użyciu MySQL tworząc tabelę z sesjami. W sesji w przeglądarce zapisywać tylko losowe id sesji a przy logowaniu dodawać do tabeli rekord z ip użytkownika, id sesji oraz czasem przeliczonym na minuty. Aby sprawdzić czy użytkownik jest zalogowany wykonujemy zapytanie, w którym sprawdzamy czy istnieje sesja o id zapisanym w sesji w przeglądarce, ip użytkownika oraz o czasie większym od aktualnego (również przeliczonego na minuty) -5. W ten sposób zbudujemy dużo bezpieczniejszy skrypt. Znajdę trochę czasu to zaprezentuje dokładniej PS: po co tworzysz funkcję, której używasz tylko raz? Funkcję tworzymy po to, aby nie musieć bawić się w pisanie danego fragmentu kodu kilka(naście) razy. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
WisJa Napisano Grudzień 26 Zgłoś Share Napisano Grudzień 26 Ok. Oto - myślę - porządny skrypt logowania: Tworzenie tabeli w mysql pozostawiamy takie jak u kolegi, skrypt register.php też. Jeśli chodzi o plik cofing.php to optymalnie będzie to wyglądało tak: <?php mysql_select_db('nazwa_bazy', mysql_connect('host', 'user', 'password')) or die ('Nie udało się nawiązać połączenia z bazą danych'); ?> Czas na utworzenie w bazie danych tabeli z sesjami. Wygląda to tak: CREATE TABLE `session` ( `id` INT NOT NULL AUTO_INCREMENT , `time` INT NOT NULL , `sess` INT NOT NULL , `ip` TEXT NOT NULL , `user` TEXT NOT NULL , `gg` TEXT NOT NULL , `mail` TEXT NOT NULL , PRIMARY KEY ( `id` ) ) TYPE = MYISAM ; Przejdźmy teraz do pliku login.php: <form method="POST"> Login:<br /> <input type="text" name="name" /><br /> Hasło:<br /> <input type="password" name="pass" /><br /> <input type="submit" name="submit" value="Zaloguj" /> </form> <?php include('cofing.php'); if(isset($_POST['submit'])) { $name = $_POST['name']; $pass = md5($_POST['pass']); $q=mysql_query("SELECT * FROM `users` WHERE `name`='".$name."' AND `pass`='".$pass."';"); //szukamy w tabeli usera o podanym loginie i haśle $r=mysql_num_rows($q); if($r==1) //sprawdzamy czy user istnieje { $sess=rand(0000001, 9999999); //losujemy session id $time = (date(Y)*(365+date(L))*24*60)+(date(z)*24*60)+(date(H)*60)+date(i); //zamieniamy czas na minuty mysql_query("INSERT INTO `session`(`time`, `sess`, `ip`, `user`) VALUES('".$time."', '".$sess."', '".$_SERVER['REMOTE_ADDR']."', '".$name."');"); //dodajemy rekord do tabeli z sesjami $_SESSION['sess']=$sess; echo"Zostałeś poprawnie zalogowany. <a href=\"index.php\">Przejdź do strony głównej.</a>"; } else echo'Podano złe dane.'; } ?> Teraz czas na plik logged.php, który będzie miał za zadanie sprawdzanie czy user jest zalogowany. include('cofing.php'); $time = (date(Y)*(365+date(L))*24*60)+(date(z)*24*60)+(date(H)*60)+date(i)-5; //obecny czas przeliczony na minuty -5 $q = mysql_query("SELECT * FROM `session` WHERE `ip` = '".$_SERVER["REMOTE_ADDR"]."' AND `sess` = '".$_SESSION['sess']."' AND `time` > '".$time."';"); //Sprawdzamy czy sesja istnieje w tabeli $r = mysql_num_rows($q); if ($r != 0) { $logged = true; $t = (date(Y)*(365+date(L))*24*60)+(date(z)*24*60)+(date(H)*60)+date(i); mysql_query("UPDATE `session` SET `time` = '".$t."' WHERE `ip` = '".$_SERVER["REMOTE_ADDR"]."' AND `sess` = '".$_SESSION['sess']."';"); } // Jeśli rekord istnieje modyfikujemy go na obecny czas Aby sprawdzić czy user jest zalogowany dołączamy ten plik i sprawdzamy czy $logged==true; Dziękuje za uwagę i powodzenie:) Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
deniol13 Napisano Styczeń 30 Zgłoś Share Napisano Styczeń 30 no tak, a bezpieczeństwo nie ma znaczenia ? dodanie w kilku miejscach mysql_real_escape_string pomoże... co do hashowanie to md5 można łatwo złamać... dodawajcie jakąś sól np <?php $salt ='this is the salt'; echo md5($salt.$_POST['haslo']); ?> Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
WisJa Napisano Styczeń 30 Zgłoś Share Napisano Styczeń 30 To może zamiast md5 sh1/sh2 itd... ? Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Monter Napisano Czerwiec 17 Zgłoś Share Napisano Czerwiec 17 Może odkopuje temat, ale skrypty są narażone na tzw. Sql Injection, proponuje przed zapytaniem o login i hasło dodać add_slashes(). I nie radzę używać "$login", jeżeli przekazujecie przez POST to $_POST['login'], czysta głupota i nic więcej. Wystarczy przesłać zmienną przez GET i już nie musimy używać formularza.. Radzę zmienić: $name=addslashes($_POST['name']); $pass=addslashes($_POST['pass']); $q=mysql_query("SELECT * FROM `users` WHERE `name`='".$name."' AND `pass`='".$pass."';"); Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
pprog Napisano Grudzień 6 Zgłoś Share Napisano Grudzień 6 Odkopujesz temat i wypisujesz głupoty. Nie można na hamca dodawać slashy, bo może być włączona funkcja Magic Quotes. Dość dobra I PODSTAWOWA funkcja do filtrowania zmiennych, opiera się przedewszystkim na usunięciu niebezpiecznych znaków: function filtruj($zmienna) { if(get_magic_quotes_gpc()) $zmienna = stripslashes($zmienna); // usuwamy slashe // usuwamy spacje, tagi html oraz niebezpieczne znaki return mysql_real_escape_string(htmlspecialchars(trim($zmienna))); } Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.