2015-10-24 3 views
3

Я хочу добавить контактную форму на моем сайте, и я беру один пример из Интернета и внесли некоторые изменения для его отправки почты, и я сделал это для вставки данных в базу данных. так вот мой первый файл index.phppop up form ajax запрос не работает

<!doctype html> 
<html lang="en"> 
<head> 

    <title>A Slick Ajax Contact Form with jQuery and PHP</title> 
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script> 

    <script type="text/javascript"> 

     var messageDelay = 2000; // How long to display status messages (in milliseconds) 

     // Init the form once the document is ready 
     $(init); 

     // Initialize the form 
     function init() { 

      // Hide the form initially. 
      // Make submitForm() the form's submit handler. 
      // Position the form so it sits in the centre of the browser window. 
      $('#contactForm').hide().submit(submitForm).addClass('positioned'); 

      // When the "Send us an email" link is clicked: 
      // 1. Fade the content out 
      // 2. Display the form 
      // 3. Move focus to the first field 
      // 4. Prevent the link being followed 

      $('a[href="#contactForm"]').click(function() { 
       $('#content').fadeTo('slow', .2); 
       $('#contactForm').fadeIn('slow', function() { 
        $('#senderName').focus(); 
       }) 

       return false; 
      }); 

      // When the "Cancel" button is clicked, close the form 
      $('#cancel').click(function() { 
       $('#contactForm').fadeOut(); 
       $('#content').fadeTo('slow', 1); 
      }); 

      // When the "Escape" key is pressed, close the form 
      $('#contactForm').keydown(function(event) { 
       if (event.which == 27) { 
        $('#contactForm').fadeOut(); 
        $('#content').fadeTo('slow', 1); 
       } 
      }); 

     } 

     // Submit the form via Ajax 
     function submitForm() { 

      var contactForm = $(this); 

      // Are all the fields filled in? 
      if (!$('#senderName').val() || !$('#senderEmail').val() || !$('#ContactNo').val() || !$('#message').val()) { 

       // No; display a warning message and return to the form 
       $('#incompleteMessage').fadeIn().delay(messageDelay).fadeOut(); 
       contactForm.fadeOut().delay(messageDelay).fadeIn(); 

      } else { 

       // Yes; submit the form to the PHP script via Ajax 
       $('#sendingMessage').fadeIn(); 
       contactForm.fadeOut(); 

       $.ajax({ 
        url: contactForm.attr('action') + "?ajax=true", 
        type: contactForm.attr('method'), 
        data: contactForm.serialize(), 
        success: submitFinished 
       }); 

      } 

      // Prevent the default form submission occurring 
      return false; 
     } 

     // Handle the Ajax response 
     function submitFinished(response) { 
      response = $.trim(response); 
      $('#sendingMessage').fadeOut(); 

      if (response == "success") { 

       // Form submitted successfully: 
       // 1. Display the success message 
       // 2. Clear the form fields 
       // 3. Fade the content back in 

       $('#successMessage').fadeIn().delay(messageDelay).fadeOut(); 
       $('#senderName').val(""); 
       $('#senderEmail').val(""); 
       $('#ContactNo').val(""); 
       $('#message').val(""); 

       $('#content').delay(messageDelay + 500).fadeTo('slow', 1); 

      } else { 

       // Form submission failed: Display the failure message, 
       // then redisplay the form 
       $('#failureMessage').fadeIn().delay(messageDelay).fadeOut(); 
       $('#contactForm').delay(messageDelay + 500).fadeIn(); 

      } 

     } 

    </script> 

</head> 
<body> 

    <div id="content"> 
     <p style="padding-bottom: 50px; font-weight: bold; text-align: center;"><a href="#contactForm">~ Send us an email ~</a></p> 
    </div> 

    <form id="contactForm" action="processForm.php" method="post"> 
     <h2>Send us an email...</h2> 
     <ul> 
      <li> 
       <label for="senderName">Full Name</label> 
       <input type="text" name="senderName" id="senderName" placeholder="Please type your name" required="required" maxlength="40" /> 
      </li> 
      <li> 
       <label for="senderEmail">Email</label> 
       <input type="email" name="senderEmail" id="senderEmail" placeholder="Please type your email address" required="required" maxlength="50" /> 
      </li> 
      <li> 
       <label for="ContactNo">Contact No</label> 
       <input type="text" name="ContactNo" id="ContactNo" placeholder="Please type your contact no" required="required" maxlength="50" /> 
      </li> 
      <li> 
       <label for="message" style="padding-top: .5em;">Your Message</label> 
       <textarea name="message" id="message" placeholder="Please type your message" required="required" cols="80" rows="10" maxlength="10000"></textarea> 
      </li> 
     </ul> 
     <div id="formButtons"> 
      <input type="submit" id="sendMessage" name="sendMessage" value="Send Email" /> 
      <input type="button" id="cancel" name="cancel" value="Cancel" /> 
     </div> 
    </form> 

    <div id="sendingMessage" class="statusMessage"> 
     <p>Sending your message. Please wait...</p> 
    </div> 

    <div id="successMessage" class="statusMessage"> 
     <p>Thanks for sending your message! We'll get back to you shortly.</p> 
    </div> 

    <div id="failureMessage" class="statusMessage"> 
     <p>There was a problem sending your message. Please try again.</p> 
    </div> 

    <div id="incompleteMessage" class="statusMessage"> 
     <p>Please complete all the fields in the form before sending.</p> 
    </div> 

