Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Gorąca prośba o pomoc w formularzu kontaktowym
Forum PHP.pl > Forum > Przedszkole
cachaito
Witam serdecznie! Mam wielki problem ponieważ muszę wykonać formularz z elementami, których nie potrafię zastosować w praktyce :-/

Otóż potrzebuje jeszcze dwóch dodatków do formularza znalezionego na http://www.egrafik.pl/php-klasa-do-wysylan...e-mail,979.html

Są to:

- weryfikacja e-maila od użytkownika. Na tej samej stronie jest fajny skrypt, tylko, że gdy go wklejam do kodu php, przy próbie wysłania, weryfikuje mi, że podałem błędny adres e-mail razem z komunikatem, że e-mail został wysłany pomyślnie :-)

- jeśli użytkownik nie zaznaczy dwóch checkbox'ów chciałbym, aby formularz upomniał go, że trzeba zaznaczyć te pola.


Znawców php bardzo proszę o pomoc.

A oto kod:

  1. <?php require_once("mailer.php"); ?>
  2.  
  3. <form action="adres_serwera/mailer.php" method="post">
  4. <p>Podaj swoje imię:</p>
  5. <input type="text" name="fromname" /><br />
  6. <p>Podaj swój e-mail:</p>
  7. <input type="text" name="fromemail" /><br />
  8. <p>Na jaki e-mail odpisać?</p>
  9. <input type="text" name="replyemail" /><br />
  10. <p>Temat:</p>
  11. <input type="text" name="subject" /><br />
  12. <p>Treść wiadomości:</p>
  13. <textarea name="message" cols="30" rows="6"></textarea><br />
  14. <p>Do kogo?</p>
  15. <select name="to" size="1">
  16. <optgroup label="Wybierz odbiorcę:">
  17. <option value="adres1@wp.pl">pierwszy adres e-mail</option>
  18. <option value="adres2@gmail.com">drugi adres e-mail</option>
  19. </select><br />
  20. <p>
  21. <input type="checkbox" name="zgoda1" value="1" />
  22. Wyrażam zgodę na przetwarzanie moich danych w formularzu<br />
  23. <input type="checkbox" name="zgoda2" value="1" />
  24. Potwierdzam, że dane wypełniłem prawidłowo.
  25. </p>
  26. <input type="submit" value="Wyślij!" />
  27. </form>


  1. <?php
  2. class MicroMailer{
  3.    var $to         = "";
  4.    var $subject    = "";
  5.    var $message    = "";
  6.    var $fromName   = "";
  7.    var $fromEmail  = "";
  8.    var $replyEmail = "";
  9.    var $header     = "";
  10.    var $type       = "text/plain";
  11.    var $characterSet = "utf-8";
  12.  
  13.  
  14.    function send(){
  15.        $this->createHeader();
  16.        if (@mail($this->to,$this->subject,$this->message,$this->header)){
  17.            return true;
  18.        } else {
  19.            return false;
  20.        }
  21.    }
  22.  
  23. function createHeader(){
  24.        $from   = "From: $this->fromName <$this->fromEmail>r\n";
  25.        $replay = "Reply-To: $this->replyEmailr\n";  
  26.        $params = "MIME-Version: 1.0r\n";
  27.        $params = "Content-type: $this->type; charset=$this->characterSetr\n";
  28.      
  29.        $this->header = $from.$replay.$params;
  30.        return $this->header;
  31.    }
  32.  
  33. }
  34. ?>
  35.  
  36. <?php
  37.      $mailer = new MicroMailer();
  38.      
  39.      $mailer->to         = isset($_POST["to"]) ? $_POST["to"] : "";
  40.      $mailer->fromName   = isset($_POST["fromname"]) ? $_POST["fromname"] : "";
  41.      $mailer->fromEmail  = isset($_POST["fromemail"]) ? $_POST["fromemail"] : "";
  42.      $mailer->replyEmail = isset($_POST["replyemail"]) ? $_POST["replyemail"] : "";
  43.      $mailer->subject    = isset($_POST["subject"]) ? $_POST["subject"] : "";
  44.      $mailer->message    = isset($_POST["message"]) ? $_POST["message"] : "";
  45. if ($mailer->send()) {
  46.        echo "Wiadomość wysłana!";
  47.      } else {
  48.        echo "Błąd podczas wysyłania wiadomości!";
  49.      }
  50. ?>
  51.  
  52. <?php
  53. function  walidacja_email($fromemail) {
  54.  if (!eregi("^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,4})$", $fromemail))
  55.  {
  56.    echo "wprowadzony adres email jest niepoprawny";
  57.  } else echo "wprowadziłeś poprawny adres email";
  58. }
  59.  
  60. $fromemail = $_POST ["fromemail"];
  61.  
  62. if ($fromemail) walidacja_email($fromemail);
  63. ?>
