【问题标题】:Paginate query result with PHP and AJAX使用 PHP 和 AJAX 对查询结果进行分页
【发布时间】:2013-12-05 16:34:09
【问题描述】:

我的 html 中有一个过滤器表单,它通过 ajax 将数据发送到 php 以挂载查询。 我想对查询的结果进行分页。最好的方法是什么?

您可以查看site here(点击过滤)

ajax:

jQuery(document).ready(function(){
      jQuery('#filtros').submit(function(){
            var dados = jQuery( this ).serialize();//build a post data structure
            jQuery.ajax({
            type: "POST",
            url: "organiza_tab.php",
            dataType:"text"
            data: dados,//Form variables
            success: function( response )
            {
                $("#output").html( response );
            }
           });
        return false;
});});

这是我的 php 文件,我在其中获取表单数据并挂载查询

$deano = $_POST['deyear'];
$deano = $_POST['deyear'];
$demes = $_POST['demonth'];
$dedia = $_POST['deday'];
$ateano = $_POST['ateyear'];
$atemes = $_POST['atemonth'];
$atedia = $_POST['ateday'];
$asc = $_POST['direcao'];
$orderby = $_POST['ordenado'];

$dedata = $deano ."-". $demes ."-". $dedia;
$atedata = $ateano ."-". $atemes ."-". $atedia;



if( $_POST['loja']){ 
        for ($i=0; $i<sizeof($_POST['loja']); $i++){
            $where_loja[$i] = " `loja` = '{$_POST['loja'][$i]}'";
        }
    }

if( sizeof( $where_loja ) ){
    $query[] = "(".implode( ' OR ',$where_loja ).")";
} 

$sql = "SELECT *
        FROM vendas WHERE";

 if(sizeof($query)>1){
    $sql .= $query[0];
    for($i=1; $i<sizeof($query);$i++){
    $sql.= ' AND '. $query[$i];
    }

    }else{

    $sql.= $query[0];   
    } 

    if( $_POST['loja']){ 
        $sql.=" AND ";
    }

    $sql .= " ( data > '$dedata' AND data <  '$atedata'  )";
    $sql .= " ORDER BY " . $orderby ." ". $asc ;

这是分页本身。问题是,当我更改页面时,url 也发生了更改,并且没有提交表单。我需要提交表单来执行查询。我怎样才能做到这一点?考虑到我需要提交表单,对查询结果进行分页的最佳方法是什么。

  //items per page
  $quantidade = 30;
  //current page
  $pagina     = (isset($_POST['pagina'])) ? (int)$_POST['pagina'] : 1;
  //Calcula a pagina de qual valor ser? exibido
  $inicio     = ($quantidade * $pagina) - $quantidade;
  $sql .= " LIMIT " . $inicio . " , " . $quantidade ;

  $qr  = mysql_query($sql) or die(mysql_error());

  echo "<table id='tab_vendas' border='1' width='100%'>";
  echo "<tr><td>Data</td><td>Loja</td><td>Total (AKZ)</td><td>Total (USD)</td>     <td>Multicaixa</td><td>Saidas</td><td>Visa</td></tr>";

  $num_rows = mysql_num_rows($qr);
  if($num_rows > 0){
    while($ln = mysql_fetch_assoc($qr)){
          echo "<tr><td>" . $ln['data']."</td>"; 
          echo "<td>" . $ln['loja']."</td>"; 
          echo "<td>" . $ln['totalkz']."</td>";
          echo "<td>" . $ln['totaldollar']."</td>";
          echo "<td>" . $ln['multicaixa']."</td>";
          echo "<td>" . $ln['saidas']."</td>";
          echo "<td>" . $ln['visa']."</td></tr>"; 
    }
  }else{
       echo "sorry no data";
  }
echo"</table></div>";


  //SQL para saber o total
  $sqlTotal   = "SELECT id FROM vendas";
  //Executa o SQL
  $qrTotal    = mysql_query($sqlTotal) or die(mysql_error());
  //Total de Registro na tabela
  $numTotal   = mysql_num_rows($qrTotal);
  //O calculo do Total de p?gina ser exibido
  $totalPagina= ceil($numTotal/$quantidade);

   $exibir = 3;

   $anterior  = (($pagina - 1) == 0) ? 1 : $pagina - 1;

   $posterior = (($pagina+1) >= $totalPagina) ? $totalPagina : $pagina+1;

   echo "<div id='paginacao'><a href='?pagina=1'>Primeira</a> | ";
   echo "<a href=\"?pagina=$anterior\"><<</a> | ";

   for($i = $pagina-$exibir; $i <= $pagina-1; $i++){
            if($i > 0)
             echo '<a href="?pagina='.$i.'"> '.$i.' </a>';
  }

   echo '<a href="?pagina='.$pagina.'"><strong>['.$pagina.']</strong></a>';

   for($i = $pagina+1; $i < $pagina+$exibir; $i++){
            if($i <= $totalPagina)
            echo '<a href="?pagina='.$i.'"> '.$i.' </a>';
  }

  echo " | <a href=\"?pagina=$posterior\">>></a> | ";
  echo "  <a href=\"?pagina=$totalPagina\">Ultima</a></div>";

【问题讨论】:

    标签: php mysql ajax pagination


    【解决方案1】:

    您需要将表单值附加到分页链接,例如:

    '&deyear='.$deano'&amp;deano='.$deano'
    

    然后你需要修改定义表单变量的代码,例如:

    $deano = $_POST['deyear'];
    $deano = $_POST['deyear'];
    

    ...以便它检查 $_GET 和 $_POST。

    您的网站上还有许多 HTML 错误,例如你使用了错误的语法。

    【讨论】:

    • 感谢您的回答 什么样的 HTML 错误?我应该在哪里修改定义表单变量的代码?
    猜你喜欢
    • 1970-01-01
    • 2012-12-21
    • 2021-12-04
    • 2019-10-25
    • 1970-01-01
    • 2012-07-28
    • 1970-01-01
    • 2019-12-23
    • 1970-01-01
    相关资源
    最近更新 更多