【问题标题】:Display search results on new page在新页面上显示搜索结果
【发布时间】:2017-05-31 02:26:39
【问题描述】:

我有一个 Wordpress 页面,我正在处理一个搜索功能,该功能从托管在 Amazon AWS 上的数据库中提取。

在搜索时,我可以很好地提取数据,但结果显示在搜索栏下方。
我希望结果显示在单独的页面上。

我已经使用之前提出的问题尝试了几个建议,但没有任何效果。

这是我的代码:

<?php
/* Template Name: Database */
?>

<?php
global $query_string;

$query_args = explode("&", $query_string);
$search_query = array();

if( strlen($query_string) > 0 ) {
  foreach($query_args as $key => $string) {
    $query_split = explode("=", $string);
    $search_query[$query_split[0]] = urldecode($query_split[1]);
  } // foreach
} //if

$search = new WP_Query($search_query);
?>


<?php get_header(); ?>
<?php get_footer(); ?>

<?php
$db_hostname = 'xxxxxxxxxxxxxxx';
$db_username = 'xxxxxxxxxxxxxxx';
$db_password = 'xxxxxxxxxxxxxxx';
$db_database = 'xxxxxxxxxxxxxxx';

$con = mysql_connect($db_hostname,$db_username,$db_password);
if (!$con){
  die('404 Could not connect to server: ' . mysql_error());
}

mysql_select_db($db_database, $con);

  global $sf_options;
    $sidebar_config = $sf_options['archive_sidebar_config'];
    $left_sidebar   = $sf_options['archive_sidebar_left'];
    $right_sidebar  = $sf_options['archive_sidebar_right'];
    $blog_type      = $sf_options['archive_display_type'];

    if ( $blog_type == "masonry" || $blog_type == "masonry-fw" ) {
      global $sf_include_imagesLoaded;
      $sf_include_imagesLoaded = true;
    }
?>

<div class="container-fluid">
  <center>
    <form role="" method="get" >
      <p style="color: #fff;">Search products and services for your business. We make it easier<br />to manage your business operations and make informed purchasing decisions.</p>
      <input type="text" name="term" placeholder="Start typing to find a product or business"/>
      <span><input type="submit" value="" class="btn btn-default" /></span>
    </form>
  </center>
</div>

<?php
if (!empty($_REQUEST['term'])) {

  $term = mysql_real_escape_string($_REQUEST['term']);

  $sql = "SELECT * FROM wpfr_listing WHERE Description LIKE '%".$term."%'";
  $r_query = mysql_query($sql);

  while ($row = mysql_fetch_array($r_query)){

    echo '<br /> Company: ' .$row['title'];
    echo '<br /> Certs: '.$row['certs'];
    echo '<br /> Certifier: '.$row['certifier'];
    echo '<br /> Address: '.$row['address'];
    echo '<br /> Country: '.$row['country'];
    echo '<br /> State: '.$row['state'];
    echo '<br /> City: '.$row['city'];
  }

}
?>

非常感谢您提供的任何帮助。

【问题讨论】:

  • 天啊,这段代码太脆弱了。为了帮助您解决问题:尝试在表单前添加if (empty($_REQUEST['term'])),然后将表单下方的if 更改为else
  • 是什么让这段代码易受攻击?它是由我们不再使用的开发人员编写的。
  • mysql_ 命令已弃用(更改为 mysqli_),并且在同一文件中拥有连接到 db 的凭据不是一个好习惯。总的来说,切换到 PDO 比使用 mysqli_ 更好。 php.net/manual/en/ref.pdo-mysql.php

标签: php wordpress search


【解决方案1】:

写在这个页面上

<?php if (!empty($_REQUEST['term'])) { 
header("location: page_url?term=".$_REQUEST['term']);
}
?>

在搜索结果页面上

   <?php
 $term = mysql_real_escape_string($_GET['term']); 
    $sql = "SELECT * FROM wpfr_listing WHERE Description LIKE '%".$term."%'";
     $r_query = mysql_query($sql); 
    while ($row = mysql_fetch_array($r_query)){ 
    echo '<br /> Company: ' .$row['title']; 
    echo '<br /> Certs: '.$row['certs']; 
    echo '<br /> Certifier: '.$row['certifier'];
     echo '<br /> Address: '.$row['address'];
     echo '<br /> Country: '.$row['country']; echo '<br /> State: '.$row['state'];
     echo '<br /> City: '.$row['city'];
    } 
    ?>

【讨论】:

  • 谢谢。这正是我想要的!
【解决方案2】:

既然你想通过 PHP 完成这件事,那就去吧。

1) 创建一个新页面。 2)让它处理您在此处使用的查询的 GET 数据。 3) 打印您在此页面中所做的搜索结果。

现在,在这个页面中,你需要做一个标头重定向到那个页面。标头重定向的语法是这样的。

header('Location: http://www.example.com/?sql = <Your Query above>');

这应该为你做。希望这可以帮助。如果您需要任何进一步的信息,请随时发表评论。

【讨论】:

    猜你喜欢
    • 2021-11-01
    • 2016-04-07
    • 1970-01-01
    • 2021-08-13
    • 2011-08-25
    • 2017-06-21
    • 2022-01-18
    • 2018-03-05
    • 1970-01-01
    相关资源
    最近更新 更多