Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Dziwaczny błąd w formularzu do wysyłania maili
Gren-landia
post
Post #1





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 13.02.2006
Skąd: Świnoujście

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


Oto prosty formularz kontaktowy:

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
  5. <title>CONTACT</title>
  6. <link rel="STYLESHEET" type="text/css" href="style.css">
  7. </head>
  8. <body style="background: white;">
  9. <br>
  10. <center>
  11. <b>CONTACT</b>
  12. </center>
  13. <p align="center">* <i>- Required!!!</i></p><br>
  14.  
  15. <?
  16.  
  17. if(isset($name))
  18. if($name==""){
  19. $errorcolor_1 = "red";
  20. $error = "error";
  21. }
  22. else{
  23. $errorcolor_1 = "black";
  24. }
  25.  
  26. if(isset($comment))
  27. if($comment==""){
  28. $errorcolor_2 = "red";
  29. $error = "error";
  30. }
  31. else{
  32. $errorcolor_2 = "black";
  33. }
  34.  
  35. if(isset($contact))
  36. if($contact==""){
  37. $errorcolor_3 = "red";
  38. $error = "error";
  39. }
  40. else{
  41. $errorcolor_3 = "black";
  42. }
  43.  
  44. if(!$action){
  45. $action = "note";
  46. }
  47.  
  48. if($error=="error"||$action=="note"){
  49. ?>
  50.  
  51. <div align="center">
  52. <form action="send.php" method="post">
  53. <font color="<? echo $errorcolor_1; ?>">Name*</font><br />
  54. <input type="text" name="name" style="width: 250px; height: 17px;" <? if(isset($name)) echo "value='$name'";?> class="note"><br />
  55. <table border="0" cellpadding="0" cellspacing="0" width="150">
  56. <tr>
  57. <td width="30"></td>
  58. <td width="120"><font color="<? echo $errorcolor_3; ?>">Contact Type*</font><br>
  59. <input class="note" type="radio" value="--none--" name="contact" style="border: 0"><font color="#ca0000">--none--</font>
  60. <br><input class="note" type="radio" value="@" name="contact" style="border: 0">e-Mail
  61. <br><input class="note" type="radio" value="http://" name="contact" style="border: 0">URL
  62. </td>
  63. </tr>
  64. </table>
  65. Contact Address<br />
  66. <input type="text" name="address" style="width: 250px; height: 17px;" class="note"><br />
  67. <font color="<? echo $errorcolor_2; ?>">Comment*</font><br />
  68. <textarea name="comment" cols="39" rows="6" class="note"><? if(isset($comment)) echo "value='$comment'";?></textarea><br /><br />
  69. <input type="submit" name="action" value="Send" class="note">
  70. <input type="Hidden" name="action" value="Send" class="note">
  71. <input type="reset" name="action" value="Reset" class="note">
  72. </form>
  73. </div>
  74. </body>
  75. </html>


a to (nie wiem, czy będzie potrzebne) plik wykonawczy send.php:

  1. <? 
  2. $name=$_POST['name']; 
  3. $contact=$_POST['contact'];
  4. $address=$_POST['address']; 
  5. $comment=$_POST['comment'];
  6.  
  7. mail("mail@mail.org", "Contact Form", 
  8. "Name: $name 
  9. Contact: $contact
  10. Address: $address 
  11. Comment: $comment ");
  12. echo "<p><br><center>Thanks.<br><a href='contact.php'>>Go back<</a></center><br></p>"; 
  13. ?>


po zgraniu plików na serwer i próbie wejście na stronę formularza pojawia się błąd:

Parse error: parse error, unexpected $ in gj/contact.php on line 75

A w linii 75 znajduje się jedynie:
Kod
</div>


Jednocześnie po wyrzuceniu z pliku formularza funkcji sprawdzającej wypełnienie danych pól

  1. <?
  2.  
  3. if(isset($name))
  4. if($name==""){
  5. $errorcolor_1 = "red";
  6. $error = "error";
  7. }
  8. else{
  9. $errorcolor_1 = "black";
  10. }
  11.  
  12. if(isset($comment))
  13. if($comment==""){
  14. $errorcolor_2 = "red";
  15. $error = "error";
  16. }
  17. else{
  18. $errorcolor_2 = "black";
  19. }
  20.  
  21. if(isset($contact))
  22. if($contact==""){
  23. $errorcolor_3 = "red";
  24. $error = "error";
  25. }
  26. else{
  27. $errorcolor_3 = "black";
  28. }
  29.  
  30. if(!$action){
  31. $action = "note";
  32. }
  33.  
  34. if($error=="error"||$action=="note"){
  35. ?>


i wywołujących ją poleceń:
  1. <font color="<? echo $errorcolor_1; ?>">
i
  1. <? if(isset($name)) echo "value='$name'";?>
wszystko działa bez zarzutu.

Jaki jest błąd w tej funkcji error? Dodam tylko, że kiedy wrzuci się ją do pliku send.php, formularz pojawia się, ale przy wysyłaniu (niezależnie od wypełnienia lub niewypełnienia pól) pojawia się strona send.php z tym samym błędem, tyle, że linijka błędu wypada na
Kod
?>
...

Może da się uzyskać podobny efekt (tzn. przy niewypełnieniu danych pól wyrazy "Name", "Comment" itp. zmieniają kolor na czerwony) w inny, mniej problematyczny sposób?

Z góry wielkie dzięki za pomoc.
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




  1. <?php
  2. if($error=="error"||$action=="note"){
  3. ?>
Nigdzie nie widze bys zamknal ten blok smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Gren-landia
post
Post #3





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 13.02.2006
Skąd: Świnoujście

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


Co dziwne, w kodzie księgi gości, którą przerobiłam na ten formularz kontaktowy, wygląda to właśnie w ten sposób, i wszystko działa bez zarzutu... Czyli to pojedyncze "{" jest niepotrzebne (skoro nie było po nim niczego w oryginalnym kodzie)? Po jego wyrzuceniu owszem, błąd się już nie pojawia, ale przy niewypełnieniu pól i tak dostaję komunikat "Thanks...". Czy może trzeba coś po tym "{" dopisać? Sorry, ale zupełnie się na tym nie znam, i zmuszona jestem do stosowania metody "prób i błędów"...
Go to the top of the page
+Quote Post
Neojawor
post
Post #4





Grupa: Zarejestrowani
Postów: 106
Pomógł: 1
Dołączył: 2.12.2005
Skąd: Jaworzno

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


"thanks" zawsze Ci się wyświetli, bo tak to napisałaś, zrób to na warunku:
  1. <?php
  2.  
  3. $a = mail("mail@mail.org", "Contact Form", 
  4. "Name: $name 
  5. Contact: $contact
  6. Address: $address 
  7. Comment: $comment ");
  8. if($a)
  9. {echo 'thanks';}
  10. else
  11. echo 'coś nie poszło';
  12.  
  13. ?>

Poza tym proponuję kożystać z
Cytat
<?php ?>
, a nie z
Cytat
<? ?>
- żaden wysiłek, a może Ci kiedyś zaoszczędzić trochę czasu i nerwów
Go to the top of the page
+Quote Post
Gren-landia
post
Post #5





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 13.02.2006
Skąd: Świnoujście

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


No tak, ale mnie przede wszystkim zależy na efekcie zmiany koloru nazwy pominiętego pola (jeśli obowiązkowe) na czerwony... Po zastosowaniu proponowanego przez Ciebie kodu i tak wyświetliło się "thanks", teraz to ja już w ogóle niczego nie rozumiem.
Go to the top of the page
+Quote Post
Neojawor
post
Post #6





Grupa: Zarejestrowani
Postów: 106
Pomógł: 1
Dołączył: 2.12.2005
Skąd: Jaworzno

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


1) skoro wyświetliło "thanks" to znaczy, że wysłało maila ( funkcja mail zwróciła TRUE). A co do zmiany koloru, to czy w skrypcie sprawdzającym nie powinnaś na początku skryptu pobrać danych ze zmiennych globalnych:
  1. <?php
  2. $name=$_POST['name']; 
  3. ?>

bo skąd tam by miała być jakakolwiek wartość np. w $name ?
najlepiej wyechuj sobie na początku te zmienne i będziesz widzieć co w nich siedzi.

2) Następna rzecz w tym skrypcie sprawdzaczu, to masz:
  1. <?php
  2. if(!$action){
  3. $action = "note";
  4. }
  5. ?>

a czy gdziekolwiek masz wpisywane coś do tej $action, bo ja nigdzie nie widzę?

3) W send.php zrób tak, żeby najpierw sprawdzało (na if-ie) czy pola obowiązkowe są wypełnione, a dopiero po spełnieniu warunków wywołuj funkcję mail()
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
W send.php zrób tak, żeby najpierw sprawdzało (na if-ie) czy pola obowiązkowe są wypełnione, a dopiero po spełnieniu warunków wywołuj funkcję mail()
Co racja to racja smile.gif
I to mozna by powiedziec jest częściowo zrobione, bo w skrypcie z formularzem kontaktowym jest zmiana kolorow, gdy jest blad. teraz tylko pytanie, czy plik z formularzem, oraz plik z wyslaniem maila to ten sam plik? Bo jesli nie, to te kolorowanko co masz zrobione nigdy sie nie wykona, gdyz formularz po wyslaniu leci do innego skryptu smile.gif

Powinien leciec do tego samego skryptu, a w przypadku gdy nie bedzie bledów, to powinienes np. zincludowac skrypt z wyslaniem maila i powinno byc ok

bardzo skrocona wersja skryptu z formularzem:
  1. <?php
  2.  
  3. //wczesniejsze operacje co miales
  4.  
  5. if($error=="error" || $action=="note"){
  6. //tutaj wyswietlasz swoj formularz jak do tej pory, z tą roznicą, ze atrybut actio
    n ustawaiasz na niego samego
  7. } else{
  8. //tutaj includujesz se skrypt do maila i wysylasz
  9. }
  10.  
  11. ?>

No i tak jak wspomniano wczesniej. Odwoluj sie do danych z posta poprzez tablicę $_POST

  1. <input type="submit" name="action" value="Send" class="note">
  2. <input type="Hidden" name="action" value="Send" class="note">

A czemu tak? pole hidden jest tu zbedne. pomine fakt ze dla hiddenow nie nadaje sie atrybutu class smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Gren-landia
post
Post #8





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 13.02.2006
Skąd: Świnoujście

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


Serdeczne dzięki, wszystko działa, aż miło, i kto by w to uwierzył przy mojej zerowej znajomości php biggrin.gif.

Jednak dopiero teraz przyuważyłam jeszcze jeden drobny błąd, tzn. skrypt przy niezaznaczeniu jakiejkolwiek opcji radio "contact" i tak wysyła maila nie podświetlając na czerwono nazwy. Prawdopodobnie brakuje wywołania funkcji error, ale gdzie je wstawić i w jakiej formie w przypadku radio?
Go to the top of the page
+Quote Post
nospor
post
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




pole radio gdy nie jest zazanczone, to sie nie wysyla wogole. tak wiec ty warunek okreslasz dpiero po zrobieniu isset, to ci tam nigdy nie wejdzie gdy nic nie zaznaczysz.
jesli isset() zwroci ci true, znaczy, że pole radio zostalo zaznaczone i juz nic wiecej nie musisz sprawdzac.

pozatym troche bez sensu masz te warunki. bo najpierw sprawdzasz czy jest index ustawiony a dopiero potem sprawdzasz wypelnienie pola lub nie. powinienes raz sprawdzic czy formularz byl wyslany, a potem juz tylko sprawdzac pola:

  1. <?php
  2.  
  3. if (!empty($_POST)){
  4. //i tutaj juz sprawdzasz konkretne pola. nie musisz juz robic isset. tylko dla rad
    io musisz (ale juz ci to pisalem)
  5. }
  6.  
  7. ?>


ps:
Cytat
wszystko działa, aż miło, i kto by w to uwierzył przy mojej zerowej znajomości php
Przy nas wyjdziesz na ludzi winksmiley.jpg


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

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 Aktualny czas: 19.08.2025 - 07:23