Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何允许选择多个筛选器-分页?_Php_Pagination - Fatal编程技术网

Php 如何允许选择多个筛选器-分页?

Php 如何允许选择多个筛选器-分页?,php,pagination,Php,Pagination,嘿,我仍然在尝试为我的分页脚本选择多个过滤器,但不确定如何做,因为这对于php和编程来说是非常新的 因此,在我的分页中,当用户单击“营销”按钮(链接)时,它只会查询数据库中的类别=营销。如下面的脚本所示,其他2个过滤器按钮也是如此。(汽车、运动) 问题是,我希望能够选择多个过滤器,如仅营销和Aumotive或汽车和体育,例如,如果我单击营销过滤器,然后单击汽车,它将显示等同于营销和汽车的类别 我不知道如何做到这一点,所以我来到专家那里帮助我 这是我正在编写的脚本: <h3>Filte

嘿,我仍然在尝试为我的分页脚本选择多个过滤器,但不确定如何做,因为这对于php和编程来说是非常新的

因此,在我的分页中,当用户单击“营销”按钮(链接)时,它只会查询数据库中的类别=营销。如下面的脚本所示,其他2个过滤器按钮也是如此。(汽车、运动)

问题是,我希望能够选择多个过滤器,如仅营销和Aumotive或汽车和体育,例如,如果我单击营销过滤器,然后单击汽车,它将显示等同于营销和汽车的类别

我不知道如何做到这一点,所以我来到专家那里帮助我

这是我正在编写的脚本:

<h3>Filter results by:</h3>
<a href='pagi_test.php?category=marketing'>marketing</a>
<a href='pagi_test.php?category=automotive'>automotive</a>
<a href='pagi_test.php?category=sports'>sports</a>
<br />

<h3>Results:</h3>
<?php

//connecting to the database
$error = "Could not connect to the database";
mysql_connect('localhost','root','root') or die($error);
mysql_select_db('ajax_demo') or die($error);

//max displayed per page
$per_page = 3;

//get start variable
$start = $_GET['start'];

$category = mysql_real_escape_string($_GET['category']);
//count records
$record_count = mysql_num_rows(mysql_query("SELECT * FROM explore WHERE category='$category'"));

//count max pages
$max_pages = $record_count / $per_page; //may come out as decimal

if (!$start)
   $start = 0;

//display data
$get = mysql_query("SELECT * FROM explore WHERE category='$category' LIMIT $start, $per_page");
?>
<table width="800px">
<?php
while ($row = mysql_fetch_assoc($get))
{
 // get data
 $id = $row['id'];
 $site_name = $row['site_name'];
 $site_description = $row['site_description'];
?>

<tr>
<td><?php echo $id; ?></td>
<td><?php echo $site_name; ?></td>
<td><?php echo $site_description; ?></td>
</tr>
<?php
}

//setup prev and next variables
$prev = $start - $per_page;
$next = $start + $per_page;

//show prev button
if (!($start<=0))
       echo "<a href='pagi_test.php?category=$category&start=$prev'>Prev</a> ";

//show page numbers

//set variable for first page
$i=1;

for ($x=0;$x<$record_count;$x=$x+$per_page)
{
 if ($start!=$x)
    echo " <a href='pagi_test.php?category=$category&start=$x'>$i</a> ";
 else
    echo " <a href='pagi_test.php?category=$category&start=$x'><b>$i</b></a> ";
 $i++;
}

//show next button
if (!($start>=$record_count-$per_page))
       echo " <a href='pagi_test.php?category=$category&start=$next'>Next</a>";

?>
通过以下方式过滤结果:

结果:
选择第二个过滤器时,您可以添加类别 例:

首先,我们的变量$category

$category="Marketing";
当用户使用另一个类别进行筛选时,请立即使用delimeter将其添加到$category

$category="Marketing:Automotive";
当您通过获取使用进行访问时,爆炸:

$cat=explode(":",$_GET['category']);
写下你的情况

    $condition="category=category[0]";
    for($i=1; $i<sizeof($cat); $i++)
    {
       $condition="AND category=$cat[$i]";
    }