Wicepsik
  1. <?php
  2. if(!$_POST['zgoda1']=='1'){
  3.  
  4.  
  5.   echo 'Nie potwierdzono Wyrażam zgodę na przetwarzanie moich danych w formularzu';
  6.  
  7. }
  8. elseif(!$_POST['zgoda2']=='1'){
  9.  
  10.   echo 'Nie potwierdzono Potwierdzam, że dane wypełniłem prawidłowo';
  11.  
  12. }else{
  13.  
  14.  
  15. //cały kod skryptu
  16.  
  17.  
  18. }
  19. ?>
cachaito
Dziękuje za tak szybką odpowiedz!

Wkleiłem Twój skrypt tak:

  1. <?php
  2. if(!$_POST['zgoda1']=='1'){
  3.  
  4.  
  5.  echo 'Nie potwierdzono: Wyrażam zgodę na przetwarzanie moich danych w formularzu';
  6.  
  7. }
  8. elseif(!$_POST['zgoda2']=='1'){
  9.  
  10.  echo 'Nie potwierdzono: Potwierdzam, że dane wypełniłem prawidłowo';
  11.  
  12. } else {
  13.  
  14. class MicroMailer{
  15.    var $to         = "";
  16.    var $subject    = "";
  17.    var $message    = "";
  18.    var $fromName   = "";
  19.    var $fromEmail  = "";
  20.    var $replyEmail = "";
  21.    var $header     = "";
  22.    var $type       = "text/plain";
  23.    var $characterSet = "utf-8";
  24.  
  25.  
  26.    function send(){
  27.        $this->createHeader();
  28.        if (@mail($this->to,$this->subject,$this->message,$this->header)){
  29.            return true;
  30.        } else {
  31.            return false;
  32.        }
  33.    }
  34.  
  35. function createHeader(){
  36.        $from   = "From: $this->fromName <$this->fromEmail>r\n";
  37.        $replay = "Reply-To: $this->replyEmailr\n";  
  38.        $params = "MIME-Version: 1.0r\n";
  39.        $params = "Content-type: $this->type; charset=$this->characterSetr\n";
  40.      
  41.        $this->header = $from.$replay.$params;
  42.        return $this->header;
  43.    }
  44.  
  45. }
  46.  
  47.      $mailer = new MicroMailer();
  48.      
  49.      $mailer->to         = isset($_POST["to"]) ? $_POST["to"] : "";
  50.      $mailer->fromName   = isset($_POST["fromname"]) ? $_POST["fromname"] : "";
  51.      $mailer->fromEmail  = isset($_POST["fromemail"]) ? $_POST["fromemail"] : "";
  52.      $mailer->replyEmail = isset($_POST["replyemail"]) ? $_POST["replyemail"] : "";
  53.      $mailer->subject    = isset($_POST["subject"]) ? $_POST["subject"] : "";
  54.      $mailer->message    = isset($_POST["message"]) ? $_POST["message"] : "";
  55. if ($mailer->send()) {
  56.        echo "Wiadomość wysłana!";
  57.      } else {
  58.        echo "Błąd podczas wysyłania wiadomości!";
  59.      }
  60.      
  61. }      
  62. ?>
  63.  
  64. <?php
  65. function  walidacja_email($fromemail) {
  66.  if (!eregi("^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,4})$", $fromemail))
  67.  {
  68.    echo "wprowadzony adres email jest niepoprawny";
  69.  } else echo "wprowadziłeś poprawny adres email";
  70. }
  71.  
  72. $fromemail = $_POST ["fromemail"];
  73.  
  74. if ($fromemail) walidacja_email($fromemail);
  75. ?>


