Skocz do zawartości

Pusty wynik z pola select w form. kontaktowym


wbeatn

Polecane posty

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

  • 5 weeks later...

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

  • 3 months later...

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

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...