wbeatn Napisano Marzec 31, 2012 Zgłoś Share Napisano Marzec 31, 2012 Witam. Mam skrypt służący do wysyłania wiadomości email z poziomu strony internetowej. Chcę aby adresat był wybierany z pola 'select' w formularzu. W owym polu posiadam dwie opcje z różniącymi się od siebie emailami jako wartość 'value'. Niestety kiedy w kodzie PHP jako email podam "$_POST['getemail']" mail nie dociera do adresata. Kiedy zaś zamiast wartości $_POST wpiszę po prostu adres emailowy, wiadomość dochodzi bez problemu. HTML <form action="contact.php" method="post" id="contactform"> <ol> <li> <label>Adresat</label> <select name="getemail" class="text"><option value="email1@mail.com" selected="selected">Dyr. stategiczny</option><option value="email2@mail.com">Dyr. handlowy</option></select> </li> <li> <label for="name">Przedstaw się</label> <input id="name" name="name" class="text" /> </li> <li> <label for="email">Twój email</label> <input id="email" name="email" class="text" /> </li> <li> <label for="subject">Temat</label> <input id="subject" name="subject" class="text" /> </li> <li> <label for="message">Wiadomość</label> <textarea id="message" name="message" rows="6" cols="50"></textarea> </li> <li class="buttons"> <input type="image" name="imageField" id="imageField" src="imgs/send.gif" class="send" /> <div class="clr"></div> </li> </ol> </form> PHP <?php include('inc/system.php'); if(!$_POST) exit; $email = $_POST['email']; //$error[] = preg_match('/\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i', $_POST['email']) ? '' : 'INVALID EMAIL ADDRESS'; if(!eregi("^[a-z0-9]+([_\\.-][a-z0-9]+)*" ."@"."([a-z0-9]+([\.-][a-z0-9]+)*)+"."\\.[a-z]{2,}"."$",$email )){ $error.="Wpisano błędny adres email"; $errors=1; } if($errors==1) echo $error; else{ $values = array ('name','email','message'); $required = array('name','email','message'); $your_email = $_POST['getemail']; $email_subject = "New Message: ".$_POST['subject']; $email_content = '<div style="width: 60%; padding: 8px; margin-bottom: 2px; background: #252525; border: solid 1px #e4e4e4; font-size: 13px; color: #e8e8e8;"><b>Ta wiadomość została wysłana z formularza na stronie <a style="color: #a0a0a0; text-decoration: none;" href="http://www.xxx.com">www.xxx.com</a></b></div>'; $header="From:$email\n"; $header.="Content-Type: text/html; charset=utf-8\n"; foreach($values as $key => $value){ if(in_array($value,$required)){ if ($key != 'subject' && $key != 'company') { if( empty($_POST[$value]) ) { echo 'PLEASE FILL IN REQUIRED FIELDS'; exit; } } $email_content .= '<div style="width: 60%; padding: 8px; margin-bottom: 2px; background: #f6f6f6; border: solid 1px #e4e4e4; font-size: 13px; color: #505050;">'.getforminput($_POST[$value]).'</div>'; } } if(@mail($your_email,$email_subject,$email_content,$header)) { echo 'Message sent!'; } else { echo 'ERROR!'; } } ?> Wydaje się, że wszystko powinno działać. Niestety w przypadku użycia $_POST mail nie dociera na skrzynkę pocztową. Jak rozumiem z pola select nie pobiera wybranej opcji i wysyłany mail nie posiada adresata. Dlaczego ? Sprawdzałem wszystkie zmienne. Wyświetlają się poprawnie wynik ze wszystkich oprócz właśnie wyniku z pola select. if(mail($your_email,$email_subject,$email_content,$headers)) { echo '1 - '.htmlspecialchars($_POST['getemail']).'<br />'; echo '2 - '.htmlentities($_POST['getemail']).'<br />'; echo '3 - '.htmlspecialchars(urldecode($_POST['getemail'])).'<br />'; echo '4 - '.htmlentities(urldecode($_POST['getemail'])).'<br />'; echo '5 - '.urldecode($_POST['getemail']).'<br />'; echo '6 - '.$_POST['getemail'].'<br />'; echo '7 - '.$_POST['email'].'<br />'; echo '8 - '.$_POST['subject'].'<br />'; echo '9 - '.$_POST['name'].'<br />'; echo '10 - '.$_POST['message'].'<br />'; echo 'Message sent!'; } else { echo 'ERROR!'; } Pola od 1 do 6: pusty wynik. Reszta: wszystko OK! Link do komentarza Udostępnij na innych stronach More sharing options...
dj.drezyna Napisano Kwiecień 29, 2012 Zgłoś Share Napisano Kwiecień 29, 2012 Nie wiem za bardzo gdzie tu może być błąd, bo u mnie skrypt działa z następującymi zmianami: Usunąłem funkcję getforminput() Oraz deklarację include Z każdego pola option można wysłać mejla po uzupełnieniu wszystkich pól, robią się kolorki wiadomości i jest jak najbardziej sformatowana, a jedyne czego czepia się kompilator to tego, że funkcja eregi() jest przestarzała. Galeria przyrodnicza http://fotokrajobrazy.warmia.pl Link do komentarza Udostępnij na innych stronach More sharing options...
munky Napisano Sierpień 20, 2012 Zgłoś Share Napisano Sierpień 20, 2012 Sprawdzałeś co zwraca Tobie $_POST['getemail'] ? Link do komentarza Udostępnij na innych stronach More sharing options...
sazian Napisano Sierpień 20, 2012 Zgłoś Share Napisano Sierpień 20, 2012 var_dump($_POST); if(mail($your_email,$email_subject,$email_content,$headers)) { echo '1 - '.htmlspecialchars($_POST['getemail']).'<br />'; echo '2 - '.htmlentities($_POST['getemail']).'<br />'; echo '3 - '.htmlspecialchars(urldecode($_POST['getemail'])).'<br />'; echo '4 - '.htmlentities(urldecode($_POST['getemail'])).'<br />'; echo '5 - '.urldecode($_POST['getemail']).'<br />'; echo '6 - '.$_POST['getemail'].'<br />'; echo '7 - '.$_POST['email'].'<br />'; echo '8 - '.$_POST['subject'].'<br />'; echo '9 - '.$_POST['name'].'<br />'; echo '10 - '.$_POST['message'].'<br />'; echo 'Message sent!'; } else { echo 'ERROR!'; } wynik: array 'getemail' => string 'email1@mail.com' (length=15) 'name' => string 'ja' (length=2) 'email' => string 'ja@ja.loc' (length=9) 'subject' => string 'sfds' (length=4) 'message' => string 'sdfgds' (length=6) 'imageField_x' => string '0' (length=1) 'imageField_y' => string '0' (length=1) 1 - email1@mail.com 2 - email1@mail.com 3 - email1@mail.com 4 - email1@mail.com 5 - email1@mail.com 6 - email1@mail.com 7 - ja@ja.loc 8 - sfds 9 - ja 10 - sdfgds Message sent! Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.