$where="WHERE $condition";

我看到两个不同的问题

  • 如何允许用户选择多个类别进行筛选
  • 如何将这些选择传播到分页链接
  • 每个问题我都有一个解决方案

    如何允许用户选择多个类别进行筛选

    表单将是最直接的方法

    <h3>Filter results by:</h3>
    <form action="pagi_test.php" method="GET">
      <input type="checkbox" name="category[]" value="marketing" id="cat_marketing"/>
      <label for="cat_marketing">Marketing</label>
      <br/>
    
      <input type="checkbox" name="category[]" value="automotive" id="cat_automotive"/>
      <label for="cat_automotive">Automotive</label>
      <br/>
    
      <input type="checkbox" name="category[]" value="sports" id="cat_sports"/>
      <label for="cat_sports">Marketing</label>
      <br/>
    
      <input type="submit" value="Filter!" />
    </form>
    
    当然,在执行查询之前,您可能需要在此处添加一个检查,以确保
    $categories
    不为空

    您还需要修改实际的选择查询

    //display data
    $get = mysql_query("SELECT * FROM explore WHERE category IN($inClause) LIMIT $start, $per_page");
    
    宾果!现在那部分已经完成了

    如何将这些选择传播到分页链接

    因为我们已经在
    $categories
    中存储了一个所选类别的数组,所以使用它将非常简单

    //设置上一个和下一个变量
    $prev=$start-$per_页面;
    $next=$start+$per_页面;
    //获取HTML安全数组中的类别
    $requestVars=数组映射('htmlspecialchars',$categories);
    //显示上一个按钮
    如果(!($start=$record\u count-$per\u page))
    {
    $requestVars['start']=$next;
    回声';
    }
    
    现在,这个实现仍然存在漏洞

    • 由于
      在剩余逻辑之前打印到页面,因此无法预先选择代表当前过滤器选择的复选框。你完全可以改变
    • 此外,在PHP脚本中还可以将类别作为文本字符串—它们在数据库中自己的表中会更好
    • 为整个数据集检索计数的方式效率低下——它通过线路将整个数据集发送到PHP,然后由PHP负责确定记录计数。最好运行一个单独的查询,使用
      selectcount(*)…

    我不确定如何将delimeter添加/实现到$category,我是否将该条件置于GET explode下?谢谢。检查($category!=''){$category.='':automotive“}
    $categories = $_GET['category'];
    $inClause   = "'" . implode( "','", array_map( 'mysql_real_escape_string', $categories ) ) . "'";
    
    //count records
    $record_count = mysql_num_rows(
      mysql_query( "SELECT * FROM explore WHERE category IN($inClause)" )
    );
    
    //display data
    $get = mysql_query("SELECT * FROM explore WHERE category IN($inClause) LIMIT $start, $per_page");
    
    //setup prev and next variables
    $prev = $start - $per_page;
    $next = $start + $per_page;
    
    // Get the categories in an HTML-safe array
    $requestVars = array_map( 'htmlspecialchars', $categories );
    
    //show prev button
    if (!($start<=0))
    {
      $requestVars['start'] = $prev;
      echo '<a href="pagi_test.php?' . http_build_query( $requestVars ) . '">Prev</a> ';
    }
    
    //show page numbers
    
    //set variable for first page
    $i=1;
    
    for ( $x = 0; $x < $record_count; $x = $x + $per_page )
    {
      $requestVars['start'] = $x;
      if ( $start != $x )
      {
        echo '<a href="pagi_test.php?' . http_build_query( $requestVars ) . '">'. $i .'</a> ';
      } else {
        echo '<a href="pagi_test.php?' . http_build_query( $requestVars ) . '"><b>'. $i .'</b></a> ';
      }
      $i++;
    }
    
    //show next button
    if (!($start>=$record_count-$per_page))
    {
      $requestVars['start'] = $next;
      echo '<a href="pagi_test.php?' . http_build_query( $requestVars ) . '">Next</a> ';
    }