Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Rejestracja w krokach za pomocą sesji
Forum PHP.pl > Forum > Przedszkole
greenghost
Witam.
Nie ukrywam, że posługuję się sesjami zaledwie od paru godzin a całym php chyba drugi dzień. Moim celem jest rejestracja w dwóch krokach. W pierwszym pobieramy login oraz hasło, i wysyłamy je do sesji a drugi krok ma odczytać dane z kroku pierwszego, pobrać parę innych zmiennych i utworzyć wpis w bazie danych test w tabeli user. Konfiguracja połączenia bazy danych jak łatwo się domyślić jest zawarta w conn.php. Dodatkowo skrypt sprawdza czy użytkownik jest zalogowany, jeśli tak, to nie wyświetlają mu się okna do tworzenia konta.

  1. <?php
  2. require('conn.php');
  3. include("head.php");
  4. if (isset($_SESSION['user_id']) and isset($_SESSION['login']))
  5. {
  6. ?>
  7. <h1>
  8. <?
  9. echo "Nie możesz utworzyć nowego konta, ponieważ jeste? zalogowany jako: ";
  10. echo $_SESSION['login'];
  11. ?>
  12. <form action="logout.php" method="post">
  13. <input type="submit" value="Wyloguj" />
  14. </form>
  15. <h1/>
  16. <?
  17. }
  18. else
  19. {
  20. ?>
  21. <h1>
  22. <?
  23. if (isset($_POST['konto']) and isset($_POST['password']) and isset($_POST['password2']))
  24. {
  25. if ($_POST['password']==$_POST['password2'])
  26. {
  27. $konto = mysql_real_escape_string (trim($_POST['konto']));
  28. $password = sha1(md5(mysql_real_escape_string (trim($_POST['password']))));
  29. $ile =mysql_query("SELECT * FROM `user` WHERE login = '$konto'");
  30. $ile = mysql_num_rows($ile);
  31. if ($ile==0)
  32. {
  33. $zapytanie= ($_SESSION['krok_login']=$konto and $_SESSION['krok_pass']=$password);
  34. }
  35. else
  36. {
  37. echo("Taki użytkownik już istnieje, kliknij wstecz aby zarejestrować się ponownie.");
  38. }
  39. }
  40. else echo ("Podane hasła nie zgadzaj? się!");
  41. }
  42. elseif (isset($_SESSION['krok_login']) and isset($_SESSION['krok_pass']))
  43. {
  44. if (isset($_POST['imie']) and isset($_POST['plec']) and isset($_POST['wioska']) and isset($_POST['natura']))
  45. {
  46. $krok_login = session_name("krok_login");
  47. $krok_pass = session_name("krok_pass");
  48. $imie = mysql_real_escape_string (trim($_POST['imie']));
  49. $plec = mysql_real_escape_string (trim($_POST['plec']));
  50. $wioska = mysql_real_escape_string (trim($_POST['wioska']));
  51. $natura = mysql_real_escape_string (trim($_POST['natura']));
  52. $ile2 =mysql_query("SELECT * FROM `user` WHERE imie = '$imie'");
  53. $ile2 = mysql_num_rows($ile2);
  54. if ($ile2==0)
  55. {
  56. $zapytanie2= "INSERT INTO user (login,password,imie,plec,wioska,natura) VALUES('$krok_login','$krok_pass','$imie',$plec','$wioska','$natura')";
  57. mysql_query($zapytanie2) or die("Wyst?pił bł?d" );
  58. echo('Konto '.$konto.' o loginie '.login.' zostalo pomy?lnie kurwa utworzone!');
  59. }
  60. else
  61. {
  62. echo("To imię jest w użyciu.");
  63. }
  64. }
  65. else
  66. {
  67. ?>
  68. <h1>Dalsza cze?ć rejestracji.</h1>
  69. <form action="register2.php" method="post">
  70. <table style="text-align: right; width: 250px;">
  71. <tr>
  72. <td>
  73. Imię:
  74. </td>
  75. <td>
  76. <input name="imie" type="text" value="" />
  77. </td>
  78. </tr>
  79. <tr>
  80. <td>
  81. Płeć:
  82. </td>
  83. <td>
  84. <input type="radio" name="plec" value="facet" checked="checked" />Mężczyzna
  85. <input type="radio" name="plec" value="baba" />Kobieta
  86. </td>
  87. </tr>
  88. <tr>
  89. <td>
  90. Wioska:
  91. </td>
  92. <td>
  93. <select name="wioska">
  94. <option value="konoha">Konoha-Gakure</option>
  95. <option value="suna">Suna-Gakure</option>
  96. <option value="kiri">Kiri-Gakure</option>
  97. <option value="kumo">Kumo-Gakure</option>
  98. <option value="iwa">Iwa-Gakure</option>
  99. <option value="oto">Oto-Gakure</option>
  100. </select>
  101. </td>
  102. </tr>
  103. <tr>
  104. <td>
  105. Natura chakry:
  106. </td>
  107. <td>
  108. <select name="natura">
  109. <option value="wiatr">Wiatr</option>
  110. <option value="woda">Woda</option>
  111. <option value="ogien">Ogień</option>
  112. <option value="ziemia">Ziemia</option>
  113. <option value="blysk">Błyskawica</option>
  114. </select>
  115.  
  116. </td>
  117. </tr>
  118. </table>
  119. <table style="text-align: center; width: 250px;">
  120. <tr>
  121. <td>
  122. <input type="submit" value="Zarejestruj" />
  123. </td>
  124. <tr>
  125. </table>
  126. </form>
  127. <?
  128. }
  129. }
  130. else
  131. {
  132. ?>
  133. Dodaj nowego użytkownika.</h1>
  134. <form action="register2.php" method="post">
  135. <table style="text-align: right; width: 250px;">
  136. <tr>
  137. <td>
  138. Nazwa konta:
  139. </td>
  140. <td>
  141. <input name="konto" type="text" value="" />
  142. </td>
  143. </tr>
  144. <tr>
  145. <td>
  146. Hasło:
  147. </td>
  148. <td>
  149. <input name="password" type="password" value="" />
  150. </td>
  151. </tr>
  152. <tr>
  153. <td>
  154. Powtórz hasło:
  155. </td>
  156. <td>
  157. <input name="password2" type="password" value="" />
  158. </td>
  159. </tr>
  160. </table>
  161. <table style="text-align: center; width: 250px;">
  162. <tr>
  163. <td>
  164. <input type="submit" value="Zarejestruj" />
  165. </td>
  166. <tr>
  167. </table>
  168. </form>
  169.  
  170. <?
  171. }
  172. }
  173. include("foot.php");
  174. ?>
  175.  


