Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Pewien problem z formularzem logowania...
Szymi_2004
post
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 15.08.2010

Ostrzeżenie: (0%)
-----


Witam!
Jako iż jest to mój pierwszy post na forum pragnę się przywitać - cześć. Do rzeczy. Ostatnio poszukiwałem dobrego i darmowego systemu logowania do systemu, z którego mógłbym zaczerpnąć trochę wiedzy do mojego projektu. Udało mi się znaleźć interesujący a zarazem bardzo prosty w budowie system opierający się na kodzie PHP + bazie MySQL (link do tematu). Niestety brakuje mu podstawowej funkcji, na której mi zależało. Otóż chciałbym, aby użytkownik po zalogowaniu ujrzał swoją stronę, najlepiej o nazwie analogicznej do nicku podanego w systemie. Długo szukałem odpowiedzi w Googlach, niestety wszystkie podawane przykłady po poprawnym zalogowaniu odsyłały wszystkich użytkowników do jednego adresu. Po naprawdę długim przekopywaniu Googli znalazłem rozwiązane przedstawione kodem JavaScript (niestety nie znam się kompletnie na tym języku, dalszą analizę pozostawiam Wam), zamieszczam go poniżej
Kod
var strona=user+ ".html"; form.action=strona;

(link do posta)
Nie mam pojęcia czy w ogóle da się zastosować je przy moim kodzie, za przekierowanie po poprawnym zalogowaniu odpowiada funkcja include, nie wiem do końca czy opłaca się bawić w wpychanie JS do tego. Mówiąc krótko szukam w miarę prostego skryptu, który sprawdzałby nick zalogowanego użytkownika po czym otwierał przypisaną mu stronę zaraz po naciśnięciu "Zaloguj". Kwestię wylogowania użytkownika oraz zabezpieczenia strony przed wizytami nie zalogowanych osób mam już z głowy, pozostał mi tylko ten nieszczęsny aspekt opisany wyżej :/. Z góry dziękuję za pomoc. Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Ramzaa
post
Post #2





Grupa: Zarejestrowani
Postów: 207
Pomógł: 17
Dołączył: 4.08.2009

Ostrzeżenie: (0%)
-----


Za to, co zobaczysz poniżej, należy się Duże piwo, przez duże "D".

Naszą przygodę z logowaniem zaczynamy od utworzenia odpowiedniej tabeli mysql, wygląda ona tak:

1. Tworzymy tabelę `users`, w której będziemy przechowywali wszystkich użytkowników naszej strony.

  1. CREATE TABLE `users` (
  2. `uid` INT( 11 ) NOT NULL AUTO_INCREMENT ,
  3. `name` VARCHAR( 24 ) NOT NULL ,
  4. `password` VARCHAR( 24 ) NOT NULL ,
  5. PRIMARY KEY ( `uid` )
  6. ) ENGINE = MYISAM ;


No i objaśnienie:

  • uid - będziemy tu przechowywali unikalne ID każdego użytkownika
  • name - nazwa użytkownika
  • password - hasło użytkownika


2. Tworzymy plik index.php, a w nim dajemy:

  1. <?php
  2.  
  3. ob_start();
  4. session_start();
  5. require_once("functions.php");
  6.  
  7. connection();
  8.  
  9. ?>
  10.  
  11. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
  12. "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  13. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl">
  14.  
  15. <head>
  16. <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
  17. <title>Logowanie, by Ramza ;)</title>
  18. <link rel="stylesheet" type="text/css" href="styles.css" />
  19. </head>
  20.  
  21. <body>
  22.  
  23. <?php
  24.  
  25. $site = $_GET['site'];
  26.  
  27. if ($site=="") {
  28. include ("glowna.php");
  29. }
  30.  
  31. else {
  32.  
  33. if (is_file("$site.php")) {
  34. include ("$site.php");
  35. }
  36. }
  37.  
  38. ?>
  39.  
  40. </body>
  41.  
  42. </html>


