Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Ricerca e paginazione

  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    45

    Ricerca e paginazione

    Ho sviluppato un modulo di ricerca di dati su un database con relativa paginazione. Fin qui tutto ok, sorge però un problema: nel momento in cui vado a cercare i dati la ricerca funziona correttamente al contrario della paginazione.
    Il problema cambia se elimino da mysql_query il valore di LIMIT.
    Se lo lascio mi da UN'UNICA pagina (risultato pagina 1 di 1) anche se in realtà ce ne sarebbero molte di più, se invece tolgo quel valore mi da inizialmente le pagine ESATTE ma nel momento in cui vado a cliccare sulla pagina 2 mi ritrovo le pagine TOTALI (quelle di tutti i dati) partendo dal primo risultato nell'ordine prestabilito (ovvero l'ultimo che ho inserito).

    Vi mostro quello che a mio parere è il codice non funzionante:

    codice:
    <?
        $query = mysql_query($select . $from . $where . $order. $limit, $dbcnx);
        $quanti = mysql_num_rows($query);
    
        $intero = ceil($quanti / $fine);
    ?>
    
    
    
    Pagina <?echo $pag;?> di <?echo $intero;?></p>
    
    
    
    
    
    <?
        for($x=1; $x<$intero+1; $x++)
        {
            if ($x == $pag)
            {
    ?>
    
    <?echo $x;?> |
    
    <?
            }
            else
            {
    ?>
    
    <?echo $x;?> |
    
    <?
    
            }
        }
    
    ?>
    
    </p>
    
    
    
    Nuova ricerca</p>
    <?
        mysql_close($dbcnx);
    ?>
    Se qualcuno riesce a trovare il problema gliene sarei davvero, ma DAVVERO MOLTO grato

  2. #2
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Dovresti scrivere come è fatta la query...così non si capisce dove sbagli.

    Un esempio di paginazione:
    Codice PHP:
    <?php

    $perpage 
    10;
    $page = (int)@$_GET['page'];
    if(
    $page <= 0$page 1;
    $start = ($page-1)*$perpage;

    $res mysql_query("SELECT id FROM table WHERE $condizione");
    $num_records mysql_num_rows($res);
    $pags ceil($num_records/$perpage);

    $res mysql_query("SELECT * FROM table WHERE $condizione LIMIT $start$perpage");
    // item da paginare
    while($row mysql_fetch_assoc($res)){
        ....
    }
    //link alle pagine
    for($i=1$i <=$pags$i++){
        echo 
    '[url="listsearch.php?page=$i"] $i[/url] |';
    }

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    45
    Grazie mille boots per la risposta. Si, scusami hai ragione. Ti mostro la pagina completa così cerchiamo di risolvere la situazione.
    codice:
    <?
    // CODICE: Connessione al database
    
    $pag = $_GET["pag"];
        if (isset($pag) == false || is_numeric($pag) == false || $pag < 1)
        {
            $pag = 1;
        }
    $fine = 10;
    $inizio = ($pag - 1) * $fine;
    
    //Di seguito sono specificate le query
    
    $select = 'SELECT DISTINCT id, text';
    $from = ' FROM table';
    $where = ' WHERE 1=1';
    $order = ' ORDER BY id DESC';
    $limit = " LIMIT " . $inizio . ", " . $fine;
    
    //Qui assegno la condizione proveniente da un altro file: search.php 
    
    $search = $_POST['search'];
    if ($search != '') {
    	$where .= " AND text LIKE '%$search%' ";
    }
    
    //Assegno ad una variabile il valore del risultato del search
    
    $query = @mysql_query($select . $from . $where . $order . $limit);
    	if (!$query) {
    		exit ('
    
    Error retrieving data from database!</p>'.'Error: ' . mysql_error() . '</p>');
    		}
    
    //Forse è qui l'ERRORE?
    
    $quanti = mysql_num_rows($query);
    for($x=0; $x<$quanti; $x++) {
    $row = mysql_fetch_row($query);
    
    
    //CODICE: items da stampare a video
    
    
    }
    $query2 = mysql_query($select . $from . $where . $order);
    $quanti2 = mysql_num_rows($query);
    $intero = ceil($quanti2 / $fine);
    
    ?>
    
    
    Pagina <?echo $pag;?> di <?echo $intero;?></p>
    <?
        for($x=1; $x<$intero+1; $x++)
        {
            if ($x == $pag)
            {
    ?>
    <?echo $x;?>  |
    <?
            }
            else
            {
    ?>
    <?echo $x;?> |
    <?
    
            } //Chiusura else
        } //Chiusura for
    ?>
    Il problema in questo caso specifico è il seguente: mi mostra il i risultati esatti, sia in termini di pagine che di items ma nel momento in cui vado a CAMBIARE PAGINA i risultati elencati sono quelli di TUTTO il database e le pagine sono piu che raddoppiate (per ovvi motivi).

    Non chiedo di farmi da debugger, non mi permetterei mai. In prima cosa vorrei capire dove è che sbaglio, non riesco proprio a capirlo!

  4. #4
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    strano, a parte

    Codice PHP:
    $query2 mysql_query($select $from $where $order);
    // $query2 non $query;
    $quanti2 mysql_num_rows($query2);
    $intero ceil($quanti2 $fine); 
    Funziona perfettamente la paginazione (appena testato)

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    45
    Funziona perfettamente la paginazione (appena testato) [/QUOTE]

    Ancora niente, continua a darmi il solito errore:
    mi mostra i risultati esatti, sia in termini di pagine che di items ma nel momento in cui vado a CAMBIARE PAGINA i risultati elencati sono quelli di TUTTO il database e le pagine sono piu che raddoppiate (per ovvi motivi).
    Qualcun'altro ha qualche idea?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.