验证php表单失败

时间:2018-10-23 00:28:45

标签: php validation

此代码在名为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 :(得分:1)

您遇到语法错误(如果关闭了错误报告功能,则会出现死亡白页)

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

应该是:

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

可以让您验证名字的另一件事是Regex很简单,它不考虑Jane Doe-SmithJ o h n S m i t hj甚至{{1} },一个空字符串。

我会用这样的东西:

''

正则表达式:

  • if(!preg_match("/^([a-z]+)\s+(?:([a-z]+)\s+)?([-a-z]+)$/i" , $_POST['name'])){ $nameError = 'Polje moze sadrzavati samo slova i razmak; } 通过([a-z]+)(前2个捕获组)匹配a
  • z匹配一个或多个空格
  • \s+非捕获组(?...)(可选)中间名
  • ?通过([-a-z]+)匹配-a(用于带连字符的姓氏)
  • z不区分大小写的标志。

Regex Test

测试用例:

\i

这仍然是一个很小的样本,但是应该涵盖大多数英语名称(不确定这是John Smith {match} John E Smith {match} Jane J Doe-Smith {match} John {no match} 是哪种语言)。

很多年前,我曾经和一个女孩约会,名字带有连字符...大声笑。

最后一件事是打开显示错误,并将错误报告设置为Polje moze之类的值(用于开发)。我会说使用E_ALLini_set('display_errors', '1'),但它们不会在同一文件中捕获语法错误(通常)。