Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [php]Problem z walidacja formularza
MatBlo
post
Post #1





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 27.05.2010

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


Zacznę od początku. Niedawno rozpocząłem swoja przygodę z PHP i język sprawa mi sporo problemu. Jestem w trakcje tworzenia strony www z elementami PHP. Struktura strony wygląda następująco menu poziome wraz z grafiką znajdującą się po prawej stronie jest statyczne natomiast treść znajdująca się po lewej dynamiczna. Problem ten rozwiązałem za pomocą instrukcji include_once(), jednak nie na tym problem polega jedna z podstron kontakt.php posiada następujący kod:
  1.  
  2. <h3>Formularz kontaktowy:</h3>
  3.  
  4. <form method="post" action="index.php?id=8">
  5. <div class="tabelaNazwa"><label for="firstname">Imię*:</label></div>
  6. <div class="tabelaTresc"><input type="text" id="firstname" name="firstname" style="width:290px;" /><br /></div>
  7. <div class="clear" style="height: 5px;"></div>
  8. <div class="tabelaNazwa"><label for="email">E-mail:</label></div>
  9. <div class="tabelaTresc"><input type="text" id="email" name="email" style="width:290px;" /><br /></div>
  10. <div class="clear" style="height: 5px;"></div>
  11. <div class="tabelaNazwa"><label for="phone">Telefon:</label></div>
  12. <div class="tabelaTresc"><input type="text" id="phone" name="phone" style="width:290px;" /><br /></div>
  13. <div class="clear" style="height: 5px;"></div>
  14. <div class="tabelaNazwa"><label for="theme">Temat*:</label></div>
  15. <div class="tabelaTresc"><input type="text" id="theme" name="theme" style="width:290px;" /><br /></div>
  16. <div class="clear" style="height: 5px;"></div>
  17. <div class="tabelaNazwa"><label for="other">Wiadomość:</label></div>
  18. <div class="tabelaTresc"><textarea id="other" name="other" rows="7" cols="50"></textarea><br /></div>
  19. <div class="clear" style="height: 10px;"></div>
  20. <div class="tabelaTresc"><input type="submit" value="Wyślij" name="Wyślij" /></div>
  21. </form>


natomiast skrypt odpowiedzialny za wysyłanie wygląda następująco:
  1. <?php
  2. $imie = $_POST['firstname'];
  3. $email = $_POST['email'];
  4. $tel = $_POST['phone'];
  5. $temat = $_POST['theme'];
  6. $wiadomosc = $_POST['other'];
  7. $to = '...@gmail.com';
  8. $subject = "$temat";
  9. $msg = "Imię: $imie\n" .
  10. "Telefon: $tel\n" .
  11. "Treść wiadomości: $wiadomosc";
  12. mail($to, $subject, $msg, 'From:'.$email);
  13. ?>
  14.  
  15. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  16. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  17. <head>
  18. <title>Salon Dom</title>
  19. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  20. <link rel="stylesheet" href="styl.css" type="text/css" />
  21.  
  22. </head>
  23.  
  24. <body>
  25.  
  26. <p>Dziękuję za przesłanie formularza</p>
  27.  
  28. </body>
  29. </html>


W takim wypadku formularz działa, wysyła maila odraz w miejscu formularza wyświetlany jest komunikat dziękujący za wysłanie maila. W momencie gry zamiast fragmentu napisanego w html użyć echo nie wyświetla mi się podziękowanie. I nie bardzo wiem dlaczego ;/ Chciałem również dokonać sprawdzenia dwóch pól imię i temat napisałem taki kawałek kodu:
  1. <?php
  2. if (isset($_POST['submit'])) {
  3. $imie = $_POST['firstname'];
  4. $email = $_POST['email'];
  5. $tel = $_POST['phone'];
  6. $temat = $_POST['theme'];
  7. $wiadomosc = $_POST['other'];
  8. if(empty($imie) && empty($temat)) {
  9. echo'Nie podałeś imienia i tematu wiadomości.<br />';
  10. }
  11. if(empty($imie) && (!empty($temat))) {
  12. echo'Nie podałeś imienia.<br />';
  13. }
  14. if((!empty($imie)) && empty($temat)) {
  15. echo'Nie podałeś tematu.<br />';
  16. }
  17. if((!empty($imie)) && (empty($temat))) {
  18. $to = '...@gmail.com';
  19. $subject = "$temat";
  20. $msg = "Imię: $imie\n" .
  21. "Telefon: $tel\n" .
  22. "Treść wiadomości: $wiadomosc";
  23. mail($to, $subject, $msg, 'From:'.$email);
  24. echo 'Dziękuję za przesłanie formularza';
  25. }
  26. }
  27. ?>


