Ошибка проверки PHP

0

Здесь я хочу проверить мой раскрывающийся список, чтобы, если выбрано... выбрано, оно будет ошибкой. Я сделал это, но когда форма отправлена, ошибка не поймана, и она просто отправляет. ## JUST TO CLARIFY Я ВСЕГДА УСТАЛОСЬ, ЧТОБЫ ОСТАНОВИТЬ 0 И ЭТО ВСЕ ЕЩЕ НЕ РАБОТАЕТ. ##

Вот мой HTML

    <html>
    <head>
        <title>Submit Form</title> 
    </head>

    <body>
    <p>All fields marked with an asterisk "<span style="color: red">*</span>"are mandatory.</p>
    &nbsp;
    <form name="SubmitForm" method="post" action="SubmitForm.php">
        <table>
        <tr>
             <td valign="top" width=250px>
             <label for="first_name"><span style="font-weight:bold">First Name <span style="color: red">*</span></label>
             </td>
                  <td valign="top">
             <input  type="text" name="first_name" maxlength="50" size="30">
             </td>
             </tr>
             <tr>
                 <td valign="top"">
                 <label for="last_name"><span style="font-weight:bold">Last Name <span style="color: red">*</span></label>
             </td>
     <td valign="top">
     <input  type="text" name="last_name" maxlength="50" size="30">
     </td>
     </tr>

     <tr>
         <td valign="top">
         <label for="email"><span style="font-weight:bold">Email Address <span style="color:    red">*</span></label>
         </td>
         <td valign="top">
         <input  type="text" name="email" maxlength="80" size="30">
         </td>
     </tr>
     <tr>
         <td valign="top">
         <label for="telephone"><span style="font-weight:bold">Telephone Number <span style="color: red">*</span></label>
         </td>
         <td valign="top">
         <input  type="text" name="telephone" maxlength="30" size="30">
         </td>
     </tr>
     <tr>
         <td valign="top">
         <label for="formFood"><span style="font-weight:bold"> What is your favourite food?<span style="color: red">*</span>
         </td>
         <td valign="top">
         <select name="formFood" style="display:inline">
                 <option value="0">Select...</option>
                 <option value="L">Lasagne</option>
                 <option value="F">Fish and Chips</option>
                 <option value="T">Toad in the Hole</option>
                 <option value="S">Steak and Chips</option>
         </select>
        </td>
     </tr>

     <tr>
         <td height="30">
         </td>
     </tr>

     <tr> 
         <td colspan="2" style="text-align:center">
         <input type="submit" value="Submit">   <a href="http://localhost/var/www/pages    /SubmitForm.php"> </a>
         </td>
     </tr>

       </table>
     </form>
   </body>
</html>

Это мой PHP