Niby wszystko działa, ale pierwsze co pojawia się po otworzeniu strony z formularzem to komunikat na samej górze, że: "Nie potwierdzono: Wyrażam zgodę na przetwarzanie moich danych w formularzu"
Jak można to poprawić, by taki komunikat pojawiał się dopiero po naciśnięciu przycisku "Wyślij?"
calgonit
function walidacja2(){
if (!$_POST['zgoda1']) echo " tekst zgoda pierwsza ";
if (!$_POST['zgoda1']) echo " tekst zgoda druga ";
}
walidacja2();

Wstaw ten kod na samym spodzie (linia 63)

Kod
function walidacja2(){
if (!$_POST['zgoda1']) echo "  tekst zgoda pierwsza ";
if (!$_POST['zgoda2']) echo "  tekst zgoda druga ";
}
walidacja2();

Oczywiście z tą drobną (zgoda1 na zgoda2) różnicą, a pierwszego błędu z weryfikacją adresu nie zauważyłem...
cachaito
Cytat(calgonit @ 15.06.2009, 22:03:18 ) *
function walidacja2(){
if (!$_POST['zgoda1']) echo " tekst zgoda pierwsza ";
if (!$_POST['zgoda1']) echo " tekst zgoda druga ";
}
walidacja2();

Wstaw ten kod na samym spodzie (linia 63)

Kod
function walidacja2(){
if (!$_POST['zgoda1']) echo "  tekst zgoda pierwsza ";
if (!$_POST['zgoda2']) echo "  tekst zgoda druga ";
}
walidacja2();

Oczywiście z tą drobną (zgoda1 na zgoda2) różnicą, a pierwszego błędu z weryfikacją adresu nie zauważyłem...



Wkleiłem Twój kod, ale ciągle mam źle.

