2013-06-24 3 views
0

Я очень новичок в PHP, но даже в этом случае, это не имеет никакого смысла для меня: У меня есть страница HTML, содержащий форму PHP следующим образом: ...PHP форма Email не работает должным образом

<article id="content"><div class="ic">Here comes the contact form!</div> 
    <div class="wrapper"> 
    <h2>Contact form</h2> 
    <form method="post" id="ContactForm" name="myemailform" action="sendemail.php"> 
    <div> 
    <div class="wrapper"> 
    <span>Nume:</span> 
    <div class="bg"><input type="text" class="input" name="myname"></div> 
    </div> 
    <div class="wrapper"> 
    <span>Adresa:</span> 
    <div class="bg"><input type="text" class="input" name="myadresa" ></div>        
    </div> 
    <div class="wrapper"> 
    <span>Email:</span> 
    <div class="bg"><input type="text" class="input" name="myemail" ></div>         
    </div> 
    <div class="textarea_box"> 
    <span>Mesaj:</span> 
    <div class="bg"><textarea name="textarea" cols="1" rows="1" name="mymesaj"></textarea></div> 
    </div> 
    <a href="#" class="button1" name='submit' value="submit" onclick='javascript: document.myemailform.binset=2; document.myemailform.submit();'>Send message</a> 
    </div> 
    </form> 
    </div> 
    </article> 

И sendemail.php действие следующим образом:

<?php 
if(isset($_POST['submit'])) { 

// EDIT THE 2 LINES BELOW AS REQUIRED 
$email_to = "[email protected]"; 
$email_subject = "Message from contact form"; 

function died($error) { 
// your error code can go here 
echo "We are very sorry, but there were error(s) found with the form you submitted. "; 
echo "These errors appear below.<br /><br />"; 
echo $error."<br /><br />"; 
echo "Please go back and fix these errors.<br /><br />"; 
die(); 
} 

// validation expected data exists 
if(!isset($_POST['myname']) || 
!isset($_POST['myadresa']) || 
!isset($_POST['myemail']) || 
!isset($_POST['mymesaj'])) { 
died('We are sorry, but there appears to be a problem with the form you submitted.');  
} 

$first_name = $_POST['myname']; // required 
$last_name = $_POST['myadresa']; // required 
$email_from = $_POST['myemail']; // required 
$comments = $_POST['mymesaj']; // required 

$error_message = ""; 
$email_exp = '/^[A-Za-z0-9._%-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/'; 
if(!preg_match($email_exp,$email_from)) { 
$error_message .= 'The Email Address you entered does not appear to be valid.<br />'; 
} 
$string_exp = "/^[A-Za-z .'-]+$/"; 
if(!preg_match($string_exp,$first_name)) { 
$error_message .= 'The First Name you entered does not appear to be valid.<br />'; 
} 
if(!preg_match($string_exp,$last_name)) { 
$error_message .= 'The Last Name you entered does not appear to be valid.<br />'; 
} 
if(strlen($comments) < 2) { 
$error_message .= 'The Comments you entered do not appear to be valid.<br />'; 
} 
if(strlen($error_message) > 0) { 
died($error_message); 
} 
$email_message = "Form details below.\n\n"; 

function clean_string($string) { 
    $bad = array("content-type","bcc:","to:","cc:","href"); 
    return str_replace($bad,"",$string); 
} 

$email_message .= "Name: ".clean_string($first_name)."\n"; 
$email_message .= "Adresa: ".clean_string($last_name)."\n"; 
$email_message .= "Email: ".clean_string($email_from)."\n"; 
$email_message .= "Mesaj efectiv: ".clean_string($comments)."\n"; 

// create email headers 
$headers = 'From: '.$email_from."\r\n". 
'Reply-To: '.$email_from."\r\n" . 
'X-Mailer: PHP/' . phpversion(); 
@mail($email_to, $email_subject, $email_message, $headers); 
?> 
<!-- include your own success html here --> 
Thank you for contacting us. We will be in touch with you very soon. 
<?php 
} 
    ?> 

Теперь проблема в том, что я получаю электронную почту, субъект нормально, то адрес электронной почты отправителя в порядке, но сообщение пусто ... нет Получено $ email_message. Почему это происходит? Любая помощь будет оценена по достоинству. Спасибо

+0

Проверьте выход '$ email_message' незадолго до почты отправлено. – Rikesh

+0

echo $ email_message перед отправкой почты и проверьте, содержит ли переменная сообщение. – KAsh

+0

Ваша функция 'clean_string()' не удалит те элементы, в которых цель заглавна (т.е. «Bcc:» или «Cc:» и т. Д.). В вашем регулярном выражении, предназначенном для проверки адресов электронной почты, будут отсутствовать адреса, такие как [email protected] uk или [email protected] Вся эта фильтрация необходима, но ее лучше сделать с помощью 'filter_input_array()', и, наконец, сказать кому-то свое имя недействительно, в лучшем случае невежливо! –

ответ

3

проблема с вашим

<textarea name="textarea" cols="1" rows="1" name="mymesaj"></textarea> 

есть два названия с текстовым полем и проверить его.

<textarea cols="1" rows="1" name="mymesaj"></textarea> 
+0

Спасибо Номи за ваше наблюдение. Вы были частично правы. Однако, кажется, существует проблема с if (isset ($ _ POST ['submit'])). Я думаю, что submit не отправлено. Я заменил «submit» на «myemail» после того, как заметил Номи, и теперь он работает. Спасибо всем –

1

если вы usinh HTML 5 или более поздней версии ... используйте «требуется» во входных тегов ... который автоматически проверит входные данные присутствуют или нет ...

, как это :

<input type="text" class="input" name="myname" required> 

и для проверки электронной почты дают тип ввода, как электронная почта ... не текст

так:

<input type="email" class="input" name="myemail" required > 

попробовать также AJAX, JQuery для дальнейших форм валидаций ..

+0

Прем, я не вижу код, потому что вы его не отформатировали правильно. Вы должны оставить пустую строку перед кодом, и код должен иметь отступы на 8 пробелов, чтобы они отображались неинтерпретированными. –

+0

Извините @CalinM спасибо за отзыв –

Смежные вопросы