<?php
          if(isset($_POST['email'])) {

    //Mail to this email
    $email_to = "[email protected]";
    $email_subject = "Submit form";


    function died($error) {
        // Begin error code
        echo "We are very sorry, but there were error(s) found with the form you submitted. ";
        echo "These errors appear below.<br /><br />";
        echo $error."<br /><br />";
        echo "Please go back and fix these errors.<br /><br />";
        die();
    }

    // validation expected data exists
    if(!isset($_POST['first_name']) ||
        !isset($_POST['last_name']) ||
        !isset($_POST['email']) ||
        !isset($_POST['telephone']) ||
        !isset($_POST['formFood'])) {
         died('We are sorry, but there appears to be a problem with the form you submitted.');      
    }

    $first_name = $_POST['first_name']; // required
    $last_name = $_POST['last_name']; // required
    $email_from = $_POST['email']; // required
    $telephone = $_POST['telephone']; // required
    $formFood = $_POST['formFood']; // required

    $error_message = "Please Enter correct values into all mandatory Feilds";
    $email_exp = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/';
  if(!preg_match($email_exp,$email_from)) {
    $error_message .= 'The Email Address you entered does not appear to be valid.<br />';
  }
    $string_exp = "/^[A-Za-z .'-]+$/";
  if(!preg_match($string_exp,$first_name)) {
    $error_message .= 'The First Name you entered does not appear to be valid.<br />';
  }
  if(!preg_match($string_exp,$last_name)) {
    $error_message .= 'The Last Name you entered does not appear to be valid.<br />';
  }
  if(isset($_REQUEST['formFood']) && $_REQUEST['formFood'] == '0') { 
  echo 'Please select a Food.'; 
} 

  if(strlen($telephone) > 11) {
    died($error_message); }
  if(strlen($telephone) < 11 ) {
    died($error_message);
  }
    $email_message = "Form details below.\n\n";

    function clean_string($string) {
      $bad = array("content-type","bcc:","to:","cc:","href");
      return str_replace($bad,"",$string);
    }

    $email_message .= "First Name: ".clean_string($first_name)."\n";
    $email_message .= "Last Name: ".clean_string($last_name)."\n";
    $email_message .= "Email: ".clean_string($email_from)."\n";
    $email_message .= "Telephone: ".clean_string($telephone)."\n";
    $email_message .= "Comments: ".clean_string($comments)."\n";

if (isset($_REQUEST['email']))
//if "email" is filled out, send email
  {
  //send email
  mail("[email protected]", $email_subject,
  $email_message, "From:" . $email);
  echo "Thank you for using our mail form";
  }
else
//if "email" is not filled out, display the form
  {
  echo "<form method='post' action='mailform.php'>
  Email: <input name='email' type='text'><br>
  Subject: <input name='subject' type='text'><br>
  Message:<br>
  <textarea name='message' rows='15' cols='40'>
  </textarea><br>
  <input type='submit'>
  </form>";
  }

?>
 <script>
alert("Thank you for contacting us. We will be in touch with you very soon.")
 </script>

<?php
}
?>
  • 0
    @ Люк Риксон: используйте пустой вместо isset.
  • 0
    извините, я забыл упомянуть, что я уже пробовал это с нуля, и это все еще ошибки, я изменил это на строку, просто чтобы посмотреть, будет ли это работать
Теги:
validation
error-handling

5 ответов

0
Лучший ответ

Должен быть
if(isset($_REQUEST['formFood']) && $_REQUEST['formFood'] == 0) { echo 'Please select a Food.'; }

  • 0
    пожалуйста, смотрите выше, поскольку я уже сделал это, и это все еще не работает. То, что вы увидели, было результатом моих ошибок и следов.
  • 0
    Вместо того, чтобы отображать выбранную еду, добавьте ее в переменную сообщения об ошибке. Когда вы хотите отправить, проверьте, если error_message пусто. Если оно отправлено, то не отправляйте
0

Вы проверяете, является ли представленное значение для выбора "Пищевая...", но значение, которое вы должны проверить, равно "0" (номер, установленный в значении поля выбора, а не название.

Смотри ниже:

 if(isset($_REQUEST['formFood']) && $_REQUEST['formFood'] == '0') { 
 echo 'Please select a Food.'; 
0

используйте if (empty ($ _POST ['formFood'])), если value = 0, оно вернет false

 Returns FALSE if var exists and has a non-empty, non-zero value. Otherwise returns TRUE.

The following things are considered to be empty:

    "" (an empty string)
    0 (0 as an integer)
    0.0 (0 as a float)
    "0" (0 as a string)
    NULL
    FALSE
    array() (an empty array)
    $var; (a variable declared, but without a value)
0

Вместо использования 0 используйте пустое значение для параметра <option> которое вы не хотите быть допустимым, т.е. <option value="">Select...</option>. Просто хорошая практика в целом... и если в какой-то момент вы решите включить проверку на лицевой стороне, эта конфигурация тоже хорошо работает.

Когда вы проверяете переменную $ _POST, используйте вместо этого:

// validation expected data exists
if(!isset($_POST['first_name']) ||
    !isset($_POST['last_name']) ||
    !isset($_POST['email']) ||
    !isset($_POST['telephone']) ||
    (!isset($_POST['formFood'] || empty($_POST['formFood']))) {
     died('We are sorry, but there appears to be a problem with the form you submitted.');      
}
0

Вы не проверяете значение параметра, но текст опции:

if(isset($_REQUEST['formFood']) && $_REQUEST['formFood'] == 'Select...') { 
  echo 'Please select a Food.'; 
} 

Должно быть:

if(isset($_REQUEST['formFood']) && $_REQUEST['formFood'] == '0') { 
  echo 'Please select a Food.'; 
} 

Ещё вопросы

Сообщество Overcoder
Наверх
Меню