-po wejściu na stronę z formularzem od razu u góry pojawia się komunikat: "Błąd podczas wysyłania wiadomości! tekst zgoda pierwsza tekst zgoda druga"
-nawet jak nie zaznaczę checkboxów wysyła wiadomość, tyle, że z informacją, iż nie zaznaczyłem pól.
Wicepsik
  1. <?php
  2. if(isset($_POST['submit']){
  3.  
  4. //kod wyświetlania formularza
  5.  
  6. }else{
  7. if(!$_POST['zgoda1']=='1'){
  8.  
  9.  
  10.  echo 'Nie potwierdzono Wyrażam zgodę na przetwarzanie moich danych w formularzu';
  11.  
  12. }
  13. /elseif(!$_POST['zgoda2']=='1'){
  14.  
  15.  echo 'Nie potwierdzono Potwierdzam, że dane wypełniłem prawidłowo';
  16.  
  17. }else{
  18.  
  19.  
  20. //kod skryptu
  21.  
  22.  
  23.  
  24. }
  25. }
  26. ?>
cachaito
Cytat(Wicepsik @ 15.06.2009, 22:24:29 ) *
  1. <?php
  2. if(isset($_POST['submit']){
  3.  
  4. //kod wyświetlania formularza
  5.  
  6. }else{
  7. if(!$_POST['zgoda1']=='1'){
  8.  echo 'Nie potwierdzono Wyrażam zgodę na przetwarzanie moich danych w formularzu';
  9.  
  10. }
  11. /elseif(!$_POST['zgoda2']=='1'){
  12.  
  13.  echo 'Nie potwierdzono Potwierdzam, że dane wypełniłem prawidłowo';
  14.  
  15. }else{
  16. //kod skryptu
  17. }
  18. }
  19. ?>


Wicepsik "kod wyświetlania formularza" to ten między znacznikami <form>?
Wicepsik
Albo zrób tak

  1. <?php
  2. if(!isset($_POST['submit']){
  3.  
  4. if(!$_POST['zgoda1']=='1'){
  5.  
  6.  
  7.  echo 'Nie potwierdzono Wyrażam zgodę na przetwarzanie moich danych w formularzu';
  8.  
  9. }
  10. elseif(!$_POST['zgoda2']=='1'){
  11.  
  12.  echo 'Nie potwierdzono Potwierdzam, że dane wypełniłem prawidłowo';
  13.  
  14. }else{
  15.  
  16.  
  17. //kod skryptu
  18.  
  19.  
  20.  
  21. }
  22. }
  23. ?>
cachaito
Wicepsik - teoretycznie wszystko działa, jednak ciągle na starcie, po wgraniu strony z formularzem dostaje komunikat, że: "Nie potwierdzono Wyrażam zgodę na przetwarzanie moich danych w formularzu". Jeśli możesz, zobacz sam, link trochę wyżej.
Fifi209
Może dla tego, że sam "submit" musi mieć też nazwę "submit" ? smile.gif (Przynajmniej według Wicepsa)

@edit
Po zaznaczeniu dwóch pól można wysłać pusty formularz. (coś nie tak)
cachaito
Wicepsik, oj ja niemądry. Twój kod (ten ostatni - o nim mówię) działa świetnie. Problem był jedynie taki, że niepotrzebnie wkleiłem to:
  1. <?php require_once("mailer.php"); ?>
do pliku z formularzem, zgodnie ze wskazówkami na stronie z oryginalnym kodem. Checkboxy działają idealnie, ale ciągle widzę problem z tą weryfikacją e-maili. Otóż wysyła wiadomość, nawet po wyświetleniu komunikatu, iż e-mail jest nieprawidłowy. Da się coś z tym zrobić?
Wicepsik
walidacja powinna nastąpić przed wysłaniem emaila
cachaito
Cytat(Wicepsik @ 15.06.2009, 23:14:50 ) *
walidacja powinna nastąpić przed wysłaniem emaila


Hmmm, tylko jak połączyć tą walidację z funkcją send. Oto jest pytanie :-/
Pozdrawiam!
Wicepsik
Pokaż cały skrypt php który stworzyłeś.
cachaito
Cytat(Wicepsik @ 16.06.2009, 10:52:45 ) *
Pokaż cały skrypt php który stworzyłeś.


Stworzyłeś, to za dużo powiedziane :-)

Marzy mi się, aby sprawdzał czy wszystkie pola są uzupełnione i czy e-mail jest prawidłowy.

Oto on:

  1. <?php
  2. if(!$_POST['zgoda1']=='1'){
  3.  
  4.  
  5.  echo "Nie potwierdzono: Wyrażam zgodę na przetwarzanie moich danych w formularzu";
  6.  
  7. }
  8. elseif(!$_POST['zgoda2']=='1'){
  9.  
  10.  echo "Nie potwierdzono: Potwierdzam, że dane wypełniłem prawidłowo";
  11.  
  12. }else{
  13.  
  14.  
  15.  
  16. class MicroMailer{
  17.   var $to         = "";
  18.   var $subject    = "";
  19.   var $message    = "";
  20.   var $fromName   = "";
  21.   var $fromEmail  = "";
  22.   var $header     = "";
  23.   var $type       = "text/plain";
  24.   var $characterSet = "utf-8";
  25.  
  26.  
  27.   function send(){
  28.       $this->createHeader();
  29.       if (@mail($this->to,$this->subject,$this->message,$this->header)){
  30.           return true;
  31.       } else {
  32.           return false;
  33.       }
  34.   }
  35.  
  36. function createHeader(){
  37.       $from   = "From: $this->fromName <$this->fromEmail>r\n";
  38.       $replay = "Reply-To: $this->fromEmailr\n";  
  39.       $params = "MIME-Version: 1.0r\n";
  40.       $params = "Content-type: $this->type; charset=$this->characterSetr\n";
  41.    
  42.       $this->header = $from.$replay.$params;
  43.       return $this->header;
  44.   }
  45.  
  46. }
  47.  
  48.  
  49.     $mailer = new MicroMailer();
  50.    
  51.     $mailer->to         = isset($_POST["to"]) ? $_POST["to"] : "";
  52.     $mailer->fromName   = isset($_POST["fromname"]) ? $_POST["fromname"] : "";
  53.     $mailer->fromEmail  = isset($_POST["fromemail"]) ? $_POST["fromemail"] : "";
  54.     $mailer->subject    = isset($_POST["subject"]) ? $_POST["subject"] : "";
  55.     $mailer->message    = isset($_POST["message"]) ? $_POST["message"] : "";
  56. if ($mailer->send()) {
  57.       echo "Wiadomość wysłana!";
  58.     } else {
  59.       echo "Błąd podczas wysyłania wiadomości!";
  60.     }
  61. }
  62. ?>
Wicepsik
  1. <?php
  2. if(isset)$_POST['submit']){
  3. if(empty($_POST['fromname'])){
  4.  
  5.    echo 'Nie podałeś swojego imienia';
  6.    
  7. }
  8. elseif(empty($_POST['fromemail']))
  9. {
  10.  
  11.    echo 'Nie podałeś swojego email'a';
  12.    
  13. }
  14. elseif(!eregi("^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,4})$", $_POST['fromemail']))
  15. {
  16.  
  17.    echo 'Błędny email';
  18.    
  19. }
  20. elseif(empty($_POST['message']))
  21. {
  22.  
  23.    echo 'Nie podałeś treści!';
  24.  
  25. }
  26. elseif(!$_POST['zgoda1']=='1')
  27. {
  28.  
  29. echo "Nie potwierdzono: Wyrażam zgodę na przetwarzanie moich danych w formularzu";
  30.  
  31. }
  32. elseif(!$_POST['zgoda2']=='1')
  33. {
  34.  
  35. echo "Nie potwierdzono: Potwierdzam, że dane wypełniłem prawidłowo";
  36.  
  37. }
  38. else
  39. {
  40.  
  41.  
  42.  
  43. class MicroMailer{
  44.  var $to         = "";
  45.  var $subject    = "";
  46.  var $message    = "";
  47.  var $fromName   = "";
  48.  var $fromEmail  = "";
  49.  var $header     = "";
  50.  var $type       = "text/plain";
  51.  var $characterSet = "utf-8";
  52.  
  53.  
  54.  function send(){
  55.      $this->createHeader();
  56.      if (@mail($this->to,$this->subject,$this->message,$this->header)){
  57.          return true;
  58.      } else {
  59.          return false;
  60.      }
  61.  }
  62.  
  63. function createHeader(){
  64.      $from   = "From: $this->fromName <$this->fromEmail>r\n";
  65.      $replay = "Reply-To: $this->fromEmailr\n";  
  66.      $params = "MIME-Version: 1.0r\n";
  67.      $params = "Content-type: $this->type; charset=$this->characterSetr\n";
  68.  
  69.      $this->header = $from.$replay.$params;
  70.      return $this->header;
  71.  }
  72.  
  73. }
  74.  
  75.  
  76.    $mailer = new MicroMailer();
  77.  
  78.    $mailer->to         = isset($_POST["to"]) ? $_POST["to"] : "";
  79.    $mailer->fromName   = isset($_POST["fromname"]) ? $_POST["fromname"] : "";
  80.    $mailer->fromEmail  = isset($_POST["fromemail"]) ? $_POST["fromemail"] : "";
  81.    $mailer->subject    = isset($_POST["subject"]) ? $_POST["subject"] : "";
  82.    $mailer->message    = isset($_POST["message"]) ? $_POST["message"] : "";
  83. if ($mailer->send()) {
  84.      echo "Wiadomość wysłana!";
  85.    } else {
  86.      echo "Błąd podczas wysyłania wiadomości!";
  87.    }
  88.  
  89. }
  90. }
  91. ?>



  1. <input type="submit" value="Wyślij!" />
  2. <!-- Na -->
  3. <input type="submit" name="submit" value="Wyślij!" />
cachaito
Wicepsik - serdecznie dziękuję! Działa pięknie. Dziękuje za poświęcony czas i cierpliwość, miłego dnia życzę! Także wszystkim, którzy starali mi się w tym poście pomóc :-)
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.