Проверка формы php не удалась - PullRequest
0 голосов
/ 23 октября 2018

Этот код прекрасно работает в отдельном файле с именем form.php, но когда я вставляю его на страницу темы WordPress, он даже не проверяет форму и даже не отправляет почту, конечно.Почему после нажатия кнопки «Отправить» в теме WordPress ничего не происходит?Кто-нибудь может помочь мне решить проблему?

  get_header();

  if ($_SERVER['REQUEST_METHOD'] === 'POST') {

    $nameError = $mailError = $messageError = '';

    function validate($data){
        if(empty($data)){
            return false;
        }else{
            $data = trim($data);
            $data = stripslashes($data);
            $data = htmlspecialchars($data);
            return $data;
        }
    }

  //Validate name input
    if(!validate($_POST['name'])){
      $nameError = 'Polje ime je obavezno.';
    }else{
        if (!preg_match("/^[a-zA-Z ]*$/",$_POST['name'])) {
            $nameError = "Polje moze sadrzavati samo slova i razmak"; 
        }
    }

 //Validate email input
    if(!validate($_POST['email'])){
        $mailError = 'Polje email je obavezno';
    }else{
        if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
            $mailError = "Nevazeća email adresa"; 
         }
    }

 //Validate message textarea
    if(!validate($_POST['message'])){
        $messageError = 'Molimo unesite poruku';
    }

 if(empty($nameError) && empty($mailError) && empty($messageError)){
        //Create the body
        $body = "Ime: {$_POST['name']}\n\nPoruka: {$_POST['message']}";

        //Make it no longer than 70 characters long 
        $body = wordwrap($body, 70);

        //Send the mail
        mail('example@example.com', 'Contact Form Submission', 
     $body, 
    "From: {$_POST['email']}");

        //Print a message 
        echo '<p><em>Thank you for contacting me. I will reply some day. 
     </em></p>';
      }else{
        echo '<p style="font-weight: bold; color: #C00">Please fill out 
 the 
     form completley.</p>';
      }   
  }

HTML Код, который находится в том же файле, что и проверка php

        <section class="contact-img">
    <div class="container-fluid">
        <div class="row">
         <?php the_post_thumbnail(); ?>
        </div>
      </div>
  </section>

 <section class="contact">
  <div class="container">
    <div class="row">
        <?php dynamic_sidebar('contact-page'); ?>  
            <div class="col-md-12">
                <h4 class="col-xs-12 text-center"><strong>Ostavite 
  poruku</strong></h4>     
            </div>
    </div>
</div>

<div class="container">
    <div class="row">
        <div class="col-xs-10 col-xs-offset-1 col-sm-6 col-sm-offset-3">

            <form method="POST" action="<?php echo 
htmlspecialchars($_SERVER["PHP_SELF"]);?>">

                <div class="form-group">
                    <input type="text" class="form-control" name="name"  
value="" placeholder="Ime">
                    <div><?php if(isset($nameError)) echo $nameError; ?> 
 </div>
                </div>

                <div class="form-group">
                    <input type="text" class="form-control" name="email" 
 value="" placeholder="E-mail">
                    <div><span class="error"><?php if(isset($mailError)) 
 echo $mailError; ?></span></div>
                </div>

                <div class="form-group">
                    <textarea class="form-control" name="message" rows="3" 
  placeholder="Poruka"></textarea>
                    <div><span class="error"><?php 
  if(isset($messageError)) echo $messageError; ?></span></div>
                </div>

                <input class="btn btn-default" type="button" name="button" 
  value="Pošalji">
            </form>

        </div>
      </div>
  </div>
 </section>

1 Ответ

0 голосов
/ 23 октября 2018

У вас есть синтаксическая ошибка (белая страница смерти, если сообщение об ошибке отключено)

$nameError = 'Polje moze sadrzavati samo slova i razmak;

Должно быть:

$nameError = 'Polje moze sadrzavati samo slova i razmak';

Еще одна вещь, которая может вас получить, это ваше имяПроверка Regex проста, она не учитывает такие вещи, как Jane Doe-Smith, или J o h n S m i t h, или j, или даже '', пустая строка.

Я бы использовал что-то вроде этого:

if(!preg_match("/^([a-z]+)\s+(?:([a-z]+)\s+)?([-a-z]+)$/i" ,  $_POST['name'])){
        $nameError = 'Polje moze sadrzavati samo slova i razmak;
}

Regex:

  • ([a-z]+) совпадений a хотя z (первые 2 группы захвата)
  • \s+ соответствует одному или нескольким пробелам
  • (?...) группа без захвата ? опционально, отчество
  • ([-a-z]+) соответствует - и a Хотя z (для дефисных фамилий)
  • \i флаг без учета регистра.

Тест регулярных выражений

Контрольные примеры:

John Smith {match}
John E Smith {match}
Jane J Doe-Smith {match}
John {no match}

Это небольшой размер выборки, но он должен охватывать большинство английских имен (не уверен, что это за язык Polje moze).

Однажды я много лет назад встречался с девушкой с дефисной фамилией ... lol.

Последнее, что нужно, - включить ошибки отображения и установить для отчета об ошибках значение, подобное E_ALL (для развития).Я бы сказал, использовать ini_set('display_errors', '1') и error_reporting(), но они не будут отлавливать синтаксические ошибки в одном и том же файле (как правило).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...