Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem ze sprawdzaniem formularza
Forum PHP.pl > Forum > PHP
majesgrudziadz
Jestem nowy więc na początku się przywitam - Cześć smile.gif

Długo się nie bawiłem w php +mysql dlatego też chciałem sobie troszkę przypomnieć jak i z czym to się je.

Zrobiłem panel logowania i zawartości widoczne po zalogowaniu - Działa

Robię formularz rejestracyjny i trochę ugrzązłem ze sprawdzaniem poprawności danych mianowicie:

Formularz wygląda tak z tym nie ma problemu:

CODE
<?
echo"Rejestracja:<br>
<form action=\"index.php?akcja=register\" method=post>
Login: <input class=login type=text name=login></input><br>
Haslo: <input class=login type=password name=pass></input><br>
Haslo: <input class=login type=password name=pass2></input><br>
Nick w grze: <input class=login type=text name=nick></input><br>
Mail: <input class=login type=text name=mail></input><br>
Sojusz: <select name=sojusz>
<option value=\"brak\"'>Wybierz swój sojusz</option>";
$db = mysql_connect( $db_server, $db_user, $db_pass );
mysql_select_db( $db_name );

$qsojusze = mysql_query("SELECT * FROM sojusze WHERE aktywny='1'");

while($sojusze = mysql_fetch_array($qsojusze)) {
echo "<option value=".$sojusze['id'].">".$sojusze['sojusz']."</option>";
}
echo"</select><br>
<input class=submit type=submit value=Rejestruj></input>
</form>";
?>


Ugrzązłem na sprawdzaniu czy:
1. Czy wszystkie pola zostały wypełnione
2. Czy dany login, nick istnieje w bazie jeżeli tak to wyświetla informację o tym nad formularzem oraz pola robią się puste
3. Czy formatowanie adresu mail jest prawidłowe oraz czy istnieje w bazie jeżeli istnieje to j/w
4. Czy pass i pass2 są różne jeżeli tak to j/w

Mianowicie napisałem ten kod lecz zajęło mi to 200 linii i się zapętliłem ... np: jeżeli hasła się nie różnią to od razu rejestruje i nie sprawdza reszty kodu lub jeżeli hasła się różnią to w późniejszej fazie pomija sprawdzanie czy login istnieje w bazie i pomija maila.

Generalnie nie w każdym przypadku wszystko jest sprawdzane.

Czy mógłby mi ktoś napisać taki kod na sprawdzanie formularzy ?
Tzn by sprawdzał czy mail jest w prawidłowym formatowaniu oraz czy nie istnieje w bazie, tak samo z loginem i nickiem czy nie istnieją w bazie oraz czy hasła są identyczne.

Ja niestety się zapętliłem a bardzo by mi to pomogło dodam jeszcze, że nie przeklejam kodu ot tak analizuje go krok po kroku dzięki temu przypominam sobie jak się jasło php + mysql

Z góry dziękuję za pomoc
Uriziel01
Ale nie rozumiem w czym problem ? Jest co najmniej kilka metod, problemu raczej nie widzę, podstawowa składania języka.
Możesz zagnieździć w sobie kilka if'ów w stylu (UWAGA, napisałem to z palca, zapewne zawiera błędy):
Możesz też oprzeć każde sprawdzanie na oddzielnej funkcji, użyć jakiejś klasy
  1. switch(sprawdzanie_formularza())
  2. {
  3. case 1:
  4. echo 'wypelnil wszystkie pola';
  5. break
  6. case 2:
  7. echo 'hasla nie sa identyczne';
  8. break;
  9. case 3:
  10. echo 'to nie jest poprawny adres email';
  11. break
  12. case 4:
  13. echo 'taki nickname jest juz uzywany';
  14. break;
  15. case 5:
  16. echo 'wszystko OK';
  17. break;
  18. }
  19. function sprawdzanie_formularza()
  20. {
  21. if(isset($_POST['nickname']) AND isset($_POST['email']) AND($_POST['password1']) AND ($_POST['password2']))
  22. {
  23. if ($_POST['password1'] == $_POST['password2'])
  24. {
  25. if (is_valid_email($_POST['email']))
  26. {
  27. $row = mysqli_query($link, "SELECT nickname FROM users WHERE nickname == " . $_POST['nickname'] . " LIMIT 1")
  28. if (mysqli_num_rows($row) == 0)
  29. {
  30. return 5
  31. }
  32. else
  33. {
  34. return 4
  35. }
  36. }
  37. else
  38. {
  39. return 3
  40. }
  41. }
  42. else
  43. {
  44. return 2
  45. }
  46. }
  47. else
  48. {
  49. return 1;
  50. }
  51. }
