2014-10-08 2 views
0

В следующем коде у меня есть контактная форма, и в этой форме есть сценарий проверки электронной почты. В результате проверки я хочу, чтобы сообщение об ошибке отображалось в div, называемом подтверждением, без перезагрузки страницы. Кроме того, если письмо действительно, почта будет отправлена, и я хочу, чтобы сообщение «Спасибо» было показано в том же div подтверждении. Проблема в том, что я могу сделать, чтобы предотвратить перезагрузку страницы и сообщить об ошибке или сообщении с благодарностью в поле подтверждения?отображение текста в div без перезагрузки страницы

<html> 
<body> 
<?php 
function spamcheck($field) { 
    // Sanitize e-mail address 
    $field=filter_var($field, FILTER_SANITIZE_EMAIL); 
    // Validate e-mail address 
    if(filter_var($field, FILTER_VALIDATE_EMAIL)) { 
    return TRUE; 
    } else { 
    return FALSE; 
    } 
} 
?> 

<?php 
if (!isset($_POST["submit"])) { 
    ?> 
    <form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>"> 
    From: <input type="text" name="from"><br> 
    Subject: <input type="text" name="subject"><br> 
    Message: <textarea rows="10" cols="40" name="message"></textarea><br> 
    <input type="submit" name="submit" value="Submit Feedback"><br> 
    <div id="confirmation" style="display:none" align="center"></div> 
    </form> 
    <?php 
} else { // the user has submitted the form 
    // Check if the "from" input field is filled out 
    if (isset($_POST["from"])) { 
    // Check if "from" email address is valid 
    $mailcheck = spamcheck($_POST["from"]); 
    if ($mailcheck==FALSE) { 
     echo" 
     <script> 
     document.getElementById('confirmation').text ='invalid email'; 
     </script>"; 
    } else { 
     $from = $_POST["from"]; // sender 
     $subject = $_POST["subject"]; 
     $message = $_POST["message"]; 
     // message lines should not exceed 70 characters (PHP rule), so wrap it 
     $message = wordwrap($message, 70); 
     // send mail 
     mail("[email protected]",$subject,$message,"From: $from\n"); 
     echo" 
     <script> 
     document.getElementById('confirmation').text ='Thank you'; 
     </script>"; 
    } 
    } 
} 
?> 
</body> 
</html> 

Благодаря

+2

Вы могли бы сделать то, что вы хотите использовать Ajax – mpacheco

+0

вам нужно будет отправить форму используя AJAX, вы получите ответ и покажете соответствующие абсолютные позиционные divs (ошибка сообщения, сообщения благодарности) – Sharky

+0

'document.getElementById ('подтверждение'). innerHTML = '

test
';' –

ответ

1
<input type="text" name="from" id ="from"> 

Вызов:

var request = $.ajax({ 
    url: "file.php", 
    type: "POST", 
    data: { email : $('#from').val() } 
}); 

request.done(function(msg) { 
    //handle HTML 
}); 

request.fail(function(jqXHR, textStatus) { 
    //Handle problem at server side 
}); 

PHP Side

<?php 

$email = $_POST["email"] 

function spamcheck($field) { 
    // Sanitize e-mail address 
    $field=filter_var($field, FILTER_SANITIZE_EMAIL); 
    // Validate e-mail address 
    if(filter_var($field, FILTER_VALIDATE_EMAIL)) { 
    return 'valid'; 
    } else { 
    return 'no_valid'; 
    } 
} 

echo spamcheck($email); 
+0

Примечание по этому вопросу: я не пробовал код, это всего лишь руководство. – mpacheco

0

Там нет никакого способа, вы можете сделать это с только PHP.

То, что вы смотрите, обычно называется AJAX, и использует язык на стороне клиента (Javascript) Это очень распространенный и широко используемый в Интернете. Вы можете найти множество примеров и готовых к созданию сценариев, выполнив поиск ajax в google.

Больше информации здесь: пример http://www.w3schools.com/ajax/

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