Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Błąd w kodzie?
Forum PHP.pl > Forum > Przedszkole
soldiernr1
Kod to plik rejestracja.php. Dodałem do kodu dodatkową daną: nazwisko. Po wypełnieniu wszystkich pól i kliknięciu Wyslij wyswietla komunikat: Rejestracja nie powiodła się, popraw następujące błędy:
Musisz wypełnić wszystkie pola!

  1. <?php include("config.php");
  2.  
  3. $ip = $_SERVER['REMOTE_ADDR'];
  4.  
  5. $akcja = $_GET['akcja'];
  6. if ($akcja == wykonaj) {
  7. //
  8. $nazwisko = substr(addslashes(htmlspecialchars($_POST['nazwisko'])),0,32);
  9. $nick = substr(addslashes(htmlspecialchars($_POST['nick'])),0,32);
  10. $haslo = substr(addslashes($_POST['haslo']),0,32);
  11. $vhaslo = substr($_POST['vhaslo'],0,32);
  12. $email = substr($_POST['email'],0,32);
  13. $vemail = substr($_POST['vemail'],0,32);
  14. $nick = trim($nick);
  15. //kilka sprawdzen co do nicku i maila
  16. $spr1 = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM uzytkownicy WHERE nick='$nick' LIMIT 1")); //czy user o takim nicku istnieje
  17. $spr2 = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM uzytkownicy WHERE email='$email' LIMIT 1")); // czy user o takim emailu istnieje
  18. $pos = strpos($email, "@");
  19. $pos2 = strpos($email, ".");
  20. $emailx = explode("@", $email);
  21. if ($emailx[1] == 'o2.pl') {
  22. $emailx1 = $emailx[0].'@go2.pl';
  23. $emailx2 = $emailx[0].'@tlen.pl';
  24. $spr3 = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM uzytkownicy WHERE email='$emailx1' OR `email`='$emailx2' LIMIT 1"));
  25. }elseif ($emailx[1] == 'go2.pl') {
  26. $emailx1 = $emailx[0].'@o2.pl';
  27. $emailx2 = $emailx[0].'@tlen.pl';
  28. $spr3 = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM uzytkownicy WHERE email='$emailx1' OR `email`='$emailx2' LIMIT 1"));
  29. }elseif ($emailx[1] == 'tlen.pl') {
  30. $emailx1 = $emailx[0].'@go2.pl';
  31. $emailx2 = $emailx[0].'@o2.pl';
  32. $spr3 = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM uzytkownicy WHERE email='$emailx1' OR `email`='$emailx2' LIMIT 1"));
  33. }
  34. $komunikaty = '';
  35. $spr4 = strlen($nick);
  36. $spr5 = strlen($haslo);
  37. //sprawdzenie co uzytkownik zle zrobil
  38. if (!$nazwisko ||!$nick || !$email || !$haslo || !$vhaslo || !$vemail ) {
  39. $komunikaty .= "Musisz wypełnić wszystkie pola!<br>"; }
  40. if ($spr4 < 4) {
  41. $komunikaty .= "Login musi mieć przynajmniej 4 znaki<br>"; }
  42. if ($spr5 < 4) {
  43. $komunikaty .= "Hasło musi mieć przynajmniej 4 znaki<br>"; }
  44. if ($spr1[0] >= 1) {
  45. $komunikaty .= "Ten login jest zajęty!<br>"; }
  46. if ($spr2[0] >= 1) {
  47. $komunikaty .= "Ten e-mail jest już używany!<br>"; }
  48. if ($email != $vemail) {
  49. $komunikaty .= "E-maile się nie zgadzają ...<br>";}
  50. if ($haslo != $vhaslo) {
  51. $komunikaty .= "Hasła się nie zgadzają ...<br>";}
  52. if ($pos == false OR $pos2 == false) {
  53. $komunikaty .= "Nieprawidłowy adres e-mail<br>"; }
  54. if ($spr3[0] >= 1) {
  55. $komunikaty .= "Nie można zarejestrować kilku kont na jedną pocztę o2.<br>"; }
  56.  
  57. //jesli cos jest nie tak to blokuje rejestracje i wyswietla bledy
  58. if ($komunikaty) {
  59. <b>Rejestracja nie powiodła się, popraw następujące błędy:</b><br>
  60. '.$komunikaty.'<br>';
  61. } else {
  62. //jesli wszystko jest ok dodaje uzytkownika i wyswietla informacje
  63. $nick = str_replace ( ' ','', $nick );
  64. $haslo = md5($haslo); //szyfrowanie hasla
  65.  
  66. mysql_query("INSERT INTO `uzytkownicy` (nazwisko, nick, email, haslo, ip) VALUES('$nazwisko','$nick','$email','$haslo','$ip')") or die("Nie mogłem Cie zarejestrować!");
  67.  
  68. echo '<br><span style="color: green; font-weight: bold;">Zostałeś zarejestrowany '.$nick.'. Teraz możesz się zalogować</span><br>';
  69. echo '<br><a href="logowanie.php">Logowanie</a>';
  70. }
  71. }
  72. ?>


  1. <form method="post" action="rejestracja.php?akcja=wykonaj">
  2. <tr class="tlo-b"><td>Imię i Nazwisko:</td>
  3. <td><input maxlength="18" type="text" name="nick" value="<?=$nazwisko?>"></td></tr>
  4. <tr class="tlo-b"><td>Nick:</td>
  5. <td><input maxlength="18" type="text" name="nick" value="<?=$nick?>"></td></tr>
  6. <tr class="tlek"><td>Hasło:</td>
  7. <td><input maxlength="32" type="password" name="haslo"></td></tr>
  8. <tr class="tlo-b"><td>Powtórz hasło:</td>
  9. <td><input maxlength="32" type="password" name="vhaslo"></td></tr>
  10. <tr class="tlo-b"><td>E-mail:</td>
  11. <td><input type="text" name="email" maxlength="50" value="<?=$email?>"></td></tr>
  12. <tr class="tlek"><td>Powtórz E-mail:</td>
  13. <td><input type="text" maxlength="50" name="vemail" value="<?=$vemail?>"></span></td></tr>
  14.  
  15.  
  16. <tr><td colspan="2" align="center"><input type="submit" value="Zarejestruj"></td></tr>
  17. </table></form>
Korab
Masz dwa inputy, w których name="nick"
lobopol
1. Kod jest absolutnie nieczytelny, naucz się wstawiać tabulacje/spacje aby dało się to czytać http://php.pl/Wortal/Artykuly/Pomysly-pora...eczne2/Wcinanie
2. Logika kodu jest po prostu bezsensowna np.
  1. $nick = substr(addslashes(htmlspecialchars($_POST['nick'])),0,32);

zobacz jaki co będzie jak wpiszę <<ąęźććććććććććććććć9012345678ąą<< - ciąg 32 znaki
Popdowiem, że powinieneś użyć mb_substr i pozbyć się addslashes i htmlspecialchars przy zapisie do bazy masz funkcje mysql_real_escape_string mysqli_real_escape_string albo używanie pdo jak masz dobre kodowanie i zmienna jest stringiem to wszystko będzie ok
3. W formularzu nie masz pola z nazwiskiem
  1. <td><input maxlength="18" type="text" name="nick" value="<?=$nazwisko?>"></td></tr>

masz nick nie nazwisko
4. Nie sprawdzasz czy formularz został rzeczywiście wysłany
5. Masz podatności na sql injection bo nie filtrujesz danych
soldiernr1
Dzięki za pomoc i uwagi. Zamykam temat.
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.