Stufo di leggere sempre le stesse storie nelle guide faccio una domanda ben precisa: esiste un sistema per fare la paginazione di risultati da una pagina con form che richiama i risultati dentro se stessa?

Spiego meglio: la pagina ha un form che una volta compilato ed inviati i dati di ricerca si ricarica con i dati da db mysql.
Codice PHP:
    //intestazioni pagina HTML

<?php
    $ABIUser 
$_GET['ABIUser'];
?>
<body>
    
    //qui c'è il form HTML

    <?php
    
if(isset($_POST['seriale_da']) || isset($_POST['abi_da']) || isset($_POST['cab_da']) || isset($_POST['importo_da']) || isset($_POST['data_lavorazione_da']) || isset($_POST['trattamento'])){
        if (
trim(htmlentities($_POST['seriale_da'])) != "" || trim(htmlentities($_POST['abi_da'])) != "" || trim(htmlentities($_POST['cab_da'])) != "" || trim(htmlentities($_POST['importo_da'])) != "" || 
                
trim(htmlentities($_POST['data_lavorazione_da'])) != "" || trim(htmlentities($_POST['trattamento']) != "")) {
            
            
$connect apriDb(""); //funzione mia che si collega al db
            
            
$condizione "";

            
//qui ci sono vari passaggi che controllano e settano la $condizione a seconda dei parametri inseriti nel form, questa condizione andrà ad essere eseguita con la query sottostante
            
            
$sql "SELECT * FROM u".$ABIUser."
                    WHERE "
.$condizione;
            
//echo "$sql 
";
            
$result = interrogaDb(); //funzione mia che effettua la select sul db

            
$tot_record = mysql_num_rows($result);
            echo '<span style="
font-familysans-seriffont-size:14pxmargin-left200px;">Risultati trovati: '.$tot_record.'
';

            //impostazione parametri per paginazione
            
$per_pagina = 100;
            
$tot_pagine = ceil($tot_record / $per_pagina);
            
$pagina_corrente = (!isset($_GET['pag'])) ? 1 : (int)$_GET['pag'];
            
$primo_record_pagina = ($pagina_corrente - 1) * $per_pagina;
            
            
$sql_limit = "SELECT FROM u".$ABIUser."
                          
WHERE ".$condizione."
                          
LIMIT ".$primo_record_pagina."".$per_pagina;
            
$result_limit = interrogaDb($connect$sql_limit$Log);
            
            if (
$tot_record != 0) {
                echo '  <table style="
margin-left200px" border="1">';

                      //intestazione righe tabella risultati
                
                
$i = 0;
                while(
$dati = mysql_fetch_array($result_limit)) {
                   
                       //tabella con i risultati

                    
$i++;
                }
                echo '  </table>
                        
';
               //paginazione a video
               echo '<div id="
paginazione">
                        <div style="
font-familysans-seriffont-size:14pxmargin-left200px;">Pagine totali: '.$tot_pagine.'</div>';

                
$paginazione = '<div style="floatleft;  font-familysans-seriffont-size:14pxmargin-left100px;">';
                
$n = 2;
                if(
$pagina_corrente == 1) //caso prima pagina
                    
$paginazione .= '';
                else{
                    
$pag_precedente = ($pagina_corrente - 1);
                    
$paginazione .= '[url="'.$_SERVER['PHP_SELF'].'?ABIUser='.$ABIUser.'&pag=1"]|< prima[/url]';
                    
$paginazione .= ' [url="'.$_SERVER['PHP_SELF'].'?ABIUser='.$ABIUser.'&pag='.$pag_precedente.'"]<< precedente[/url]';
                }
                
$paginazione .= '</div>
                                <div style="
floatleftfont-familysans-seriffont-size:14pxmargin-left200px;">';
                for(
$i=1; $i<=$tot_pagine$i++) { //pagine intermedie
                    if(
$i == $pagina_corrente)
                        
$paginazione .= $i;
                    else
                        
$paginazione .= ' - [url="'.$_SERVER['PHP_SELF'].'?ABIUser='.$ABIUser.'&pag='.$i.'"]'.$i.'[/url]';
                }
                
$paginazione .= '</div>
                                <div style="
floatleftfont-familysans-seriffont-size:14pxmargin-left200px;">';
                if(
$pagina_corrente == $tot_pagine) //caso ultima pagina
                    
$paginazione .= '';
                else{
                    
$pag_successiva = ($pagina_corrente + 1);
                    
$paginazione .= '[url="'.$_SERVER['PHP_SELF'].'?ABIUser='.$ABIUser.'&pag='.$pag_successiva.'"]successiva >>[/url]';
                    
$paginazione .= ' [url="'.$_SERVER['PHP_SELF'].'?ABIUser='.$ABIUser.'&pag='.$tot_pagine.'"]ultima >|[/url]';
                }
                echo 
$paginazione.'</div>';

                echo '</div></br>
';
            }else{
                echo '<span style="
font-familysans-seriffont-size:14pxmargin-left200px;">Nessun dato disponibile</span>';
            }
            echo '

';
            chiudiDb(); //mia funzione che chiude la connessione
        }else{
            echo '<span style="
font-style:italiccolor#FF0000; font-size:16px; margin-left: 200px;"> Inserire almeno un campo per eseguire la ricerca </span>

';
        }
    }else if (isset($_GET['
DataLav']) && isset($_GET['CodLav'])) { 
        if (htmlentities($_GET['
DataLav']) != "" && htmlentities($_GET['CodLav']) != "") {
            require_once("Comune.php");

              //questo è un altro caso da cui si arriva tramite ricerca da un'
altro form di ricerca presente in un'altra pagina e del quale vorrei per anch'esso funzionasse la paginazione


    
}
    
    
//funzioni varie di controllo della $condizione
Provando a fare una semplice paginazione, come quella qui mostrata (e che ho costruito tramite guide e svariati forum), chiaramente non funziona perchè la paginazione è presente e viene eseguita solo se sono settati i campi del form essendo dentro il cicli degli isset.

Ho provato a spostare la paginazione fuori e fare un altro else if con il $_GET che mi prenda un altro caso (oltre a quello già evidenziato a codice) dove mi passo la pagina ed altri dati che mi servono, ma il problema è che dovrei passarmi anche la $condizione (perchè altrimenti a pagina 2 non riuscirei a rieseguire la query) che è una stringa che tra le altre cose può essere anche piuttosto lunga, e che quindi non mi viene accettata.

Quindi la domanda nuovamente: esiste un sistema per fare la paginazione dentro una pagina che ha un form che già si autorichiama?