【问题标题】:Send a variable as array from a checkbox form to another page将变量作为数组从复选框表单发送到另一个页面
【发布时间】:2018-04-11 18:52:07
【问题描述】:

我需要以下代码中的一些帮助。我想解析来自 custom_field (tech_spec_table) 的信息,其中包含一个带有博客/产品的 html 标签的表(例如技术规范),只有在用户检查特定产品/产品并通过表单中的表单提交(使用按钮)之后博客文章。我创建了一个页面“comparison-page.php”作为模板页面,并尝试在此页面上链接表单的操作。 screenshot

// check if we got posts to display:
if (have_posts()) :

echo "<form method='post' action='<?php bloginfo('template_url'); ?>/comparison-page.php' >";
    while (have_posts()) : the_post();

      //the post

   echo "<article class='"....  >";
   echo "<input type='checkbox' name='comparison[]' />";

     //the post

$post_loop_count++;
    endwhile;

        echo "<input type='submit' name='submit' value='Submit'/>";
        echo "</form>"; 

comparison-page.php 文件位于 :wp-content/themes/custom-theme 下的自定义主题中。 这是比较page.php的代码

<?php 
/* Template Name: comparison-page */ 
?>

<?php get_header(); ?>

<div id="primary" class="content-area">
    <main id="main" class="site-main" role="main">
        <?php

           if(isset($_POST['submit'])){    //to run PHP script on submit

   if(!empty($_POST['comparison'])){
     // Loop to store and display values of individual checked checkbox.
     foreach($_POST['comparison'] as $data_specs){

      echo $data_specs."</br>";

    $data_specs = get_post_meta(get_the_ID(), 'tech_specs_table', true);
    $dom = new domDocument;

    @$dom->loadHTML($data_specs);
    $dom->preserveWhiteSpace = false;
    $tables = $dom->getElementsByTagName('table');

    $rows = $tables->item()->getElementsByTagName('tr');

    foreach ($rows as $row) {
        $cols = $row->getElementsByTagName('td');
        echo $cols[];
        }

    }
}
}       
        ?>

    </main><!-- .site-main -->



</div><!-- .content-area -->


<?php get_footer(); ?>

虽然当我点击按钮导致 404 未找到 1)我应该怎么做才能使路径不可见并正确连接到页面? 2)变量“比较”是否会保存表单中的所有信息,以便我可以获取 post_meta 信息并在比较页面中进行操作?

【问题讨论】:

    标签: php wordpress forms custom-wordpress-pages


    【解决方案1】:

    所以你的问题是 WordPress 不能那样工作。你不能像那样向主题文件提交数据。

    您需要做的是让您提交的页面使用自定义页面模板,并让您的代码在新的自定义页面模板上处理表单。

    因此,您正在寻找两个带有自定义模板的自定义页面: 1) 形式 2) 提交处理器

    表单的操作会将您带到提交处理器。

    【讨论】:

    • 谢谢,你是说外观->编辑器中的文件是模板文件?我可以包含处理所有表单的通用处理程序 - admin-post.php。 ?
    • 在可能的情况下,您根本不应该使用编辑器(巨大的安全风险,没有备份),但是是的,它们是主题文件。如果您了解自己在做什么,您可以将 WP 设置为执行任何操作。
    【解决方案2】:

    当您定义表单标签时,错误似乎出现在第 3 行。您不能在字符串中打开 php 标签!相反,您可以使用 . 运算符将字符串与 bloginfo 函数的结果连接起来。

    【讨论】:

    • 这也是你的问题。
    • 如果我在尝试以下操作时明白了:action=' ".bloginfo('template_url'); ."/comparison-page.php' >"; 这个页面不会加载,
    • 行中间有一个分号。请在您的开发环境中启用显示错误,查看它们的含义并在发布之前尝试修复它们。至少学习一些 PHP 语言的基本概念可以节省大量时间和精力。
    • Rad80 你不必粗鲁。
    • 在这里同意@Rad80。您不应该进行这样的实时更改,应该使用开发环境,并且应该在进入 StackExchange 之前针对可用源检查错误。 SE 用于帮助解决您无法解决的问题,而不是用于基本操作方法。
    猜你喜欢
    • 1970-01-01
    • 2011-12-05
    • 2019-05-09
    • 2019-08-30
    • 2023-03-30
    • 1970-01-01
    • 2011-11-18
    • 2018-05-26
    • 1970-01-01
    相关资源
    最近更新 更多