JQuery / PHP отправка формы - PullRequest
       21

JQuery / PHP отправка формы

0 голосов
/ 01 августа 2011

Хорошо, это будет немного затянуто, и я не уверен, должно ли это быть в javascript или php, у меня есть контактная форма следующим образом:

<form action="contact.php" method="POST" id='contact_form'>
            <p><label for="name">Name</label>
            <input type='text' name='name' id='name' /></p>
            <div class="clear"></div>
            <p id='name_error' class='error'>Enter your name</p>

            <p><label for="email">Email</label>
            <input type='text' name='email' id='email' /></p>
            <div class="clear"></div>
            <p id='email_error' class='error'>Enter a valid email address</p>

            <p><label for="telephone">Telephone</label>
            <input type='text' name='telephone' id='telephone' /></p>
            <div class="clear"></div>
            <p id='subject_error' class='error'>Enter your telephone number</p>

            <p><label for="message">Details</label>
            <textarea name='message' id='message' rows="30" cols="30"></textarea></p>
            <div class="clear"></div>
            <p id='message_error' class='error'>Enter your message</p>

            <p id='mail_success' class='success'>Thank you. We will be in contact soon.</p>
            <p id='mail_fail' class='error'>Sorry, an error has occured. Please try again later.</p>

            <div id="button">
                <input type='submit' id='send_message' class="button" value='Submit' />
            </div>
        </form>

Javascript:

$(document).ready(function(){
        $('#send_message').click(function(e){

            //stop the form from being submitted
            e.preventDefault();

            /* declare the variables, var error is the variable that we use on the end
            to determine if there was an error or not */
            var error = false;
            var name = $('#name').val();
            var email = $('#email').val();
            var telephone = $('#telephone').val();
            var message = $('#message').val();


            if(name.length == 0){
                var error = true;
                $('#name_error').fadeIn(500);
            }else{
                $('#name_error').fadeOut(500);
            }
            if(email.length == 0 || email.indexOf('@') == '-1'){
                var error = true;
                $('#email_error').fadeIn(500);
            }else{
                $('#email_error').fadeOut(500);
            }
            if(telephone.length == 0){
                var error = true;
                $('#subject_error').fadeIn(500);
            }else{
                $('#subject_error').fadeOut(500);
            }
            if(message.length == 0){
                var error = true;
                $('#message_error').fadeIn(500);
            }else{
                $('#message_error').fadeOut(500);
            }

            //now when the validation is done we check if the error variable is false (no errors)
            if(error == false){
                //disable the submit button to avoid spamming
                //and change the button text to Sending...
                $('#send_message').attr({'disabled' : 'true', 'value' : 'Sending...' });

                //we submit it to contact.asp
                $.post("contact.php", $("#contact_form").serialize(),function(result){
                    //and after the ajax request ends we check the text returned
                    if($.trim(result) == 'sent'){
                       $('#button').remove();
                       $('#mail_fail').fadeOut(500);
                       $('#mail_success').fadeIn(500);
                    }else{
                        //show the mail failed div
                        $('#mail_fail').fadeIn(500);
                        //reenable the submit button by removing attribute disabled and change the text back to Send The Message
                        $('#send_message').removeAttr('disabled').attr('value', 'Submit');
                    }
                });
            }
        });    
    });

и PHP:

<?php

$EmailFrom = Trim(stripslashes($_POST['email'])); 
$EmailTo = "joe@bloggs.com";
$Subject = "Contact Form Message";
$name = Trim(stripslashes($_POST['name'])); 
$email = Trim(stripslashes($_POST['email']));
$telephone = Trim(stripslashes($_POST['telephone'])); 
$message = Trim(stripslashes($_POST['message'])); 


$validationOK=true;
if (Trim($name)=="") $validationOK=false;
if (Trim($email)=="") $validationOK=false;
if (Trim($telephone)=="") $validationOK=false;
if (Trim($message)=="") $validationOK=false;
if (!$validationOK) {
  print "failed";
  exit;
}


$Body = "";
$Body .= "name: ";
$Body .= $name;
$Body .= "\n";
$Body .= "email: ";
$Body .= $email;
$Body .= "\n";
$Body .= "telephone: ";
$Body .= $telephone;
$Body .= "\n";
$Body .= "message: ";
$Body .= $message;
$Body .= "\n";


$success = mail($EmailTo, $Subject, $Body, "From: <$email>");

if ($success){
  print "sent";
}
else{
  print "failed";
}
?>

При заполнении я получаю «Извините, произошла ошибка. Пожалуйста, повторите попытку позже».сообщение, но не видите, где я ошибся?

Заранее благодарен за любую помощь.

Ответы [ 4 ]

0 голосов
/ 19 сентября 2013

Вы работаете на локальном хосте или ваш код находится на сервере общего хостинга?(т. е. GoDaddy или аналогичная компания)

Если вы находитесь на локальном хосте, у вас может не быть правильно настроенного почтового сервера.Если ваш код размещен на хосте, есть ли у вас учетная запись электронной почты, настроенная у провайдера, с которого отправлять почту?Предоставляет ли пакет вашей учетной записи доступ к функции mail ()?

Если у вас есть доступ к журналу ошибок PHP или журналу Apache, вы должны проверить их.Вы также должны настроить страницу phpinfo, чтобы вы могли видеть, как настроена ваша среда.

В любом сценарии вы, безусловно, можете проверить POST-запрос в своем браузере, чтобы убедиться, что сервер возвращает ошибку HTTP.Используйте Firefox с Firebug или Chrome с включенными средствами разработки.

0 голосов
/ 01 августа 2011

Если результат содержит весь html-код вашей страницы, это означает, что ваш скрипт не останавливается в нужной точке или, возможно, сообщение js не соответствует адресу (да, я вижу, что вы указали contact.php, но если есть перезаписьправила в htaccess возможны).

Попробуйте добавить exit (0);в нижней части этого сценария.Под последним если.Кажется, этот php включен в другой php-файл, который отображает остальную часть сайта после отправки электронного письма.

0 голосов
/ 01 августа 2011

Код php ничего не возвращает обратно пользователю.

  1. Ваш почтовый модуль включен в PHP?
  2. Вы должны вернуть тело сообщения для отладки.

Лично я избегаю использовать печать, так как это всего лишь конструкция и поведение, когда вы «печатаете» несколько элементов вплотную, это не имеет значения

0 голосов
/ 01 августа 2011

Загружается ли он на сервер, который поддерживает PHP, потому что PHP не будет работать правильно без поддержки сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...