majesgrudziadz
Wydaje mi się, że zrobiłeś tak samo jak i jak tylko, że oparłeś to na funkcji i w ten sposób się zapętliłem gdyż kolejność sprawdzania zależna jest od kolejności wpisywania :/

Mianowicie jeżeli coś poszło nie tak przenosi do formularza z informacją co poszło nie tak.

Nie działa to w 100% bo gdy np: ostatnie zapytanie się zgadza natomiast reszta nie musi to odrazu przechodzi do zapisu :/
Jak to w logiczny i prosty sposób napisać ? Zmieniając to co już mam ?

  1. <?php
  2.  
  3. if( $_GET['akcja']=="register"){
  4.  
  5. if( strlen($_POST['login'])>0 && strlen($_POST['pass'])>0 && strlen($_POST['pass2'])>0 && strlen($_POST['pass2'])>0 && strlen($_POST['nick'])>0 && strlen($_POST['mail'])>0){
  6.  
  7. if( preg_match('/^[_a-z0-9.-]*[a-z0-9]@[_a-z0-9.-]*[a-z0-9].[a-z]{2,3}$/e', $_POST['mail']) ){
  8.  
  9. $db = mysql_connect( $db_server, $db_user, $db_pass );
  10. mysql_select_db( $db_name );
  11. $sprmail = $_POST['mail'];
  12. $mailuj="select mail from users where login='$sprmail'";
  13. $rekmail = mysql_query($mailuj);
  14.  
  15. if(mysql_num_rows($rekmail)==0){
  16.  
  17. $db = mysql_connect( $db_server, $db_user, $db_pass );
  18. mysql_select_db( $db_name );
  19. $sprlogin = $_POST['login'];
  20. $loguj="select login from users where login='$sprlogin'";
  21. $reklogin = mysql_query($loguj);
  22.  
  23. $sprnick = $_POST['nick'];
  24. $nickuj="select nick from users where nick='$sprnick'";
  25. $reknick = mysql_query($nickuj);
  26.  
  27. if(mysql_num_rows($reklogin)==0 && mysql_num_rows($reknick)==0){
  28.  
  29. if( $_POST['pass'] == $_POST['pass2'] ) {
  30.  
  31. echo"Twoje konto zostało zarejestrowane.<br>Został wysłany link aktywacyjny na podany adres mail przy rejestracji.<br>Jeżeli w ciągu 24h nie zaktywujesz konta zostanie ono automatycznie usunięte.<br><br>Dane które podałeś podczas rejestracji:<br>";
  32. echo "Login: ".$_POST['login']."<br>";
  33. echo "Hasło: **********<br>";
  34. echo "Nick: ".$_POST['nick']."<br>";
  35. echo "Mail: ".$_POST['mail']."<br>";
  36.  
  37. if( $_POST['sojusz'] == 'brak' ){
  38. echo "Na liście nie było twojego sojuszu.<br>";
  39. }else{
  40. echo "Sojusz:".$_POST['sojusz']."<br>";
  41. }
  42. echo "<br>Pamiętaj, że konto posiada dwu stopniowy proces aktywacji:<br>";
  43. echo "1. Aktywacja poprzez adres mail.<br>";
  44. echo "2. Dowódca lub rada sojuszu musi zaktywować twoje konto aby było ono wpełni funkcjonalne.<br>";
  45.  
  46. }else{
  47. Rejestracja:<br>
  48. Hasła nie pasują do siebie.<br>
  49. <form action=\"index.php?akcja=register\" method=post>
  50. Login: <input class=login type=text name=login value=".$_POST['login']."></input><br>
  51. Haslo: <input class=login type=password name=pass></input><br>
  52. Haslo: <input class=login type=password name=pass2></input><br>
  53. Nick w grze: <input class=login type=text name=nick value=".$_POST['nick']."></input><br>
  54. Mail: <input class=login type=text name=mail value=".$_POST['mail']."></input><br>
  55. Sojusz: <select name=sojusz>
  56. <option value=\"brak\"'>Wybierz swĂłj sojusz</option>";
  57. $db = mysql_connect( $db_server, $db_user, $db_pass );
  58. mysql_select_db( $db_name );
  59.  
  60. $qsojusze = mysql_query("SELECT * FROM sojusze WHERE aktywny='1'");
  61.  
  62. while($sojusze = mysql_fetch_array($qsojusze)) {
  63. echo "<option value=".$sojusze['id'].">".$sojusze['sojusz']."</option>";
  64. }
  65. echo"</select><br>
  66. <input class=submit type=submit value=Rejestruj></input>
  67. </form>";
  68. }
  69.  
  70.  
  71. }else{
  72. Rejestracja:<br>
  73. Login lub Nick juĹĽ istnieje.<br>
  74. <form action=\"index.php?akcja=register\" method=post>
  75. Login: <input class=login type=text name=login></input><br>
  76. Haslo: <input class=login type=password name=pass></input><br>
  77. Haslo: <input class=login type=password name=pass2></input><br>
  78. Nick w grze: <input class=login type=text name=nick></input><br>
  79. Mail: <input class=login type=text name=mail value=".$_POST['mail']."></input><br>
  80. Sojusz: <select name=sojusz>
  81. <option value=\"brak\"'>Wybierz swĂłj sojusz</option>";
  82. $db = mysql_connect( $db_server, $db_user, $db_pass );
  83. mysql_select_db( $db_name );
  84.  
  85. $qsojusze = mysql_query("SELECT * FROM sojusze WHERE aktywny='1'");
  86.  
  87. while($sojusze = mysql_fetch_array($qsojusze)) {
  88. echo "<option value=".$sojusze['id'].">".$sojusze['sojusz']."</option>";
  89. }
  90. echo"</select><br>
  91. <input class=submit type=submit value=Rejestruj></input>
  92. </form>";
  93.  
  94. }
  95.  
  96. }else{
  97. Rejestracja:<br>
  98. Adres mail juĹĽ istnieje.<br>
  99. <form action=\"index.php?akcja=register\" method=post>
  100. Login: <input class=login type=text name=login value=".$_POST['login']."></input><br>
  101. Haslo: <input class=login type=password name=pass></input><br>
  102. Haslo: <input class=login type=password name=pass2></input><br>
  103. Nick w grze: <input class=login type=text name=nick value=".$_POST['nick']."></input><br>
  104. Mail: <input class=login type=text name=mail></input><br>
  105. Sojusz: <select name=sojusz>
  106. <option value=\"brak\"'>Wybierz swĂłj sojusz</option>";
  107. $db = mysql_connect( $db_server, $db_user, $db_pass );
  108. mysql_select_db( $db_name );
  109.  
  110. $qsojusze = mysql_query("SELECT * FROM sojusze WHERE aktywny='1'");
  111.  
  112. while($sojusze = mysql_fetch_array($qsojusze)) {
  113. echo "<option value=".$sojusze['id'].">".$sojusze['sojusz']."</option>";
  114. }
  115. echo"</select><br>
  116. <input class=submit type=submit value=Rejestruj></input>
  117. </form>";
  118.  
  119. }
  120.  
  121. }else{
  122.  
  123. Rejestracja:<br>
  124. Wpisz prawidłowy adres mail.<br>
  125. <form action=\"index.php?akcja=register\" method=post>
  126. Login: <input class=login type=text name=login value=".$_POST['login']."></input><br>
  127. Haslo: <input class=login type=password name=pass></input><br>
  128. Haslo: <input class=login type=password name=pass2></input><br>
  129. Nick w grze: <input class=login type=text name=nick value=".$_POST['nick']."></input><br>
  130. Mail: <input class=login type=text name=mail></input><br>
  131. Sojusz: <select name=sojusz>
  132. <option value=\"brak\"'>Wybierz swĂłj sojusz</option>";
  133. $db = mysql_connect( $db_server, $db_user, $db_pass );
  134. mysql_select_db( $db_name );
  135.  
  136. $qsojusze = mysql_query("SELECT * FROM sojusze WHERE aktywny='1'");
  137.  
  138. while($sojusze = mysql_fetch_array($qsojusze)) {
  139. echo "<option value=".$sojusze['id'].">".$sojusze['sojusz']."</option>";
  140. }
  141. echo"</select><br>
  142. <input class=submit type=submit value=Rejestruj></input>
  143. </form>";
  144.  
  145. }
  146.  
  147.  
  148. }else{
  149. Rejestracja:<br>
  150. Wypełnij brakujące pola.<br>
  151. <form action=\"index.php?akcja=register\" method=post>
  152. Login: <input class=login type=text name=login value=".$_POST['login']."></input><br>
  153. Haslo: <input class=login type=password name=pass></input><br>
  154. Haslo: <input class=login type=password name=pass2></input><br>
  155. Nick w grze: <input class=login type=text name=nick value=".$_POST['nick']."></input><br>
  156. Mail: <input class=login type=text name=mail value=".$_POST['mail']."></input><br>
  157. Sojusz: <select name=sojusz>
  158. <option value=\"brak\"'>Wybierz swĂłj sojusz</option>";
  159. $db = mysql_connect( $db_server, $db_user, $db_pass );
  160. mysql_select_db( $db_name );
  161.  
  162. $qsojusze = mysql_query("SELECT * FROM sojusze WHERE aktywny='1'");
  163.  
  164. while($sojusze = mysql_fetch_array($qsojusze)) {
  165. echo "<option value=".$sojusze['id'].">".$sojusze['sojusz']."</option>";
  166. }
  167. echo"</select><br>
  168. <input class=submit type=submit value=Rejestruj></input>
  169. </form>";
  170. }
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177. }else{
  178. Rejestracja:<br>
  179. <form action=\"index.php?akcja=register\" method=post>
  180. Login: <input class=login type=text name=login></input><br>
  181. Haslo: <input class=login type=password name=pass></input><br>
  182. Haslo: <input class=login type=password name=pass2></input><br>
  183. Nick w grze: <input class=login type=text name=nick></input><br>
  184. Mail: <input class=login type=text name=mail></input><br>
  185. Sojusz: <select name=sojusz>
  186. <option value=\"brak\"'>Wybierz swĂłj sojusz</option>";
  187. $db = mysql_connect( $db_server, $db_user, $db_pass );
  188. mysql_select_db( $db_name );
  189.  
  190. $qsojusze = mysql_query("SELECT * FROM sojusze WHERE aktywny='1'");
  191.  
  192. while($sojusze = mysql_fetch_array($qsojusze)) {
  193. echo "<option value=".$sojusze['id'].">".$sojusze['sojusz']."</option>";
  194. }
  195. echo"</select><br>
  196. <input class=submit type=submit value=Rejestruj></input>
  197. </form>";
  198.  
  199. }
  200.  
  201. ?>
Uriziel01
Cytat(majesgrudziadz @ 1.02.2012, 14:40:00 ) *
Nie działa to w 100% bo gdy np: ostatnie zapytanie się zgadza natomiast reszta nie musi to odrazu przechodzi do zapisu :/
Jak to w logiczny i prosty sposób napisać ? Zmieniając to co już mam ?


Że co ? Jeżeli jaki kolwiek krok się nie powiedzie to cały proces zostaje przerwany i zwrócony zostaje kod błędu, tak że dodatkowo wiesz co dokładnie poszło nie tak. I z pewnością nie 'przechodzi do zapisu' gdy jedynie jedna część jest prawdziwa.
majesgrudziadz
Dokładnie tak zrobiłem twoim sposobem i jest ok smile.gif Dzięki smile.gif Ja jakoś na okrętkę szedłem smile.gif
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.