2015-02-05 2 views
0

Я пытаюсь создать контактную форму с помощью PHP, и есть какая-то проблема. Я новичок в PHP, поэтому не мог понять. Форма работает, если не применяется код проверки, но поскольку я применяю код проверки, чтобы некоторые поля могли быть необходимы, форма не работает правильно. Более того, когда я оставляю какое-либо обязательное поле пустым, тогда в их форме не отображается сообщение об ошибке. Может кто-нибудь, пожалуйста, сообщите, в чем проблема.Некоторая проблема с моей контактной формой php

HTML Форма

<form action="mail.php" method="POST" > 
 
Name: <input type="text" name="name"><br/><br/> 
 
Email: <input type="email" name="email"><br/><br/> 
 
Phone Number: <input type="text" name="phone_number"><br/><br/> 
 
Website: <input type="text" name="website"><br/><br/> 
 
Message: <textarea name="message" rows="6" cols="25"></textarea><br/><br/> 
 
<input type="submit" value="Submit"> 
 
</form>

Главная PHP файл сценария

<?php 
if(isset ($_POST['submit'])) { 
    $errors = array(); 

    if(!empty ($_POST ['name'])) { 
     $name = $_POST ['name']; 
     } else { 
      $errors[] = "You forgot to enter your Name."; 
     } 

    if(!empty ($_POST ['email'])) { 
     $email = $_POST ['email']; 
     } else { 
      $errors[] = "You forgot to enter your Email."; 
     } 

    if(!empty ($_POST ['message'])) { 
     $message = $_POST ['message']; 
     } else { 
      $errors[] = "You forgot to enter your Message."; 
     } 

$phone_number = $_POST['phone_number']; 
$website = $_POST['website']; 
$formcontent = "From: $name \n Email: $email \n Phone Number: $phone_number \n Website: $website \n Message: $message"; 
$recipient = "[email protected]"; 
$subject = "Contact Form"; 
$mailheader = "From: $email \r\n"; 
mail($formcontent, $recipient, $subject, $mailheader); 
    if(isset($_POST['submit'])) { 
     if(!empty($errors)) { 
      foreach ($errors as $msg) 
       { 
        echo '<li>'. $msg . '</li>'; 
       } 
     } else { 
      echo "Thank You"; 
     } 
    } 
} 
?> 

UPDATE Спасибо за ваш отвечает парням, я буквально забыл иметь атрибут имени для кнопки отправки. Это помогло показать некоторый результат. Но теперь некоторые уведомления отображаются для неопределенных переменных как электронная почта, сообщение (если я предоставляю только имя в форме и нажмите кнопку отправки) для $formcontent и $mailheader строк.

+0

Поскольку вы» re используя '! empty', вам лучше было бы извлечь этот код и сделать поля формы' required' b y добавляя этот атрибут, особенно если вы используете HTML5. –

+0

'if (isset ($ _POST ['submit']))' у вас нет атрибута имени для отправки, чтобы поддерживать это, поэтому ничто внутри него не будет использоваться. Используя [отчет об ошибках] (http://php.net/manual/en/function.error-reporting.php), было бы отправлено предупреждение Undefined index submit/уведомление. –

+0

ваша кнопка отправки не имеет 'name = 'submit', поэтому' $ _POST ['submit'] 'может быть пустым в первую очередь. Материал почты должен быть в другом месте, где у вас есть «echo» «Спасибо», поскольку вы не хотите отправлять почту, если есть ошибки. И вам не нужно проверять 'if isset ($ _ POST ['submit'])' дважды избыточно –

ответ

2

В коде есть несколько ошибок.

if(isset ($_POST['submit'])) У вас нет атрибута имени для ввода, чтобы поддерживать это, поэтому в этом условном выражении ничего не будет выполнено.

Воспользовавшись error reporting, было бы предложено предупреждение/уведомление об ошибке «Неопределенный индекс ...».

Таким образом, вы должны добавить один:

<input type="submit" value="Submit" name="submit"> 
            ^^^^^^^^^^^^^ 

Тогда у вас есть mail() параметры, которые не находятся в правильном порядке.

mail($formcontent, $recipient, $subject, $mailheader); 

, которые должны быть:

  • To:
  • Тема:
  • Сообщение:
  • Headers

Изменить его:

mail($recipient, $subject, $formcontent, $mailheader); 

Для получения дополнительной информации о mail(), перейдите по следующей ссылке на PHP.net:

Edit:

Вы также должны поместить mail() функцию в другой место, где у вас есть «Спасибо».В противном случае, даже если адрес электронной почты не будет указан в форме, почта все равно будет отправлена, показывая «неизвестный отправитель» в поле «От». Размещение mail() в else, если ошибок не обнаружено.

if(isset($_POST['submit'])) { 
    if(!empty($errors)) { 
     foreach ($errors as $msg) 
      { 
       echo '<li>'. $msg . '</li>'; 
      } 
    } else { 

mail($recipient, $subject, $formcontent, $mailheader); 

     echo "Thank You"; 
    } 
} 

Добавить error reporting в верхней части файла (ов), который поможет найти ошибки.

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

// rest of your code 

Sidenote: Сообщения об ошибках не должно быть сделано только в постановке, и никогда производства.

0

Вы можете также добавить Анти-спам в форму

$q1 = mt_rand(1,10); 
$q2 = mt_rand(1,10); 
$answer = $q1 + $q2; 

<form action="mail.php" method="POST" > 
 
Name: <input type="text" name="name"><br/><br/> 
 
Email: <input type="email" name="email"><br/><br/> 
 
Phone Number: <input type="text" name="phone_number"><br/><br/> 
 
Website: <input type="text" name="website"><br/><br/> 
 
Message: <textarea name="message" rows="6" cols="25"></textarea><br/><br/> 
 
*What is <?php echo $q1 ." + ". $q2;?>? (Anti-spam): 
 
     <input type="number" required name="Human" ><br> 
 
<!--question--> 
 
      <input name="answer" id="subject" type="hidden" value="<?php echo "$answer"; ?>"> 
 
<input type="submit" value="Submit"> 
 
</form>

в вашей форме, вы можете проверить, если ответ правильный

<?php 
$answer = $_POST['answer']; 
if(isset ($_POST['submit']) && $_POST['human'] == answer) { 
    your mail procesing here 
} 
Смежные вопросы