</body> 
</html> 

и другой - процессForm.php есть.

<?php 

// Read the form values 
$success  = false; 
$senderName = isset($_POST['senderName']) ? preg_replace("/[^\.\-\' a-zA-Z0-9]/", "", $_POST['senderName']) : ""; 
$senderEmail = isset($_POST['senderEmail']) ? preg_replace("/[^\.\-\_\@a-zA-Z0-9]/", "", $_POST['senderEmail']) : ""; 
$ContactNo = isset($_POST['ContactNo']) ? preg_replace("/[^\ 0-9]/", "", $_POST['ContactNo']) : ""; 
$message  = $_POST['message']; 

// If all values exist, send the email 
if ($senderName && $senderEmail && $contactNo && $message) { 

    include("config.php"); 
    $success = mysql_query("INSERT INTO `inquiry` (`name`, `contact`, `email`, `query`) VALUES ('$senderName', '$ContactNo', '$senderEmail', '$message')"); 

} 

// Return an appropriate response to the browser 
if (isset($_GET["ajax"])) { 

    echo $success ? "success" : "error"; 

} else { ?> 

    <html> 
    <head> 
     <title>Thanks!</title> 
    </head> 
    <body> 

     <?php if ($success) echo "<p>Thanks for sending your message! We'll get back to you shortly.</p>" ?> 
     <?php if (!$success) echo "<p>There was a problem sending your message. Please try again.</p>" ?> 
     <p>Click your browser's Back button to return to the page.</p> 

    </body> 
    </html> 

<?php } ?> 

Проблема в том, когда я отправляю право на это сообщение с изображением «Не удалось отправить сообщение. Повторите попытку». пожалуйста помогите.

+0

Вы проверили базу данных? Где вы устанавливаете $ success для «true»? – JSLirola

+0

Попробуйте изменить $ _GET на $ _POST, где вы проверяете, установлен ли ajax, в сценарии Php, поскольку форма установлена ​​на метод post – med116

+0

. Я меняю его на $ _GET на $ _POST. та же проблема. –

ответ

3

Я думаю, вы должны изменить эту линию.

if ($senderName && $senderEmail && $contactNo && $message) { 

к

if ($senderName && $senderEmail && $ContactNo && $message) { 
1

Вы никогда не заходило, где $success на самом деле успех, который был бы в этой строке после запроса выполнил:

$success=mysql_query("INSERT INTO `inquiry` (`name`, `contact`, `email`, `query`) VALUES ('$senderName', '$ContactNo', '$senderEmail', '$message')"); 

$success был на самом деле $query изначально.

Это будет возвращать булево false если query не удается, и ресурс, если это правда (я думаю), который будет вычисляться true

+0

Я меняю $ query на $ success. та же проблема. –

3

Проблема может быть связана с использованием/доступа к несуществующему переменной contactNo так (php.net)

Имя переменной чувствительно к регистру.

И, таким образом, он должен быть изменен соответственно (после имени переменной $_POST['ContactNo'] случае зависит от кода, который не представленный здесь, в результате чего, как это)

$contactNo = isset($_POST['ContactNo']) ? preg_replace("/[^\ 0-9]/", "", $_POST['ContactNo']) : ""; 

Наконец, но не в последнюю очередь - остановка с использованием mysql, поскольку он устарел от PHP 5.5.0 и удаляется с php 7.0.0.

1

Вы пытались вывести все значения переменных.

Print_r ('sendName:'. $ SenderName. 'SendEmail:'. $ SenderEmail. 'Contact:'. $ ContactNo. 'Message:'. $ Message); Перед условной проверки если ($ SenderName & & $ SENDEREMAIL & & $ contactNo & & $ сообщение) {

// затем добавить это знать, что вы на самом деле соединения с БД эхо 'теперь вставив отправка ... ;

// Затем после вставки попробуйте проверить/получить mysql последнюю ошибку, если она существует. И эхо-сигнал.

1

PHP переменные чувствительны к регистру. В вашем случае $ _POST ['ContactNo'] устанавливается в $ ContactNo.

Таким образом, условие if должно быть;

if ($senderName && $senderEmail && $ContactNo && $message) {