wubeen
(wubeen)
31 Marzec 2012 03:41
#1
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
Adresat Dyr. stategicznyDyr. handlowy
Przedstaw się
Twój email
Temat
Wiadomość
[/code] PHP
[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 = ’
Ta wiadomość została wysłana z formularza na stronie www.xxx.com ’; $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 .= ’
‘.getforminput($_POST[$value]).’
'; } } 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 ?
Agaton
(Agatonster)
31 Marzec 2012 06:09
#2
wubeen ,
Zapoznaj się z tematem i popraw tytuł tematu na konkretny, mówiący o problemie. W celu dokonania zaleconej korekty proszę użyć przycisku Edytuj przy poście otwierającym ten temat.
Zignorowanie zalecenia będzie skutkowało usunięciem tematu do Kosza.
wubeen
(wubeen)
31 Marzec 2012 09:53
#3
Agaton:
wubeen,Zapoznaj się z tematem i popraw tytuł tematu na konkretny, mówiący o problemie. W celu dokonania zaleconej korekty proszę użyć przycisku Edytuj przy poście otwierającym ten temat. Zignorowanie zalecenia będzie skutkowało usunięciem tematu do Kosza.
Gotowe. Na innym forum mają takie cacko, co powoduje, że gdy w tytule użyłem tego wyrazu, to wyskoczyło powiadomienie iż on "słowem-wytrychem’ jest i co bym go szybciej zmienił. Niestety u was musicie się bawić w pisanie postów w tak drobnych sprawach. Pomyślcie, to nic trudnego wykluczyć możliwość używania kilku wyrazów w tytule wątku.
ra-v
(ra-v)
31 Marzec 2012 10:17
#4
Co zwraca
echo htmlspecialchars($_POST['getemail']).'
';
echo htmlentities($_POST['getemail']).'
';
?? Może tak
$your_email = urldecode($_POST['getemail']);
Od tego masz słownik w przeglądarce.
wubeen
(wubeen)
31 Marzec 2012 10:44
#5
if(mail($your_email,$email_subject,$email_content,$headers)) {
echo '1 - '.htmlspecialchars($_POST['getemail']).'
';
echo '2 - '.htmlentities($_POST['getemail']).'
';
echo '3 - '.htmlspecialchars(urldecode($_POST['getemail'])).'
';
echo '4 - '.htmlentities(urldecode($_POST['getemail'])).'
';
echo '5 - '.urldecode($_POST['getemail']).'
';
echo '6 - '.$_POST['getemail'].'
';
echo '7 - '.$_POST['email'].'
';
echo '8 - '.$_POST['subject'].'
';
echo '9 - '.$_POST['name'].'
';
echo '10 - '.$_POST['message'].'
';
echo 'Message sent!';
} else {
echo 'ERROR!';
}
Pola od 1 do 6: pusty wynik.
Reszta: wszystko OK!
ra-v
(ra-v)
31 Marzec 2012 12:24
#6
Po wrzuceniu w plik test.php takiego kodu…
<?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 = '
Ta wiadomość została wysłana z formularza na stronie www.xxx.com ’; $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 .= ‘
’.nl2br($_POST[$value]).’
’; } } if(mail($your_email,$email_subject,$email_content,$header)) { echo ‘Message sent!’; } else { echo ‘ERROR!’; } } ?> <?php echo '1 - ‘.htmlspecialchars($_POST[‘getemail’]).’ '; echo '2 - ‘.htmlentities($_POST[‘getemail’]).’ '; echo '3 - ‘.htmlspecialchars(urldecode($_POST[‘getemail’])).’ '; echo '4 - ‘.htmlentities(urldecode($_POST[‘getemail’])).’ '; echo '5 - ‘.urldecode($_POST[‘getemail’]).’ '; echo '6 - ‘.$_POST[‘getemail’].’ '; echo '7 - ‘.$_POST[‘email’].’ '; echo '8 - ‘.$_POST[‘subject’].’ '; echo '9 - ‘.$_POST[‘name’].’ '; echo '10 - ‘.$_POST[‘message’].’ '; ?>
1.
2. Adresat Dyr. stategicznyDyr. handlowy
3. Przedstaw się
4. Twój email
5. Temat
6. Wiadomość
7.
[/code] …i wysłaniu formularza widzę takie coś…
[code]Notice: Undefined variable: errors in /srv/www/localhost/test.php on line 12 Message sent! 1 - mail@wp.pl 2 - mail@wp.pl 3 - mail@wp.pl 4 - mail@wp.pl 5 - mail@wp.pl 6 - mail@wp.pl 7 - mail@wp.pl 8 - Test 9 - Raf 10 - testowa testowa Adresat Przedstaw się Twój email Temat Wiadomość
U Ciebie jest tak samo?
Albo to jakiś dziwny serwer albo w inc/system.php coś się dziej ze zmienną $_POST a w szczególności kluczem - co jest bardziej prawdopodobne. .
adpawl
(adpawl)
31 Marzec 2012 14:12
#7
Te kombinacje z urldecode etc. zbędne.
Błąd w 12 linii, to odwołanie do nieistniejącej zmiennej $errors . Trza na samym początku dać $errors=0; i będzie cacy.
Co jest w includowanym pliku i jaki ma on wpływ na wszystko - licho wie …prawdopodobnie jest w nim funkcja getforminput.
Tak czy owak, po korekcie tej zmiennej i bez funkcji getforminput (albo z nią i returnem) kod działa.
Poza tym, nie używaj eregi -ma status deprecated. Zamiast niej preg_match.
ra-v
(ra-v)
31 Marzec 2012 21:05
#8
To było strzelanie - bo coś się dzieje raczej w załączonym pliku, tylko czekamy za tym co się wyświetli użytkownikowi. Samo to że nie zwraca wartości to jest nadwyraz dziwne.
A co za różnica - chodzi tylko o test.