Problemy są dwa.
Pierwszym jest to, że po wprowadzeniu "pierwszych" danych (loginu i hasła), strona pozostaje pusta, i muszę ją odświeżyć, aby przejść do drugiego kroku.
Drugim problemem jest to, że po wszystkim, skrypt nie tworzy żadnych wpisów w bazie danych, wyświetla się jedynie napis "Wystąpił błąd". Mniemam, że błąd znajduje się w linijkach 48-49. Proszę o naprawienie skryptu, ewentualnie nakierowanie mnie na dobrą drogę poprzez wskazanie mi funkcji jaką muszę użyć.
Rysh
Spróbuj tego... mogą być drobne błędy (zabezpieczyć sam sobie musisz).
  1. <?php
  2. if(!isset($_SESSION['id']) {
  3. $_SESSION['id'] = 0; // 0 oznacza niezalogowanego
  4. }
  5.  
  6. if(isset($_POST['zarejestruj'])) {
  7. //musisz sprawdzić czy istnieje uzytkownik o takim loginie jesli nie istnieje przechodzisz dalej
  8. if($_POST['haslo'] == $_POST['hasloo']) {
  9. mysql_query("INSERT INTO `users` (`login` ,`haslo`) VALUES ('". $_POST['login'] ."', '". md5($_POST['haslo'] ."')") or die ("Bład bla bla bla: ". mysql_error());
  10. }
  11. }
  12.  
  13. if(isset($_POST['zaloguj'])) {
  14. $zapytanie = mysq_query("SELECT id FROM users WHERE `login`='". $_POST['login'] ."' AND `haslo`='". md5($_POST['haslo']) ."'") or die ("Bład bla bla bla: ". mysql_error());
  15. while(true == $dane = mysql_fetch_assoc($zapytanie)) {
  16. $_SESSION['id'] = $dane['id'];
  17. }
  18. }
  19.  
  20. if ($_SESSION['id'] == 0) {
  21. //formularz (logowania)
  22. echo "<input type='text' name='login' />\n";
  23. echo "<input type='password' name='haslo' />\n";
  24. echo "<input type='submit' name='zaloguj' value='Zaloguj' />\n";
  25.  
  26. //formularz (rejestracji)
  27. echo "<input type='text' name='login' />\n";
  28. echo "<input type='password' name='haslo' />\n";
  29. echo "<input type='password' name='hasloo' />\n";
  30. echo "<input type='submit' name='zarejestruj' value='Zarejestruj' />\n";
  31. } else {
  32. //strona dla zalogowanego
  33. }
  34.  
  35. ?>


Jeśli chcesz coś dorobić wzoruj się na tym kodzie.
I tak przy okazji, nigdy nie pobieraj hasła do skryptu!
  1. $ile =mysql_query("SELECT * FROM `user` WHERE login = '$konto'");

Lepiej zrobić to od razu w mysql... patrz linijka 15 w tym co napisałem.

Edit:
Cytat
mysql_query($zapytanie2) or die("Wyst?pił bł?d" );
echo('Konto '.$konto.' o loginie '.login.' zostalo pomy?lnie kurwa utworzone!');
session_unset();
session_destroy();

Po co session_unset oraz session_destroy?
Kolejne, w echo masz '. login .' nie powinno być $login? (o pięknym wyrazie na k nie wspominam...).
Co do wysyłania zapytania dopisuj sobie zawsze:
Kod
mysql_query($zapytanie) or die ("Błąd: ". mysql_error());

Łatwiej Ci będzie zlokalizować błąd.
maxil
tylko uważaj na MySQL Injection smile.gif
Rysh
SQL Infection to podstawa, dlatego zaznaczyłem to w moim poście winksmiley.jpg
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.