【问题标题】:Wordpress: custom template containing form and query of custom tableWordpress:包含自定义表格的表单和查询的自定义模板
【发布时间】:2016-06-23 03:39:07
【问题描述】:

Wordpress 4.4.2 Theme= 来自 WPZoom 的 Meeta

我创建了一个自定义模板,其中包含自定义狗表的 SQL 查询。查询通过 WPDB 类工作正常,我可以以可接受的格式显示输出数据。

现在我在同一个自定义模板中插入一个 php 表单以允许用户输入搜索条件。

表单显示正常,但查询立即执行,无需等待用户点击提交,因此我无法输入任何搜索条件。在提交表单之前,我应该怎么做才能保留查询?

如果我在其他地方引入错误,我已经多次摆弄这个问题,显示恢复到主页而不显示错误。我必须打开错误显示还是将其发送到某个地方的日志。

        <?php the_content(); ?>
                //=================================
                <?php

                function test_input($data) {
                $data = trim($data);
                $data = stripslashes($data);
                $data = htmlspecialchars($data);
                return $data;
                }

                // set variables to wildcard
                $dog_name = "%";
                ?>

                <h2>Chercher dans la base</h2>
                 <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

                 Dog_name: <input type="text" dog_name="dog_name" value="<?php echo $dog_name;?>">

                 <input type="submit" name="submit" value="Submit">

                </form>

                <?php
                $dog_name = test_input($_POST["dog_name"]);

                global $wpdb;

                $query = "SELECT offspring.dog_name, offspring.sex, offspring.color, offspring.dob, offspring.cotation, offspring.titles, offspring.hd, offspring.titles, offspring.eyes, offspring.dna, offspring.born_in, offspring.prod_prop, sire.dog_name AS sire, dam.dog_name AS lice 
                    FROM BP_dog AS offspring 
                    JOIN BP_dog AS sire ON sire.dog_id = offspring.sire_id 
                    JOIN BP_dog AS dam ON dam.dog_id = offspring.dam_id
                    ORDER BY dog_name";
                word                       
                   $results = $wpdb->get_results($query);

                   $num_rows = $wpdb->num_rows;
                   print  "Number of rows = $num_rows.<br>";

                    foreach ($wpdb->get_results($query)as $row) {
                    print $row->dog_name . "\t";
                    print $row->sex . "\t";
                    print $row->dob . "\t";
                    print $row->color . "\t";
                    print $row->cotation . "\t";
                    print $row->titles . "\t";
                    print $row->hd . "\t";
                    print $row->eyes . "\t";
                    print $row->dna . "\t";
                    print $row->born_in . "<br>";
                    print "Sire = " . $row->sire . "\t";
                    print "Lice = " . $row->lice . "<br>";
                    print $row->prod_prop . "<br><br>";
                   }
                   ?>

【问题讨论】:

    标签: php forms templates wordpress


    【解决方案1】:

    我制作了一个更加“动手”的查询构建器,它可以处理任何表格的任何自定义表单。

     public function getResults() {
        $params = [];
        
        foreach ($_POST as $key => $value) {
          if(!empty($value)) {
            array_push($params, [$key => $value]);
          }
        }
        
        $query_sufix = " WHERE ";
        
        for($i = 0; $i < count($params); $i++) {
          foreach ($params[$i] as $key => $value) {
            if($i == 0) {
              $query_sufix .= $key." = ".$value;
            } else {
              $query_sufix .= " AND ".$key." = ".$value;
            }
          }
        }
        
        $query = "SELECT * FROM {your-table}";
        
        if(!empty($params)) {
          $query .= $query_sufix;
        }
        
         $rows = $wpdb->get_results($query);
         return $rows;
        }
    

    【讨论】:

      【解决方案2】:

      如果页面被加载/重新加载,您编写的查询将直接运行。使用isset 执行代码只有你$_POST 数据。

      <h2>Chercher dans la base</h2>
      <form method="post" action="http://localhost/wordpress/?page_id=4">
      Dog_name: <input type="text" name="dog_name" value="<?php echo $dog_name;?>">
      <input type="submit" name="submit" value="Submit">
      </form>
      <?php
      if (isset($_POST["dog_name"])) {
      function test_input($data) {
      $data = trim($data);
      $data = stripslashes($data);
      $data = htmlspecialchars($data);
      return $data;
      }   
      $dog_name = test_input($_POST["dog_name"]);
      
      global $wpdb;
      
      $query = "SELECT offspring.dog_name, offspring.sex, offspring.color, offspring.dob, offspring.cotation, offspring.titles, offspring.hd, offspring.titles, offspring.eyes, offspring.dna, offspring.born_in, offspring.prod_prop, sire.dog_name AS sire, dam.dog_name AS lice 
          FROM BP_dog AS offspring 
          JOIN BP_dog AS sire ON sire.dog_id = offspring.sire_id 
          JOIN BP_dog AS dam ON dam.dog_id = offspring.dam_id
          ORDER BY dog_name";
      
         $results = $wpdb->get_results($query);
      
         $num_rows = $wpdb->num_rows;
          foreach ($wpdb->get_results($query)as $row) {
          print $row->dog_name . "\t";
          print $row->sex . "\t";
          print $row->dob . "\t";
          print $row->color . "\t";
          print $row->cotation . "\t";
          print $row->titles . "\t";
          print $row->hd . "\t";
          print $row->eyes . "\t";
          print $row->dna . "\t";
          print $row->born_in . "<br>";
          print "Sire = " . $row->sire . "\t";
          print "Lice = " . $row->lice . "<br>";
          print $row->prod_prop . "<br><br>";
         }
      }
      ?>
      

      我还对代码做了一些修改:

      1. 删除了第 46 行的“word
      2. input type="text" dog_name="dog_name"更改为input type="text" name="dog_name"

      3. 已删除 $dog_name = "%";。不知道你为什么要使用这个

      【讨论】:

      • 非常感谢 Siva。多亏了您的建议,我才能正确运行表单并执行查询。
      猜你喜欢
      • 2018-08-20
      • 2014-08-13
      • 2011-10-05
      • 2013-07-25
      • 1970-01-01
      • 2016-09-25
      • 1970-01-01
      • 2018-04-14
      • 1970-01-01
      相关资源
      最近更新 更多