Small problem with pure PHP paging

Asked

Viewed 163 times

0

Hello, I have the following function that does the paging as per what the user typed in the search input:

function pesquisar($botao, $input, $conteudo)
{
    if(isset($_POST[$botao]) || $_GET['pagina'])
    {
        $busca = $_POST[$input]; // pega os dados que estao no campo para a pesquisa
        $busca_divida = explode(',', $busca); // divide o que esta no campo por virgulas
        $quant =  count($busca_divida); // total de itens a serem pesquisados
        
        $id_mostrado = array(""); 
        $p = $_GET["pagina"]; // vai por isto na url

        if(isset($p)) // verifica se está setado na url  
        {
            $p = $p; // se sim a pagina recebe o que ela tem
        } 
        else 
        {
            $p = 1; // se nao ela recebe 1
        }

        $qnt = 10; // maximo de conteudo exibido por página
        $inicio = ($p*$qnt) - $qnt; // calcula quantas páginas serão necessárias conforme o numero de itens por página x itens do banco 
        $sql = mysql_query("SELECT * FROM tbnews WHERE ".$conteudo." LIKE '%".$pesquisa."%' and publicar = 'Y' ORDER BY data DESC LIMIT $inicio, $qnt  " ); 
        $quant_campos = mysql_num_rows($sql); // cria uma variavel com o total de linhas no banco que correspondem a pesquisa
        for($i = 0; $i < $quant ; $i++)
        {
            $pesquisa = $busca_divida[$i]; // para cada item do campo, faz um laço para percorrer e trazer o dado
            if($quant_campos == 0)
            {
                echo "Nenhum resultado encontrado"; // se nao encontrar nada
            }
            else
            {
                while($linha = mysql_fetch_array($sql)) // se encontrar imprime eles na tela
                {
                    $id = $linha['id'];
                    $titulo = $linha['titulo'];
                    $tags = $linha['tags'];
                    $data = $linha['data'];
                    $imagem = $linha['imagem'];
                    $apoio = $linha['apoio'];
                    $tipo = $linha['tipo'];
                    if ($tipo == 'I'){
                        $tipo = 24;
                    }
                    if ($tipo == 'G'){
                        $tipo = 56;
                    }
                    if(!array_search($id, $id_mostrado))
                    {

                    $imageThumb = "<a href='index.php?idConteudo=".$tipo."&idNoticia=".$id."' "
                                . "style='display:block; ]"
                                . "background-image:URL(common/thumb.php?src=../upload/noticias/".$imagem."&h=110&w=110); "
                                . "background-position:center; "
                                . "background-repeat:no-repeat; "
                                . "width:82px; "
                                . "height:82px; "
                                . "margin-right:10px; "
                                . "float:left;'>    </a>";

                    $itemPrincipal = "".$imageThumb."<a href='index.php?idConteudo=".$tipo."&idNoticia=".$id."'>"
                                   . "<h4 class='tituloListagem'>".$titulo."</h4> \n"
                                   . "<h6 class='apoioListagem'>".$apoio."</h6> \n"
                                   . "<span style='font-size:x-small; "
                                   . "display:block; "
                                   . "margin-top:3px; "
                                   . "font-weight:normal;'> ".$data." </span> </a>"
                                   . "<span style='font-size:x-small; "
                                   . "display:block; "
                                   . "margin-top:3px; "
                                   . "font-weight:normal;'><b>Palavras-Chave:</b> ".$tags." </span> </a>"
                                   . "<a href='?idConteudo=".$tipo."&idNoticia=".$id."'> <nobr> Leia mais...</nobr> </a> </p>";


                    echo $itemPrincipal;
                    array_push($id_mostrado, $id);
                    }
                }
            }
        }
    }
        
        
        $sql_select_all = "SELECT * FROM tbnews WHERE ".$conteudo." LIKE '%".$pesquisa."%' and publicar = 'Y' ORDER BY data DESC "; // faz o mesmo select 
        $sql_query_all = mysql_query($sql_select_all); // executa a query
        $total_registros = mysql_num_rows($sql_query_all); // conta quantos itens tem 
        $pags = ceil($total_registros/$qnt); // calcula quantas páginas terá e arredonda para cima. 
        $max_links = 3; //quantas páginas irão aparecer ao redor da página atual na paginação.
        
        echo '<a href="pesquisar.php?pagina=1" target="_self"> << </a>&nbsp;&nbsp'; // primeira pagina

        for($i = $p-$max_links; $i <= $p-1; $i++) 
        {
            if($i > 0) 
            {
                echo '<a href="pesquisar.php?pagina='.$i.'"" target="_self">' . $i . '</a>&nbsp;&nbsp'; // paginas anteriores
            } 
        }

        echo " <b>".$p."</b>&nbsp;&nbsp "; // pagina atual

        for($i = $p+1; $i <= $p+$max_links; $i++) 
        {
            if($i < $pags)
            {
                echo '<a href="pesquisar.php?pagina='.$i.'"" target="_self">' . $i . '</a>&nbsp;&nbsp'; // paginas posteriores
            }
        }
        echo '<a href="pesquisar.php?pagina='.$pags.'""" target="_self"> >> </a>&nbsp;&nbsp'; // ultima pagina
}

The function checks whether the data it will load comes from the input OR comes from the last page of the url;

the function works almost well right, only it prints 2 times the part of the pagination. One at the beginning of the listing and another at the end.

Can someone help me?

Here’s a screenshot of how the code is being printed. inserir a descrição da imagem aqui

  • You can put a print of how it appears?

  • I added an image now with what is being printed by the function.

  • Okay let’s see what it is

  • It is not a small problem, it is a "big problem". If you adopted good development practices, you would understand that this type of problem should be overcome in a simpler way, read this: http://www.php-fig.org/

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.