Problem z prostym formularzem kontaktowym

0

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.

[b]HTML[/b]

[code] <form action="contact.php" method="post" id="contactform">



  1. <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></td>


  2. <label for="name">Przedstaw się</label>
    <input id="name" name="name" class="text" />


  3. <label for="email">Twój email</label>
    <input id="email" name="email" class="text" />


  4. <label for="subject">Temat</label>
    <input id="subject" name="subject" class="text" />


  5. <label for="message">Wiadomość</label>
    <textarea id="message" name="message" rows="6" cols="50"></textarea>


  6. <input type="image" name="imageField" id="imageField" src="imgs/send.gif" class="send" />



</form>[/code]</p>

[b]PHP[/b]

[code]<?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!';
}

}
?>[/code]

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 ?

0

Zrób sobie "echo" wszystkich wartości jakie podrzucasz do funkcji $mail, i zastanów się, która zmienna i dlaczego nie zawiera tego, co chcesz.
Swoją drogą - na ogół po to się robi formularze, żeby uniknąć podawania maila w czystym tekście - u Ciebie tak czy tak jest on widoczny (w kodzie HTML). To celowe? Można zamiast tego wpisać jako value wartości typu 1, 2 itd. i potem w php na podstawie tej wartości dobierać odpowiedni mail docelowy.

0

Funkcja mail bardzo rzadko dostarcza wiadomosci na poczty zazwyczaj jest to wina brakujacych naglowkow a jesli nie to wystepuja z nia inne problemy zainteresuj sie php mailer albo php+smtp
zajrzyj tez tutaj:
http://4programmers.net/PHP/E-maile_w_PHP
nie przegladalem Twojego kodu dokladnie ale nie sadze by to byla wina formularza a nawet jesli to pewnie naprawisz blad w formularzu i kolejny wyskoczy przy funkcji mail.

0
dzek69 napisał(a)

Zrób sobie "echo" wszystkich wartości jakie podrzucasz do funkcji $mail, i zastanów się, która zmienna i dlaczego nie zawiera tego, co chcesz.
Swoją drogą - na ogół po to się robi formularze, żeby uniknąć podawania maila w czystym tekście - u Ciebie tak czy tak jest on widoczny (w kodzie HTML). To celowe? Można zamiast tego wpisać jako value wartości typu 1, 2 itd. i potem w php na podstawie tej wartości dobierać odpowiedni mail docelowy.

Ze zmiennymi już robiłem. Wszystkie wyświetlają wynik poprawnie, oprócz właśnie z pola select. Użycie 1 i 2 jako wartości wziąłem pod uwagę i mam zamiar jej użyć jeżeli nikt nie znajdzie rozwiązania na wszystkich forach, na których ta sprawę poruszyłem. Tymczasem nie miałem jeszcze czasu by przetestować ta metodę.
Dzięki za interwencję.

funkcja mail napisał(a)

nie przegladalem Twojego kodu dokładnie ale nie sadze by to była wina formularza a nawet jesli to pewnie naprawisz blad w formularzu i kolejny wyskoczy przy funkcji mail.

Dzięki za wzmiankę na temat funkcji 'mail'. Co do reszty, to chyba źle napisałem posta. Ja nie sądzę, że wina jest po stronie formularza. Ja wiem, że wina jest po stronie PHP i tam szukam przyczyny, lecz nie potrafię jej znaleźć. :( Szkoda, że próbujesz pomóc bez dokładnego zapoznania się z problemem. Nie wiem jak taką pomoc mógłbym uważać za godną uwagi. Bez obrazy, ale tego rodzaju interwencja, to nie jest to czego oczekiwałem.

0

sugestia gościa powyżej ma sens wbrew pozorom. funkcja mail to słaby wybór.

zrób sobie print_r($_POST) i pokaż co z tego wyszło.

I uwaga: po selekcie masz </td> --- jeżeli używasz tabel wcześniej, to możliwe, że źle wyzamykane tagi spowodowały, że przeglądarka próbując poprawić po Tobie błędy html "wywaliła" tego selecta poza <form>.

Skoro zrobiłeś taki błąd to pewnie klepiesz w byle czym - zainteresuj się jakimś IDE.

0
dzek69 napisał(a)

zrób sobie print_r($_POST) i pokaż co z tego wyszło.

if(mail($your_email,$email_subject,$email_content,$headers)) {
	echo print_r($_POST['getemail']);
	echo 'Message sent!'; 
	} else {
		echo 'ERROR!';
	}

Wyświetliło cyfrę '1'.

dzek69 napisał(a)

I uwaga: po selekcie masz </td> --- jeżeli używasz tabel wcześniej, to możliwe, że źle wyzamykane tagi spowodowały, że przeglądarka próbując poprawić po Tobie błędy html "wywaliła" tego selecta poza <form>.

Usunięcie nic nie zmieniło.

dzek69 napisał(a)

Skoro zrobiłeś taki błąd to pewnie klepiesz w byle czym - zainteresuj się jakimś IDE.

Co to IDE ?

0

nie rob print_r($_post['getemail') tylko print_r($_POST);
IDE to ze tak powiem "edytor programistyczny" (czyli nie klepiesz kodu w czystym notatniku tylko edytorze kodu)

ps. jezeli kod

if(mail($your_email,$email_subject,$email_content,$headers)) {
        echo print_r($_POST['getemail']);
        echo 'Message sent!'; 
        } else {
                echo 'ERROR!';
        }

pokazal Ci ze getemail to '1' tzn ze funkcja mail wykonala sie prawidlowo jednak mail nie doszedl tak czy owak.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.