验证unctions.php中的表单,将错误发送回模板

时间:2015-10-23 作者:Galivan

我在模板中有一个表单,提交后应进行验证,并显示任何错误,如果没有错误,则将数据插入数据库。

我是wordpress的新手,但我的想法是,也许一个“行动”可以解决这个问题。所以我在函数中有一个函数。php:

    function signup_validate_insert($errors){
       if (isset($_POST[\'submit_msg\'])) {

             // validate , insert into database

        }
    return $errors;
}
我在函数上有“添加操作”。php:

add_action(\'signup_insert\', \'signup_validate_insert\');
表单实际上位于添加到模板页面的模板部分(带有“get\\u template\\u part”)。

在模板部分,我添加了以下操作:

<?php do_action(\'signup_insert\', $errors); ?>
表单在提交时发送到同一页。

有一个用于显示错误的div:

<div class="errors">
    <?php if((isset($errors))){

        foreach($errors as $error): ?>
            <p class=\'errortext\'> <?php $error ?> </p>
        <?php endforeach ?>
    <?php }else if(!isset($errors)){

    } ?>
</div>
操作函数注册在提交时设置“$\\u POST”。但它不会返回“$errors”数组,因为我在表单页中得到了“Undefined variable:errors”。所以我想知道如何让这个函数返回这个变量?

1 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

您需要的是筛选器,而不是操作。类似这样(注释被注释到代码中。您有一些PHP错误需要更正):

function signup_validate_insert($post){
  $errors = false;
  if (isset($post[\'submit_msg\'])) {
    // validate , insert into database
  }
  return $errors;
}
add_filter(\'signup_insert\', \'signup_validate_insert\');
$errors = apply_filters(\'signup_insert\', $_POST);

if((!empty($errors))){ // $errors is going to be set; use empty() ?>
  <div class="errors"><?php 
    foreach($errors as $error) { ?>
      <p class=\'errortext\'><?php 
        echo $error; // echo was missing; you would have no output ?> 
      </p><?php 
    } ?>
  </div><?php
}
过滤器返回内容。行动确实有用。我你想采取行动echo 直接从您的回拨:

function signup_validate_insert($post){
  $errors = false;
  if (isset($post[\'submit_msg\'])) {
    // validate , insert into database
  }
  if((!empty($errors))){ // $errors is going to be set; use empty() ?>
    <div class="errors"><?php 
      foreach($errors as $error) { ?>
        <p class=\'errortext\'><?php 
          echo $error; // echo was missing; you would have no output ?> 
        </p><?php 
      } ?>
    </div><?php
  }
}
add_action(\'signup_insert\', \'signup_validate_insert\');
do_action(\'signup_insert\', $_POST);
老实说,你正在做的事情可能过于复杂,整个事情最好是在没有钩子的情况下完成。您是否需要第三方对其进行扩展?

尝试查看:Clarification on filters and hooksDifference Between Filter and Action Hooks?

相关推荐

Custom form validation

我已经创建了一个基本表单,可以发布到admin-post.php 并通过AJAX调用提交给admin-ajax.php. 两个提交都正确,请使用nonce 为了多一点安全性,我可以根据需要处理数据。我的问题是,如何将常规表单发布到admin-post.php, 要使用成功消息字符串或错误(可能是字符串或无效表单字段条目数组)将消息发送回表单,请执行以下操作:?通过AJAX调用,我可以简单地回显json编码的响应。我知道没有设置会话,除非我手动调用session_start() 而且使用globals也不理