3. Od razu w oczy rzuca się nam linijka z require_once. Tam będziemy trzymali funkcje do łączenia się z naszą bazą danych mysql, która zaraz pod tym wywołujemy (connection()(IMG:style_emoticons/default/winksmiley.jpg) . No dobra, więc stwórzmy ten plik - functions.php

  1. <?php
  2.  
  3. function connection() {
  4.  
  5. $db[] = 'localhost';
  6. $db[] = 'root';
  7. $db[] = '';
  8. $db[] = 'users';
  9.  
  10. mysql_connect($db[0], $db[1], $db[2]) or DIE ("Błąd połączenia z bazą danych, czyli złe dane.");
  11. mysql_select_db($db[3]) or DIE ("Błąd bazy danych MySQL, czyli prawdopodnie zła nazwa bazy.");
  12.  
  13. }
  14.  
  15. ?>

Raczej to powinieneś wiedzieć, więc odpuszczę sobie tłumaczenia.

4. Teraz musimy utworzyć plik odpowiedzialny za rejestrację nowego użytkownika, czyli rejestracja.php

  1. <a href="index.php">Strona główna</a><br /><br />
  2.  
  3. <?php
  4.  
  5. if (isset($_POST['submit'])) {
  6.  
  7. $login = $_POST['login'];
  8. $password = $_POST['password'];
  9. $password2 = $_POST['password2'];
  10.  
  11. if ((empty($login)) OR (empty($password))) {
  12.  
  13. echo 'Musisz wypełnić wszystkie pola!';
  14. return false;
  15.  
  16. }
  17.  
  18. if ($password == $password2) {
  19.  
  20. $usersp = mysql_query("SELECT * FROM `users` WHERE `name` = '$login'");
  21.  
  22. if (!mysql_num_rows($usersp) == 0) {
  23.  
  24. echo 'Taki użytkownik już istnieje!<br /><a href="index.php?site=rejestracja">Powrót</a>';
  25. return false;
  26. }
  27.  
  28. else {
  29.  
  30. echo 'Zostałeś poprawnie zarejestrowany!<br />
  31. <a href="index.php?site=logowanie">Zaloguj się</a>';
  32.  
  33. mysql_query("INSERT INTO `users` (uid, name, password) VALUES (null, '$login', '$password')");
  34. return false;
  35.  
  36. }
  37.  
  38. }
  39.  
  40. else {
  41.  
  42. echo 'Hasła muszą być takie same!';
  43. return false;
  44.  
  45. }
  46.  
  47. }
  48.  
  49. else {
  50.  
  51. echo '<h3>Tworzenie nowego konta:</h3>
  52. <form action="index.php?site=rejestracja" method="POST">
  53. Login: <input type="text" name="login"><br />
  54. Hasło: <input type="password" name="password"><br />
  55. Powtórz hasło: <input type="password" name="password2"><br /><br />
  56. <input type="submit" name="submit" value="Zaloguj się">
  57. </form>';
  58.  
  59. }
  60.  
  61. ?>

4. Dobra, możemy się rejestrować, teraz zrobimy logowanie - logowanie.php.

  1. <a href="index.php">Strona główna</a><br /><br />
  2.  
  3. <?php
  4.  
  5. if (isset($_POST['submit'])) {
  6.  
  7. $login = $_POST['login'];
  8. $password = $_POST['password'];
  9.  
  10. $query = mysql_query("SELECT * FROM `users` WHERE `name` = '$login' AND `password` = '$password'");
  11.  
  12. if(@mysql_num_rows($query)) {
  13.  
  14. echo 'Zostałeś poprawnie zalogowany, jako <strong>'.$login.'</strong>. Witaj!<br />
  15. <a href="index.php">Przejdź na stronę główną.</a>';
  16.  
  17. $_SESSION['zalogowany'] = true;
  18. $_SESSION['login'] = $login;
  19. }
  20.  
  21. else {
  22.  
  23. echo 'Podane dane są błędne!';
  24. return false;
  25.  
  26. }
  27.  
  28.  
  29. return false;
  30.  
  31. }
  32.  
  33. if ($_SESSION['zalogowany']) {
  34. echo ('Witaj <strong>'.$_SESSION['login'].'<br />');
  35. }
  36.  
  37. else {
  38. echo '<h3>Logowanie do serwisu:</h3>
  39. <form action="index.php?site=logowanie" method="POST">
  40. Login: <input type="text" name="login"><br />
  41. Hasło: <input type="password" name="password"><br /><br />
  42. <input type="submit" name="submit" value="Zaloguj się">
  43. </form>';
  44. }
  45.  
  46. ?>

5. I woala, nasza strona jest już prawie gotowa! Teraz dajmy możliwość wylogowania się, tworzymy wylogowanie.php.

  1. <?php
  2.  
  3. header("Location: index.php");
  4.  
  5. ?>

6. Pięknie! Pozostaje nam tylko stworzyć stronę główną naszej strony, czyli glowna.php.

  1. <?php
  2.  
  3. if ($_SESSION['zalogowany']==true) {
  4.  
  5. echo 'Witaj <strong>'.$_SESSION['login'].'</strong> na swojej stronie!<br /><br />
  6. <a href="#">Jakaś strona</a> |
  7. <a href="index.php?site=wylogowanie">Wyloguj się</a>';
  8.  
  9. }
  10.  
  11. else {
  12.  
  13. echo 'Witaj gościu na swojej stronie!<br /><br />
  14. <a href="index.php?site=logowanie">Zaloguj się</a> |
  15. <a href="#">Jakaś strona</a> |
  16. <a href="index.php?site=rejestracja">Rejestracja</a>';
  17.  
  18. }
  19.  
  20. ?>

I tak oto nasza strona jest bogatsza o system rejestracji i logowania użytkowników, a także podatność na ataki xss, sql_injection! Ale o tym to już sobie sam doczytaj, bo specjalnie nie zabezpieczałem, żebyś się nauczył. Leniu (IMG:style_emoticons/default/smile.gif)

Skrypt napisany przeze mnie, można go używać i zmieniać wedle uznania.

Pozdrawiam.

Ten post edytował Ramzaa 16.08.2010, 20:33:28
Go to the top of the page
+Quote Post

Posty w temacie
- Szymi_2004   [MySQL][PHP]Pewien problem z formularzem logowania...   15.08.2010, 23:33:57
- - Rewil   Rozwiń tą wypowiedź: CytatOtóż chciałbym, aby użyt...   15.08.2010, 23:44:12
- - Luneth   Nie, nie, nie, javascript można wyłączyć (ano zdar...   15.08.2010, 23:49:13
- - Szymi_2004   @Rewil: Nie, kod JS przytoczyłem dla zobrazowania ...   16.08.2010, 00:21:48
- - Luneth   1. Najpierw ma się zrobić kod php, potem zostać wy...   16.08.2010, 01:05:35
- - Szymi_2004   Więc tak... Pozwolę sobie sporządzić "instruk...   16.08.2010, 10:33:47
- - Luneth   Zamieść proszę kod po kolei wszystkiego jak leci, ...   16.08.2010, 15:04:29
- - Ramzaa   A spróbuj może tak: [PHP] pobierz, plaintext head...   16.08.2010, 15:23:25
- - Szymi_2004   @Ramzaa: Próbowałem - nadal to samo. OK w takim r...   16.08.2010, 16:04:19
- - Ramzaa   Ja tego nie łapie, jak można uczyć tak bezsensowni...   16.08.2010, 16:42:43
- - Szymi_2004   @Ramzaa: Cóż widocznie autor sam za dużo nie wiedz...   16.08.2010, 18:18:26
- - Ramzaa   Za to, co zobaczysz poniżej, należy się Duże piwo,...   16.08.2010, 20:32:13
- - Szymi_2004   Na początku chciałbym Ci podziękować za trud włożo...   16.08.2010, 23:11:58
- - Ramzaa   Wybacz, że nie opisałem wszystkiego, ale naprawdę ...   16.08.2010, 23:23:24
- - Szymi_2004   Poradziłem sobie z konfiguracją (okazało się, że b...   17.08.2010, 15:23:45
- - kkuubbaa88   chyba nie chcesz robic kazdemu uzytkownikow własne...   17.08.2010, 15:34:01
- - Szymi_2004   @kkuubbaa88: Otóż chcę, taka jest idea projektu. C...   17.08.2010, 15:51:31
- - Ramzaa   Zaraz, zaraz. Jak dobrze zrozumiałem, chodzi Ci o ...   17.08.2010, 16:26:39
- - Szymi_2004   Tak, chciałbym aby każdy użytkownik w systemie mia...   17.08.2010, 19:03:16
- - Ramzaa   Szymi, nie do końca o to mi chodziło, bo to zawsze...   17.08.2010, 19:42:21
- - Szymi_2004   Mój problem jest trochę innej natury, sam profil j...   17.08.2010, 22:28:14
- - Ramzaa   Jak wytłumaczysz do czego Ci to potrzebne to nie m...   17.08.2010, 22:34:46
- - Szymi_2004   Udało mi się! Załączyłem ponownie procedurę fu...   17.08.2010, 22:43:41


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 10.10.2025 - 13:59