Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyslanie formularza
Forum PHP.pl > Forum > Przedszkole
trucksweb
Ostatnio mam problem z banalnymi problemami blink.gif
mam formularz w ktorym jest kilka pol input. Dane przed wyslaniem sa zapamietywane, np. gdyby wprowadzone dane byly bledne zostaja przywrocone bez wpisywania od poczatku.
Wszyskto dziala, tylko jak zrobic aby gdy wszystko jest OK i formularz zostanie juz wyslany a dane zapisane do bazy powrocic do pustego formularza ? Czy trzeba tworzyc kolejny przypadek do funkcji if ?

moj przypadek:
  1. //sprawdzenie czy formularz zostal wyslany
  2. if (isset($_POST['submitted'])) {
  3.  
  4.  $errors = array(); //tablica bledow
  5.  
  6.  //sprawdzenie nazwy
  7.  if (empty($_POST['user_name'])) {
  8.  $errors[] = '<script type="text/javascript" language="Javascript"> alert ("Musisz podać imie !")</script>';
  9.  } else {
  10.  $un = trim($_POST['user_name']); 
  11. }
  12.  
  13.  //sprawdzenie email'a
  14.  if (empty($_POST['user_email'])) {
  15.  $errors[] = '<script type="text/javascript" language="Javascript"> alert ("Podaj swój adres e-mail !")</script>';
  16.  } elseif ($ue = (!eregi ('^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+.[a-z]{2,4}$', stripslashes(trim($_POST['user_email']))))) {
  17.  $errors[] = '<script type="text/javascript" language="Javascript"> alert ("Podaj prawidlowy adres e-mail !")</script>';
  18.  } else {
  19. $ue = trim($_POST['user_email']);
  20. }
  21.  
  22. //
  23. if ($un && $ue) { //wszystko ok
  24. $query = "SELECT user_id FROM news_users WHERE user_email='$ue'";
  25. $result = mysql_query ($query) or trigger_error("blad");
  26.  if (mysql_num_rows($result) == 0) {//jest wolny
  27. $query = "INSERT INTO news_users (user_id, user_name, user_email, date)".
  28.  " VALUES ('user_id', '$un', '$ue', NOW() )";
  29. $result = mysql_query ($query);
  30. if ($result) {
  31. echo '<script type="text/javascript" language="Javascript"> alert ("Dziękujemy za dokonanie wpisu do biuletynu. Informacja o rejestracji został
    a wysłana na Twój e-mail.")</script>';
  32.  
  33. mysql_close();}  
  34. }//zamkniecie wolnego
  35. else { echo'<script type="text/javascript" language="Javascript"> alert ("Podany e-mail widnieje już w naszej bazie.")</script>'; }
  36.  
  37. } //zamkniecie wszystko ok
  38. else {
  39. foreach ($errors as $msg) { //wyswietlenie bledow
  40. echo "$msg";
  41. }
  42.  
  43. }
  44. //  
  45. }
  46. ?>
  47. <form action="newsletter.php" method="post">
  48. <table width="300" border="1">
  49. <tr><td>Imię:</td><td><input type="text" name="user_name" size="15" maxlength="15" value="<?php if (isset($_POST['user_name'])) echo $_POST['user_name']; ?>" /></td></tr>
  50. <tr><td>e-mail:</td><td><input type="text" name="user_email" size="20" maxlength="40" value="<?php if (isset($_POST['user_email'])) echo $_POST['user_email']; ?>" /><p></td></tr>
  51. <tr><td colspan="2" align="right"><input type="submit" value="Zapisz" />
  52. <input type="hidden" name="submitted" value="TRUE" /></td></tr>
  53. </table>
  54. </form>


I drugie pytanie przy okazji biggrin.gif
czesto uzywam alertow javascript do wyswietlania bledow(nie mam miejsca na stronie, zeby publikowac bledy w postaci tekstu):
  1. <script type="text/javascript" language="Javascript"> alert ("Podany e-mail widnieje już w naszej bazie.")</script>


Jak zrobic nowa linie? np.
Cytat
Podany e-mail widnieje już w naszej bazie.
Wprowadz inny !
cool.gif
siemakuba
Cytat
Jak zrobic nowa linie?
Hm, spróbowałbym ze znakiem nowej linii... to wydaje się oczywiste :)
Kod
alert ("Podany e-mail widnieje już w naszej bazie.\n Spróbuj ponownie")


Co do pierwszego problemu, błędem jest już samo bezpośrednie przekazywanie danych wypełnienia formularza z tablicy $_POST. Nie filtrujesz tych danych w żaden sposób, a są to dane pochodzące z zewnątrz i nie powinieneś im bezgranicznie ufać. Propozycja - dane z $_POST przypisz sobie do nowej tablicy, przefiltruj. Jeżeli są błędy, pokazujesz info i wypełniasz formularz wcześniej podanymi danymi (masz je cały czas w nowej tablicy, już przefiltrowane). Jeżeli błędów nie ma, zapisujesz dane czy robisz z nimi cokolwiek chcesz, po czym czyścisz tablicę z przefiltrowanymi danymi. Rezultat - dane nie trafiają ponownie do formularza.

pozdr.
Xathloc
jeżeli wystąpiły błędy ustaw sobie jakąś zmienną lub tablicę zawierającą informację o błędach (np. $errArr) i wtedy:

zamiast
  1. <?php
  2. if (isset($_POST['user_name'])) echo $_POST['user_name'];
  3. ?>


wpisz
  1. <?php
  2. echo (isset($errArr)) ? $_POST['user_name'] : '';
  3. ?>


odpowiednio dla każdego pola formularza.

Ale jak zostało powiedziane, to zły pomysł działać bezpośrednio na tablicy _POST.
trucksweb
z tym znakiem nowej linii laugh.gif jakos nie wpadlem

co do metody $_POST, fakt jak pisalem myslalem tylko nad informacja dla uzytkownika a nie na zabezpieczeniem przed hiakerem dry.gif

dzieki za pomoc
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.