Попытка подключить HTML-файл формы для подключения к другому файлу PHP с проверкой ошибок - PullRequest
0 голосов
/ 24 марта 2019

Необходимо передать массив в другие массивы ошибок php, чтобы два php-файла работали вместе, чтобы форма могла работать.

ОБНОВЛЕНИЕ

Новичок в PHP!Попытка сделать почту PHP с HTML-формой, но каким-то образом, когда я отправляю пустую форму, она не перехватывает мои ошибки операторов if, а просто переходит к прямой странице contactform.php - пустой странице, а не главной странице индекса с ошибками.

index.php и contactform.php оба являются отдельным файлом.

<?php
//setting error empty string
$errors =  ['empty' , 'name', 'subject', 'mail', 'message'];



 if (isset($_POST['submit'])) {


  $name = $_POST['name'];
  $subject = $_POST['subject'];
  $mailFrom = $_POST['mail'];
  $message = $_POST['message'];


  if(empty($name) or empty($subject) or empty($mailFrom) or empty($message)) 
   {
     $errors['empty']="Please fill the empty form";
    }


  if( !preg_match ("/^[a-zA-Z\s]+$/",$name)) {
    $errors['name'] = "Name must only contain letters!";
   }


  if( !preg_match ("/^[a-zA-Z\s]+$/",$subject)) {
  $errors['subject'] = "Subject must only contain letters!";
  }


  if(!filter_var($mailFrom, FILTER_VALIDATE_EMAIL)) {
    $errors['mail'] = "Invalid email format";
   }


   if( !preg_match ("/[A-Za-z0-9]+/",$message)){
    $errors['message'] = "Your message must not contain special characters";
   }


  $mailTo = "my@email.com";
  $headers = "From: ". $mailFrom;
  $txt = "You have received an e-mail from" .".\n\n".$name.".\n\n".$message;



    if(!isset($errors) || count($errors) == 0) {
    mail($mailTo, $subject, $txt, $headers);
    header("Location: index.php");
   }

  }


  ?>

ФАЙЛ HTML

       <form class="box" action="contactform.php" method="post">
        <div class="container-text">
        <p>
            <label>Name</label>
               <input type="text" name="name" placeholder="Full Name"> 
                <span class="error">* <?php echo isset($errors['name']) ? 
          $errors['name'] : "";?></span>
           </p>

        <p>
            <label>Subject</label>
            <input type="text" name="subject" placeholder="Subject">
            <span class="error">* <?php echo isset ($errors['subject']) ? 
         $errors['subject'] : "";?></span>
        </p>

        <p>
            <label>Email</label>
            <input type="text" name="mail" placeholder="Your e-mail">
            <span class="error">* <?php echo isset ($errors['mail']) ? 
        $errors['mail'] : "";?></span>
        </p>


            <p>
            <label>Message</label>
            <textarea name="message" row="5" placeholder="Message"> 
           </textarea>
            <span class="error">* <?php echo isset ($errors['message']) ? 
        $errors['message'] : "";s?></span>
            </p>
    </div>

        <div class="full-container">
        <p>
            <button type="submit" name="submit" value="submit" 
     >Submit</button>
        </p>
        </div>
     </div>
    </form>

1 Ответ

0 голосов
/ 24 марта 2019

Вы присваиваете error_empty и другие ошибки, но затем не проверяете, есть ли в них что-то, прежде чем вызывать mail() и header().

Самое простое исправление: либо поместите их в массив $errors['empty'] = "message" и проверьте count($errors) или установите флаг $hasError и проверьте это.

ВотКраткий пример реализации моего первого предложения:

//...
if(empty($name) or empty($subject) or empty($mailFrom) or empty($message)){ 
    $errors['empty'] = "Please fill the empty form";
}

if( !preg_match ("/^[a-zA-Z\s]+$/",$name)) {
    $errors['name'] = "Name must only contain letters!";
}
//... repeat for other values and do other stuff

if(!isset($errors) || count($errors) == 0) {
    mail($mailTo, $subject, $txt, $headers);
    header("Location: index.php?mailsent");
}

// now you can show the error like so:
?>

<input type="text" name="name" placeholder="Full Name">
<span class="error">* <?php echo isset($errors['name']) ? $errors['name'] : ""; ?></span></p>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...