po wrzuceniu tego kodu na serwer ani nie wyświetla się żaden komunikat anie mail nie zostaje wysłany. Tematy na formum przeglądałem jednak nie znalazłem odp na mój problem - być może źle szukałem .

Ten post edytował MatBlo 2.06.2010, 10:57:21
Go to the top of the page
+Quote Post
zend
post
Post #2





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

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


  1. //to
  2. if (isset($_POST['submit'])) {
  3. //zastąp
  4. if(count($_POST)) {

Pobieważ przycisku submit nie uświadczysz w formularzu i trzymaj kod w
  1.  
  2. </body>


Ten post edytował zend 2.06.2010, 10:06:58
Go to the top of the page
+Quote Post
MatBlo
post
Post #3





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 27.05.2010

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


Wstawiłem formularz do body, if zamieniłem i pomogło. Wiadomość jest wysyłana, podziękowanie również otrzymuję z tym, że nawet gdy wyślę pusty formularz. Czyli nadal instrukcja if nie dział (IMG:style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
zend
post
Post #4





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

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


  1. $submit = true;
  2.  
  3. if(empty($imie))
  4. {
  5. echo 'CO jest? Nie masz imienia?';
  6. $submit = false;
  7. }
  8.  
  9. if($submit)
  10. {
  11. //mail
  12. echo 'Thanks';
  13. }

Dostosuj sobie do własnych potrzeb
Go to the top of the page
+Quote Post
MatBlo
post
Post #5





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 27.05.2010

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


Coś mi nie wychodzi - muszę chyba być prowadzonym jak dziecko za rękę. Wykorzystałem Twój skrypt jednak nie działa do końca prawidłowo. Co prawda jeśli nie wpiszę imienia to mail nie zostanie wysłany jednak nie otrzymuje również informacji o braku imienia. W przypadku podania imienia nie mam wiadomości o wysłaniu :?
  1. <?php
  2. if(count($_POST)) {
  3. $imie = $_POST['firstname'];
  4. $email = $_POST['email'];
  5. $tel = $_POST['phone'];
  6. $temat = $_POST['theme'];
  7. $wiadomosc = $_POST['other'];
  8. $submit = true;
  9. if(empty($imie))
  10. {
  11. echo'Nie podałeś imienia i tematu wiadomości.<br />';
  12. $submit = false;
  13. }
  14. if($submit)
  15. {
  16. $to = '...@gmail.com';
  17. $subject = "$temat";
  18. $msg = "Imię: $imie\n" .
  19. "Telefon: $tel\n" .
  20. "Treść wiadomości: $wiadomosc";
  21. mail($to, $subject, $msg, 'From:'.$email);
  22. echo 'Dziękuję za przesłanie formularza';
  23. }
  24. }
  25. ?>


Ten post edytował MatBlo 2.06.2010, 10:56:16
Go to the top of the page
+Quote Post
zend
post
Post #6





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

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


  1. ini_set('display_errors' , 'On'); //daj to na początku pliku


Ps Trochę to niemądre tak na forum swój email podawać (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
MatBlo
post
Post #7





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 27.05.2010

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


Niestety nie ma żadnych zmian. Tak wyglądała cała moja nauka z PHP co coś wymyśle albo ktoś mi zaproponuje jakieś rozwiązanie czy też gdzieś przeczytam to nie działa:/ Co do maila jest to mój któryś mail taki zapasowy, ale zgadza się nie jest to zbyt inteligentne więc go usunąłem.
Go to the top of the page
+Quote Post
zend
post
Post #8





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

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


Dorzuć do każdego warunku if warunek else z inną wiadomością, może wtedy Ci się wyjaśni
Go to the top of the page
+Quote Post
Damiian
post
Post #9





Grupa: Zarejestrowani
Postów: 38
Pomógł: 4
Dołączył: 30.05.2010
Skąd: Gdynia

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


Powinno być ok..

  1. <?php
  2.  
  3. if (empty($_POST['firstname']))
  4. {
  5. echo 'Uzupelnij nick!<br/>';
  6.  
  7. }
  8.  
  9. if (empty($_POST['email']))
  10. {
  11. echo 'Uzupelnij mail!<br/>';
  12.  
  13. }
  14.  
  15.  
  16. if (empty($_POST['tel']))
  17.  
  18. {
  19.  
  20. echo 'Uzupelnij telefon!<br/>';
  21.  
  22. }
  23.  
  24. if (empty($_POST['theme']))
  25.  
  26. {
  27.  
  28. echo 'Uzupelnij temat!<br/>';
  29.  
  30. }
  31.  
  32. if (empty($_POST['other']))
  33.  
  34. {
  35.  
  36. echo 'Uzupelnij Wiadomość!<br/>';
  37.  
  38. }
  39.  
  40.  
  41.  
  42. if(!empty($_POST['firstname']) && !empty($_POST['email']) && !empty($_POST['tel']) && !empty($_POST['theme']) && !empty($_POST['other']) &&))
  43. {
  44.  
  45.  
  46. // Co ma robic jak wszystko bedzie ok
  47.  
  48.  
  49. }
  50. ?>


Ten post edytował Damiian 2.06.2010, 11:27:04
Go to the top of the page
+Quote Post
MatBlo
post
Post #10





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 27.05.2010

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


Po drobnych przeróbkach działa (IMG:style_emoticons/default/biggrin.gif)
  1. <?php
  2. if (empty($_POST['firstname']))
  3. {
  4. echo 'Uzupelnij nick!<br />';
  5. }
  6. if (empty($_POST['email']))
  7. {
  8. echo 'Uzupelnij mail!<br />';
  9. }
  10. if (empty($_POST['phone']))
  11. {
  12. echo 'Uzupelnij telefon!<br />';
  13. }
  14. if (empty($_POST['theme']))
  15. {
  16. echo 'Uzupelnij temat!<br />';
  17. }
  18. if (empty($_POST['other']))
  19. {
  20. echo 'Uzupelnij Wiadomość!<br />';
  21. }
  22. if (!empty($_POST['firstname']) && !empty($_POST['email']) && !empty($_POST['phone']) && !empty($_POST['theme']) && !empty($_POST['other']))
  23. {
  24. $to = '...@gmail.com';
  25. $email = $_POST['email'];
  26. $subject = $_POST['theme'];
  27. $imie = $_POST['firstname'];
  28. $tel = $_POST['phone'];
  29. $wiadomosc = $_POST['other'];
  30. $msg = "Imię: $imie\n" .
  31. "Telefon: $tel\n" .
  32. "Treść wiadomości: $wiadomosc";
  33. mail($to, $subject, $msg, 'From:'.$email);
  34. echo 'Dziękuję za przesłanie formularza';
  35. }
  36. ?>


Mam jeszcze jedno pytanie co musiałbym zrobić, aby komunikaty u uzupełnieniu pojawiały mi się obok tego pola, a nie na nowej stronie?

Ten post edytował MatBlo 2.06.2010, 12:34:27
Go to the top of the page
+Quote Post
gigzorr
post
Post #11





Grupa: Zarejestrowani
Postów: 652
Pomógł: 47
Dołączył: 6.02.2010
Skąd: Radom

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


Pewnie masz dwa pliki czyli formularz i action="link do skryptu" a jak chcesz zeby na tej samej sie pojawialy to zostaw action puste i formularz wklej do tego samego skryptu z plikiem.

Ten post edytował gigzorr 2.06.2010, 12:08:35
Go to the top of the page
+Quote Post
Damiian
post
Post #12





Grupa: Zarejestrowani
Postów: 38
Pomógł: 4
Dołączył: 30.05.2010
Skąd: Gdynia

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


Tak jak kolega wyżej powiedział
Stare action zamieniasz na:
  1. <form method="post" action="">


I pod formularzem dajesz:
  1. <?php
  2. if(count($_POST)) {
  3.  
  4. if (empty($_POST['firstname']))
  5. {
  6. echo 'Uzupelnij nick!<br/>';
  7. }
  8. }
  9. ?>

Dalej analogicznie.

Ten post edytował Damiian 2.06.2010, 12:19:20
Go to the top of the page
+Quote Post
MatBlo
post
Post #13





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 27.05.2010

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


Sprawa nie wygląda tak łatwo, a to dlatego że jeśli zrobię tak jak mówicie to od razu po załadowaniu strony dostaje komunikat, że nie mam wypełnionego takiego i takiego pola, wiec brakuje fragment, który by aktywował sprawdzenie po naciśnięciu przycisku wyślij.
Go to the top of the page
+Quote Post
Damiian
post
Post #14





Grupa: Zarejestrowani
Postów: 38
Pomógł: 4
Dołączył: 30.05.2010
Skąd: Gdynia

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


Dlatego że pisujesz samo:

  1. <?php
  2. if (empty($_POST['firstname']))
  3.  
  4. {
  5.  
  6. echo 'Uzupelnij nick!<br/>';
  7.  
  8. }
  9. ?>


I skrypt odrazu po wejściu na stronę sprawdza czy są wypełnione pola, wiadomo że pokaże, iż nie są...



Wklej to w formularz, tak jak tu jest:

  1. <h3>Formularz kontaktowy:</h3>
  2.  
  3. <form method="post" action="">
  4. <div class="tabelaNazwa"><label for="firstname">Imię*:</label></div>
  5. <div class="tabelaTresc"><input type="text" id="firstname" name="firstname" style="width:290px;" /><br /></div>
  6. <div class="clear" style="height: 5px;"></div>
  7. <div class="tabelaNazwa"><label for="email">E-mail:</label></div>
  8. <div class="tabelaTresc"><input type="text" id="email" name="email" style="width:290px;" /><br /></div>
  9. <div class="clear" style="height: 5px;"></div>
  10. <div class="tabelaNazwa"><label for="phone">Telefon:</label></div>
  11. <div class="tabelaTresc"><input type="text" id="phone" name="phone" style="width:290px;" /><br /></div>
  12. <div class="clear" style="height: 5px;"></div>
  13. <div class="tabelaNazwa"><label for="theme">Temat*:</label></div>
  14. <div class="tabelaTresc"><input type="text" id="theme" name="theme" style="width:290px;" /><br /></div>
  15. <div class="clear" style="height: 5px;"></div>
  16. <div class="tabelaNazwa"><label for="other">Wiadomość:</label></div>
  17. <div class="tabelaTresc"><textarea id="other" name="other" rows="7" cols="50"></textarea><br /></div>
  18. <div class="clear" style="height: 10px;"></div>
  19. <div class="tabelaTresc"><input type="submit" value="Wyślij" name="Wyślij" /></div>
  20. </form>
  21.  
  22.  
  23. <?php
  24.  
  25. if(count($_POST)) {
  26.  
  27. if (empty($_POST['firstname']))
  28.  
  29. {
  30.  
  31. echo 'Uzupelnij nick!<br/>';
  32.  
  33. }
  34.  
  35. }
  36.  
  37. ?>


To jest samo sprawdzenie first name, pododawaj potem wszystkie pola...
Go to the top of the page
+Quote Post
MatBlo
post
Post #15





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 27.05.2010

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


Wkleiłem tak jak podaliście i nadal to samo.
Go to the top of the page
+Quote Post
bastard13
post
Post #16





Grupa: Zarejestrowani
Postów: 664
Pomógł: 169
Dołączył: 8.01.2010
Skąd: Kraków

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


  1. if($_POST)
  2. { //instrukcje z tego bloku wykonają się tylko jeśli przesłano posta
  3. if(!isset($_POST['imie']))
  4. echo 'Nie wypełniłeś pola imię!!!'
  5. //dodaj resztę walidaji
  6. }
  7. else
  8. {
  9. //wyświetlanie formularza
  10. }
Go to the top of the page
+Quote Post
MatBlo
post
Post #17





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 27.05.2010

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


  1. <h3>
  2. Formularz kontaktowy:
  3. </h3>
  4. <form method="post" action="">
  5. <div class="tabelaNazwa"><label for="firstname">Imię*:</label></div>
  6. <div class="tabelaTresc"><input type="text" value="<? echo htmlspecialchars($_POST['firstname']); ?>" id="firstname" name="firstname" style="width:290px;" /><br /></div>
  7. <div class="clear" style="height: 5px;"></div>
  8. <div class="tabelaNazwa"><label for="email">E-mail*:</label></div>
  9. <div class="tabelaTresc"><input type="text" value="<? echo htmlspecialchars($_POST['email']); ?>" id="email" name="email" style="width:290px;" /><br /></div>
  10. <div class="clear" style="height: 5px;"></div>
  11. <div class="tabelaNazwa"><label for="phone">Telefon*:</label></div>
  12. <div class="tabelaTresc"><input type="text" value="<? echo htmlspecialchars($_POST['phone']); ?>" id="phone" name="phone" style="width:290px;" /><br /></div>
  13. <div class="clear" style="height: 5px;"></div>
  14. <div class="tabelaNazwa"><label for="theme">Temat*:</label></div>
  15. <div class="tabelaTresc"><input type="text" value="<? echo htmlspecialchars($_POST['theme']); ?>" id="theme" name="theme" style="width:290px;" /><br /></div>
  16. <div class="clear" style="height: 5px;"></div>
  17. <div class="tabelaNazwa"><label for="other">Wiadomość*:</label></div>
  18. <div class="tabelaTresc"><textarea id="other" name="other" rows="7" cols="50"><? echo htmlspecialchars($_POST['other']); ?></textarea><br /></div>
  19. <div class="clear" style="height: 10px;"></div>
  20. <div class="tabelaTresc"><input type="submit" value="Wyślij" name="submit" /></div>
  21. </form>


  1. <?php
  2. if($_POST)
  3. {
  4. if (empty($_POST['firstname']))
  5. {
  6. echo '<br />Uzupełnij imię!';
  7. }
  8. if (empty($_POST['email']))
  9. {
  10. echo '<br />Uzupełnij mail!';
  11. }
  12. elseif(!eregi('^[a-zA-z0-9_\-\.]+@[a-zA-z0-9\-]+\.[a-zA-z0-9\-\.]+$', $_POST['email']))
  13. {
  14. echo '<br />Podano błędny email!';
  15. }
  16. if (empty($_POST['phone']))
  17. {
  18. echo '<br />Uzupełnij telefon!';
  19. }
  20. if (empty($_POST['theme']))
  21. {
  22. echo '<br />Uzupełnij temat!';
  23. }
  24. if (empty($_POST['other']))
  25. {
  26. echo '<br />Uzupełnij wiadomość!';
  27. }
  28. if (!empty($_POST['firstname']) && !empty($_POST['email']) && eregi('^[a-zA-z0-9_\-\.]+@[a-zA-z0-9\-]+\.[a-zA-z0-9\-\.]+$', $_POST['email']) && !empty($_POST['phone']) && !empty($_POST['theme']) && !empty($_POST['other']))
  29. {
  30. $to = 'xxx@gmail.com';
  31. $subject = $_POST['theme'];
  32. $message = "Imię: $_POST[firstname]\n
  33. Telefon: $_POST[phone]\n
  34. Treść wiadomości:\n $_POST[other]";
  35. $header = "From: $_POST[email]";
  36. $header .= "\r\n";
  37. $header .= 'Content-type: text/plain; charset=utf-8'."\r\n";
  38. mail($to, $subject, $message, $header);
  39. echo '<br/>Dziękuję za przesłanie formularza';
  40. }
  41. }
  42. ?>


Wszystkim, którzy pomogli oczywiście bardzo dziękuję. Odświeżam temat ponieważ, mam jeszcze jeden problem w jaki sposób wyświetlić komunikaty o błędach, aby nie wyświetlały się pod formularzem tylko obok konkretnego pola? Np komunikat o braku wpisania imienia, obok pola z imieniem?
Go to the top of the page
+Quote Post
gigzorr
post
Post #18





Grupa: Zarejestrowani
Postów: 652
Pomógł: 47
Dołączył: 6.02.2010
Skąd: Radom

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


marginesami to ustaw .
Go to the top of the page
+Quote Post
MatBlo
post
Post #19





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 27.05.2010

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


Możesz trochę rozwinąć swoją wypowiedź.
Go to the top of the page
+Quote Post
Ruio
post
Post #20





Grupa: Zarejestrowani
Postów: 147
Pomógł: 9
Dołączył: 20.02.2009

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


Zrób coś alla to :

  1. <span style="margin-left:15px; margin-top:20px">tu co ma się pokazać</span>


Marginesy ustaw jak chcesz (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 25.12.2025 - 06:16