如何将复选框的数组值以多部分形式传递到下一部分



我有一个基于wordpress的网站。我需要允许人们从前端创建帖子,所以我制作了一个多部分表单,效果很好。表单有三个部分,在移动到下一部分之前,对表单的每个部分进行验证。数据通过隐藏输入传递到另一个页面。

我的表单模板看起来有点像这样(完整的代码在这里非常庞大且无关紧要,所以只显示相关部分),我希望这足以让您了解表单的工作原理。

多部分表单WP模板示例代码:

    <?php 
          global $wpdb;
          $this_page    =   $_SERVER['REQUEST_URI'];
          $page     =   $_POST['page'];
          if ( $page == NULL ) { ?> 
          <?php include_once('multiparts/form-files/first_part.php'); ?>    

          <?php } else if ( $page == 1 ) { ?> 
          <?php include_once('multiparts/validation/validate_first_part.php');  
                if (isset($_POST['submit-1']) && (!empty($error))) { ?>
    <div class="error-head">Cannot continue registration. Error/s highlighted below.</div><br/>
            <?php echo $error . '</br>'; ?>

    <?php } else { 
                  include_once('multiparts/form-files/second_part.php');
    }
    ?>

    <?php
    } else if ( $page == 2 ) { ?>
    //SO ON AND SO FORTH
    <?php
    }
    ?>

最近,我在表单中添加了几个复选框字段,目的是在创建的帖子中显示所选复选框的值。所以这是我目前正在使用的相关 html 表单代码

<fieldset class="work-areas">
<label for="areas" class="label">INTERESTED IN :</label></br>
<div class="work-class">
<input type="checkbox" name="workareas[]" value="administration"/>administration</br>
<input type="checkbox" name="workareas[]" value="technical"/>technical</br>
<input type="checkbox" name="workareas[]" value="creative"/>creative</br>
<input type="checkbox" name="workareas[]" value="fieldwork"/>fieldwork</br>
<input type="checkbox" name="workareas[]" value="marketing"/>marketing</br>
</div>
</fieldset>

我将这些复选框的值插入到帖子中,就像使用此代码的任何其他自定义字段一样:add_post_meta($pid, 'areas', $workareas, true ); .在处理部分,它被分配了一个meta_key areas。我用下面的代码在单.php中显示它:

<?php $areas = get_post_meta($post->ID, 'areas', true); ?>
    <?php if (is_array($areas)) : ?>
       <h4>INTERESTED AREAS OF WORK:</h4>
      <?php if (is_array($areas))   {
            foreach($areas as $area)    {
            echo '<li>'.$area.'</li>';
            }
         }
      ?>
    <?php endif;?>

问题:当上面给定的复选框的 html 表单代码位于表单的最后/第三部分时,所有这些都可以很好地工作。但是,当表单的第二部分具有相同的复选框字段时,它确实有效。我想它根本不会将所选复选框的数组值传递给第三部分。Print_r显示一个空数组,显然也不会在单个数组中显示任何内容.php。虽然我知道问题只是所选复选框值的数组,没有正确带到第三部分,但我需要帮助,因为我是这一切的菜鸟。

所以底线问题是我如何保存所选数组 复选框的值在第二部分中并将其带到第三部分 最后将其分配给一个将保存数组值的变量。 可以使用上面的代码在帖子中显示的内容。

尝试过的事情 :我在这里研究了这个线程,我很困惑我将在哪里插入我的复选框字段,甚至不确定它是否适用于我的情况。我已经能够使用这样的东西将其他文本输入值从一个部分传递到另一个部分:

<input type="hidden" name="eligible" value="<?php echo $eligible;?>" />

所以,我尝试使用name="workareas[]"但没有奏效。我正在为我正在尝试的所有事情做 print_r(),到目前为止,我只得到了空数组。我仍在浏览大量其他线程,寻找可能的提示。同时,如果你能帮忙,那就太好了。提前谢谢。

更新:已解决,请检查答案。

不是WP用户,但您的复选框被命名为"工作区",但您似乎在其他任何地方都将它们称为"区域"。

感谢您在评论中的建议,但在我看来,我找到了一个优雅而强大的解决方案,那就是使用会话。我遵循了这里的基本想法,它实际上处理了一个带有会话的多部分形式。现在,我在表单的第三/最后一部分(文档的开头)有以下代码。此时请记住,问题中所示的html复选框字段位于第二部分。

<?php 
   session_start();
     $_SESSION['workareas'] = $_POST['workareas'];
    $result=$_POST['workareas'];
?>

在验证第三部分期间重复的代码是相同的,但这样变量$result仍然保存表单第二部分中所选复选框的数组值。

session_start();
$result=$_SESSION['workareas'];

此时您可以执行print_r($result)并检查。此外,如果您想将这些数组值插入到帖子中以便它们显示在帖子中,只需分配meta_key例如。 areas $result并使用下面的代码将其添加为自定义字段:

add_post_meta($pid, 'areas', $result, true);

在单.php您可以使用下面的代码从数组中提取值并显示。不要避免if(is_array)语句,否则 wordpress 可能会抛出错误警告:为 each() 提供的参数无效。祝你好运。

<?php $areas = get_post_meta($post->ID, 'areas', true); ?>
    <?php if (is_array($areas)) : ?>
       <h4>INTERESTED AREAS OF WORK:</h4>
      <?php if (is_array($areas))   {
            foreach($areas as $area)    {
            echo '<li>'.$area.'</li>';
            }
         }
      ?>
    <?php endif;?>

最新更新