Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wyslanie formularza
trucksweb
post 7.11.2006, 22:23:11
Post #1





Grupa: Zarejestrowani
Postów: 1 199
Pomógł: 31
Dołączył: 22.03.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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


--------------------
Rozmawia dwóch dyrektorów:
- Jaki jest twój ideał sekretarki?
- 20-letnia dziewczyna z 30-letnim doświadczeniem.
Go to the top of the page
+Quote Post
siemakuba
post 7.11.2006, 22:48:38
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Xathloc
post 7.11.2006, 22:52:08
Post #3





Grupa: Zarejestrowani
Postów: 41
Pomógł: 0
Dołączył: 12.09.2006
Skąd: znad klawiatury

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Xathloc 7.11.2006, 22:53:01


--------------------
pozdrawiam
Krzysiek

RIP sygnaturka
Go to the top of the page
+Quote Post
trucksweb
post 7.11.2006, 23:34:41
Post #4





Grupa: Zarejestrowani
Postów: 1 199
Pomógł: 31
Dołączył: 22.03.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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


--------------------
Rozmawia dwóch dyrektorów:
- Jaki jest twój ideał sekretarki?
- 20-letnia dziewczyna z 30-letnim doświadczeniem.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 5.08.2025 - 16:57