Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Formularz rejestracyjny
Forum PHP.pl > Forum > Przedszkole
ghastblood
Witam!
Mam taki problem ze gdy uzupełnię wszystkie pola w formularz wyskakuje mi napis "Nie uzupełniono wszystkich pól" gdzie mogłem zrobić błąd
Pozdrawiam dopiero się uczę
  1. <?php
  2. require_once "conn.php";
  3.  
  4. echo "<form acton='index.php' method='POST'>";
  5. echo "Login: <input type='text' name='login'><br>";
  6. echo "Haslo: <input type='text' name='haslo'><br>";
  7. echo "Powtorz Haslo: <input type='text' name='haslo1'><br>";
  8. echo "Email: <input type='text' name='email'><br>";
  9. echo "<input type='submit' value='Zarejestruj'><br>";
  10. if(!empty($_POST["login"]) && !empty($_POST["haslo"]) && !empty($_POST["email"]) ) { //sprawdza czy wszystkie pola zostaly uzupelnione
  11. if(mysql_num_rows(mysql_query("SELECT * FROM users where user_login='".htmlspecialchars($_POST['login'])."'"))) { //sprawdz czy nie istniej juz ktos o takim loginie
  12. echo "Uzytkownik o podanym loginie juz istnieje";
  13. if($_POST['haslo'] == $_POST['haslo1']){ //sprawdza czy hasla sa takie same
  14. mysql_query("INSERT INTO users VALUES(NULL, '".htmlspecialchars($_POST['login'])."', '".htmlspecialchars($_POST['haslo'])."', '".htmlspecialchars($_POST['email'])."')"); //dodaje uzytkownia do bazy danych
  15. echo "Rejestracja zakonczona sukcesem";
  16. } else {
  17. echo "Hasla nie pasuja do siebie";
  18. }
  19. } else echo "Nie uzupelniono wszystkich pol";
  20. }
  21. ?>
neuroine
bo masz w If
  1. (!empty($_POST["login"]) && !empty($_POST["haslo"]) && !empty($_POST["email"]) )
Co oznacze że jeśli wypełnisz wszystkie pola zwraca TRUE, a tobie chodzi o odwrotny efekt

I taka moja sugestia porównanie hasła z pierwszego i drugiego pola jest również potrzebne.

  1. if(empty($_POST["login"]) || empty($_POST["haslo"]) || empty($_POST["email"]) ){// }
outsider
poniewaz ten komunikat pojawia sie gdy w bazie jest juz rekord o user_login=$_POST['login'], dokladnie chodzi o linijke 11 w kodzie. Wpisz inny login.

Masz tu dobry kod:

  1. <?php
  2. require_once "conn.php";
  3.  
  4. echo "<form acton='index.php' method='POST'>";
  5. echo "Login: <input type='text' name='login'><br>";
  6. echo "Haslo: <input type='text' name='haslo'><br>";
  7. echo "Powtorz Haslo: <input type='text' name='haslo1'><br>";
  8. echo "Email: <input type='text' name='email'><br>";
  9. echo "<input type='submit' value='Zarejestruj'><br>";
  10. if(!empty($_POST["login"]) && !empty($_POST["haslo"]) && !empty($_POST["email"]) ) { //sprawdza czy wszystkie pola zostaly uzupelnione
  11. if(mysql_num_rows(mysql_query("SELECT * FROM users where user_login='".htmlspecialchars($_POST['login'])."'"))) { //sprawdz czy nie istniej juz ktos o takim loginie
  12. echo "Uzytkownik o podanym loginie juz istnieje";
  13. if($_POST['haslo'] == $_POST['haslo1']){ //sprawdza czy hasla sa takie same
  14. mysql_query("INSERT INTO users VALUES(NULL, '".htmlspecialchars($_POST['login'])."', '".htmlspecialchars($_POST['haslo'])."', '".htmlspecialchars($_POST['email'])."')"); //dodaje uzytkownia do bazy danych
  15. echo "Rejestracja zakonczona sukcesem";
  16. } else {
  17. echo "Hasla nie pasuja do siebie";
  18. }
  19. } else echo "Konto o tym loginie juz istnieje";
  20. } else echo "Nie uzupelniono wszystkich pol";
  21. ?>
ghastblood
Niestety jest kolejny problem z "Konto o tym loginie juz istnieje"
domyślam się że gdzieś jest błędny warunek ale nie mogę znaleźć gdzie.
Mam jeszcze pytanie w jaki sposób mogę zabezpieczyć formularz, zablokować niektóre znaki albo coś innego.
  1. <?php
  2. require_once "conn.php";
  3.  
  4. echo "<form acton='index.php' method='POST'>";
  5. echo "Login: <input type='text' name='login'><br>";
  6. echo "Haslo: <input type='text' name='haslo'><br>";
  7. echo "Powtorz Haslo: <input type='text' name='haslo1'><br>";
  8. echo "Email: <input type='text' name='email'><br>";
  9. echo "<input type='submit' value='Zarejestruj'><br>";
  10. if(!empty($_POST["login"]) && !empty($_POST["haslo"]) && !empty($_POST["haslo1"]) &&!empty($_POST["email"]) ) { //sprawdza czy wszystkie pola zostaly uzupelnione
  11. if(mysql_num_rows(mysql_query("select * from users where user_login='".htmlspecialchars($_POST["login"]."'")))) { //sprawdz czy nie istniej juz ktos o takim loginie
  12. if($_POST['haslo'] == $_POST['haslo1']){ //sprawdza czy hasla sa takie same
  13. mysql_query("INSERT INTO users VALUES(NULL, '".htmlspecialchars($_POST['login'])."', '".htmlspecialchars($_POST['haslo'])."', '".htmlspecialchars($_POST['email'])."')"); //dodaje uzytkownia do bazy danych
  14. echo "Rejestracja zakonczona sukcesem<br>";
  15. } else echo "Hasla nie pasuja do siebie<br>";
  16. } else echo "Konto o tym loginie juz istnieje";
  17. } else echo "Nie uzupelniono wszystkich pol<br>";
  18. ?>
outsider
Przy kazdym zapytaniu do bazy, musisz sie zabezpieczyc przed atakiem, musisz kazda zmienna wykorzystywana w zapytaniu przefiltrowac funkcja mysql_real_escape_string

  1. mysql_query("INSERT INTO users VALUES(NULL, '".mysql_real_escape_string(htmlspecialchars($_POST['login']))."', '".mysql_real_escape_string(htmlspecialchars($_POST['haslo']))."', '".mysql_real_escape_string(htmlspecialchars($_POST['email']))."')");


a jesli zmienna musi miec wartosc liczbowa, calkowita, to uzywasz zamiast mysql_real_escape_string funkcji int_val(), np.


  1. mysql_query("SELECT * FROM tablea WHERE id =".int_val($_GET['id']));
lub
  1. mysql_query("SELECT * FROM tablea WHERE id =".(int)$_GET['id']);
ghastblood
A co z problemem ze sprawdzeniem czy dany login już istnieje gdzieś w warunki jest błąd. Ale mogę go znaleźć.

Pozdrawiam
outsider
tylko ten warunek zmien:
  1. <?php
  2. if(mysql_num_rows(mysql_query("select * from users where user_login='".htmlspecialchars($_POST["login"]."'"))) < 1)
  3. ?>


mniejsze od 1, poniewaz ten kod ma byc wykonany jesli nie znaleziono rekordu (czyli login nie istnieje), w przeciwnym wypadku (login istnieje) wyskakuje komunikat. I nie zapomnij zabezpieczyc tego zapytania funkcja ktora podalem we wczesniejszym poscie.
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.