2013-12-18 4 views
0

Я уверен, что люди сталкивались с этой проблемой раньше, но я не вижу, где я ошибаюсь. (Я проверил функцию isset() в моем коде, и это выглядит нормально, но оно все равно препятствует отправке сообщения электронной почты)undefined index in PHP Wordpress

Я создал свою контактную форму на Wordpress. Таким образом, форма вызывает функцию jQuery AJAX, которая соединяется с файлом PHP. Мой файл PHP сохраняется в корне папки установки Wordpress (то есть в самом начале) Отрывок следующим

JQuery

$('#contactForm').submit(function (event) { 
event.preventDefault(); 
sendContactForm(); //Call the function 
}); 

function sendContactForm(){ 
    var dataString=$('#contactForm').serializeArray(); 

    $.post("/contact.php", dataString, function(data) { 
    if(data.status == "1") { 
    alert('Message successfully sent'); 
    } 
    else if(data.status=="2") { 
    alert('Please enter Antispam correctly'); 
    } 
    else { 
    alert('Network error. Please try again'); 
    } 
    }, 
    "json" 
    ); 

    }; 

PHP

header('Content-Type: application/json charset=utf-8'); 
$name = $_POST['name']; 
$email = $_POST['email']; 
$telephone = $_POST['telephone']; 
$choice = $_POST['choice'];  
$message = $_POST['message']; 
$from = '[email protected]'; 
$headers = "MIME-Version: 1.0" . "\r\n"; 
$headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n"; 
$headers .= 'From: ' . $from . "\r\n"; 
$to = '[email protected]'; 
$subject = $name . ' has sent you a message'; 
$human = $_POST['antispam']; 

$body = "<html><body>"; 
$body.= "Change Request"; 
$body.= "<table style='border-color: #666;' cellpadding='2'>"; 
$body.= "<tr style='background: #eee;'><td><b>Name:</b> </td><td>" . $name . "</td></tr>"; 
$body.= "<tr style='background: #eee;'><td><b>Email:</b> </td><td>" . $email . "</td></tr>"; 
$body.= "<tr style='background: #eee;'><td><b>Contact:</b> </td><td>" . $telephone . "</td></tr>"; 
$body.= "<tr style='background: #eee;'><td><b>Service Type:</b> </td><td>" . $choice . "</td></tr>";  
$body.= "<tr style='background: #eee;'><td><b>Message:</b> </td><td>" . $message . "</td></tr>"; 
$body.= "</table>"; 
$body.= "</body></html>"; 

if(!empty($_POST['name']) && 
    !empty($_POST['email']) && 
    !empty($_POST['telephone']) && 
    !empty($_POST['choice']) && 
    !empty($_POST['message']) && 
    $human == '4') {     
    if (mail ($to, $subject, $body, $headers)) { 
     echo '{"status":"1"}'; 
    } else { 
     echo '{"status":"0"}'; 
    } 
} 
else 
{ 
    echo '{"status":"2"}'; 
} 

Моя ошибка, полученный в ответ Сетевой консоли:

Примечание: Undefined индекс: имя в /clientdata/apache-www/k/i/mywebsite.com.au/www/contact.php на линии

Примечание: Undefined индекс : электронная почта в /clientdata/apache-www/k/i/mywebsite.com.au/www/contact.php на линии

Примечание: Undefined индекс: телефон в /clientdata/апача -www/к/я/mywebsite.com.au/WWW/прод act.php на линии
{ «Статус»: «2»}

Как вы можете видеть, я явно упомянул, что каждая запись не должна быть пустой, и я также ввести каждый из них, когда я заполнить моя контактная форма. По какой-то причине он терпит неудачу, а затем переходит к последнему условию со статусом = 2. Этот же код работал раньше на том же сервере хостинга. Я не уверен, что это моя проблема с кодом или проблема с хостингом, которая мешает этому отправляться.

Мой HTML формы, а также (не уверен, что это могло бы помочь в расследовании, а)

<form class="form" role="form" action="#" id="contactForm" name="contactForm" onsubmit="return false;"> 
    <div class="form-group"> 
     <label>Name</label> 
      <input type="text" class="form-control" required> 
    </div>    
    <div class="form-group"> 
     <label>Email</label> 
      <input type="email" class="form-control" required> 
    </div> 
    <div class="form-group"> 
     <label>Contact</label> 
      <input type="tel" class="form-control" required> 
    </div> 
    <div class="form-group"> 
     <label>Request</label> 
      <select class="form-control" name="choice"> 
       <option value="0" selected="selected">Choose...</option>       
       <option value="Basic Package">Basic</option> 
       <option value="Dynamic Request">Advanced</option>      
       <option value="Other">Other</option> 
      </select> 
    </div>    
    <div class="form-group"> 
     <label>Message</label> 
      <textarea class="form-control" rows="6" name="message"></textarea> 
    </div>    
    <div class="form-group"> 
     <label>Anti Spam</label> 
      <input type="text" class="form-control" name="antispam" placeholder="What is 2+ 2?" required> 
    </div> 
    <div class="form-group text-center"> 
     <button class="btn btn-success btn-lg" type="submit">Submit</button> 
    </div>    
</form> 

Есть мысли?

+0

Я не показывая, что вы на самом деле давая ввести имя в HTML. –

ответ

3

Отсутствие атрибутов атрибутов имени. Вот почему он не находит данные POST с этими индексами.

<div class="form-group"> 
    <label>Name</label> 
     <input name="name" type="text" class="form-control" required> 
</div>    
<div class="form-group"> 
    <label>Email</label> 
     <input name="email" type="email" class="form-control" required> 
</div> 
<div class="form-group"> 
    <label>Contact</label> 
     <input name="telephone" type="tel" class="form-control" required> 
</div> 
+0

omg Я чувствую себя такой неуклюжим! Теперь я знаю, как это уклонилось от него. Я преобразовал свою форму в Bootstrap, и я забыл теги имен. Спасибо @ Andew. –

0

Они вызывают неопределенные проблемы индекса:

$name = $_POST['name']; 
$email = $_POST['email']; 
$telephone = $_POST['telephone']; 
$choice = $_POST['choice'];  
$message = $_POST['message']; 

PHP говорит, что он не может найти «электронная почта» или других в массиве $ _POST. Изменение в:

$name = isset($_POST['name']) ? $_POST['name'] : false; 

Например, воспользуйтесь функцией для проверки содержимого.

+0

И см. Ответ @Andrew, почему он не находит его ;-) – ArendE

+0

Я не указывал атрибут name в HTML. Вот почему. Спасибо, парни! –

+0

Спасибо за отзыв! – ArendE

0

Попробуйте задав ваши сайты URL-адрес

$.post("<?php echo get_site_url(); ?>/contact.php", dataString, function(data) { 

Поскольку корневые вебсервер не может быть корневыми сайты. Кроме того, удалите строку

header('Content-Type: application/json charset=utf-8'); 

PHP должен быть в состоянии прочитать переменные затем