[PHP] If e Else paginazione ok ci sono risultati no ma avanti lo stesso

Achille610@

Utente Attivo
18 Apr 2017
75
0
6
51
Ciao a tutti,
ho provato e riprovato ma non riesco a farlo, spero che qualcuno di voi possa darmi una mano,
ho questa questa query che mi restituisce i risultati se ci sono, ma se non ci sono non essendoci controlli, mi blocca il resto degli script e mi da pagina bianca da qui in poi.


In poche parole io vorrei mettere un controllo che se ci sono risultati manda avanti come ora lo script e gli estrae, mentre se non ci sono risultati dia il semplice messaggio: in questo listato non ci sono annunci, ma che però non blocchi tutto quello che viene dopo restituendo pagina bianca.

C'è qualcuno che sa come posso fare, e può gentilmente aiutarmi :)

Grazie

PHP:
<?php
//includ0 il file della classe
@require("paginazione.php");

//connetto al db
class MySQL
{
function MySQL()
{
require "db_connect.php";
}
}

$data = new MySQL();

// classe per l'impaginazione
$p = new Paging;

// numero massimo di risultati per pagina
$max = 6;

// pagina da cui iniziare la numerazione
$inizio = $p->paginaIniziale($max);



// conto i record
$query_count = @mysql_query(
"SELECT * FROM
pompe INNER JOIN tipologia ON (pompe.tipologiaid=tipologia.id )
INNER JOIN prioryty ON (pompe.priorytyid=prioryty.id )
INNER JOIN stato_annuncio ON (pompe.stato_annuncioid=stato_annuncio.id )
INNER JOIN users ON (pompe.user_id=users.id)
WHERE tipologia.tipologia='Toilette' AND categoria.categoria='cani' AND province.province='Milano' AND stato_annuncio.stato_annuncio='attivo' AND priorytyid ORDER BY priorytyid DESC, id_annunci DESC ")

     or die (mysql_error());
$count = @mysql_num_rows($query_count) or die (mysql_error());

//conto le pagine
$pagine = $p->contaPagine($count, $max);

// limitiamo la SELECT al numero di risultati
$obj_titolo = @mysql_query(
"SELECT * FROM
pompe INNER JOIN tipologia ON (pompe.tipologiaid=tipologia.id )
INNER JOIN prioryty ON (pompe.priorytyid=prioryty.id )
INNER JOIN stato_annuncio ON (pompe.stato_annuncioid=stato_annuncio.id )
INNER JOIN users ON (pompe.user_id=users.id)
WHERE tipologia.tipologia='Toilette' AND categoria.categoria='cani' AND province.province='Milano' AND stato_annuncio.stato_annuncio='attivo' AND priorytyid ORDER BY priorytyid DESC, id_annunci DESC LIMIT ".$inizio.",".$max) or die (mysql_error());

//dati da stampare


while ($row = mysql_fetch_array($obj_titolo)) {

$click_annuncio = $row['click_annuncio'];
$id_annunci = $row['id_annunci'];
$user_id = $row['id'];

  $messaggio = substr($row['messaggio'], 0, 200);
  $mq = $row['mq'];
  $tipologia = $row['tipologia'];
  $categoria = $row['categoria'];
  $regione = $row['regione'];
  $province = $row['province'];


 echo"<div class='panel panel-default'>";
echo "<div class='row'>";
echo "<h5>$tipologia | $categoria | $province | $cittas </h5>";
  echo "<hr>";
 echo " <br /><h5>$messaggio (...)</h5><br />";
 echo "<br />";
echo "</div>";
echo "</div>";




}


//mostro le pagine
$lista = $p->listaPagine($_GET['p'], $pagine);
echo $lista . "<br>";

//mostro il navigatore Precedente/Successiva
$navigatore = $p->precedenteSuccessiva($_GET['p'], $pagine);
echo $navigatore;
?>
 
Proverei così:
PHP:
/**
* Created by PhPS.
* User: Marco Arena Di R.
* Date: 21/04/2018
* Time: 12:18
*/
class Paginazione_Dir {

    /**
     * Numero di risultati da visualizzare
     * @var int
     */
    private $max_page=6;
    /**
     * Pagina corrent
     * @var int
     */
    private $current_page=0;
    /**
     * Risultato
     * @var array
     */
    private $result=[];
    /**
     * @var Custom_QueryBuilder
     */
    private $conn;

    /**
     * Paginazione_Dir constructor.
     *
     * @param int $current_page Numero inizia di pagina
     */
    public function __construct($current_page=0) {
        $this->current_page=$current_page;
        $this->conn=new Custom_QueryBuilder();
        $this->get_num_items()->get_status();
        return $this->result;
    }

    /**
     * Dalla query ottiene il numero di items ed effettua le corrette operazioni
     * @return $this
     */
    private function get_num_items(){
        $this->result['total_items']=$this->conn->set_free_query('SELECT count(SELECT * FROM TABELLA) as num FROM TBL')->result;
        if($this->result['total_items'][0]['num']>0){
            if($this->result['total_items'][0]['num']>=$this->max_page)$this->result['num_pages']=round($this->result['total_items'][0]['num']/$this->max_page);
            else $this->result['num_pages']=1;
            $this->get_query_w_limit();
        }else{
            $this->result['num_pages']=0;
            $this->result['items']=[];
            $this->current_page=0;
        }
        $this->get_current_page();
        return $this;
    }

    /**
     * Esegue la query in base alle specifiche assegnate
     */
    private function get_query_w_limit(){
        $this->result['items']=$this->conn->set_free_query('SELECT * FROM TABELLA LIMIT '.$this->current_page.','.$this->max_page)->result;
    }

    /**
     * Setta la pagina corrente
     */
    private function get_current_page(){
        $this->result['current_page']=$this->current_page;
    }

    /**
     * Valorizza lo stato della richiesta
     */
    private function get_status(){
        if(empty($this->result['items'])){
            $this->result['status']=['code'=>404,'error'=>TRUE];
        }else $this->result['status']=['code'=>200,'error'=>FALSE];
    }
}
//per richiamare la classe basta questo:
$pag=new Paginazione_Dir();
var_dump($pag);

Ho utilizzato una libreria (la mia) per le query, ma dai uno sguardo anche medoo abbastanza fluida e facile da installare. la logica è minimalistica per la gestione degli errori.....
Per l'output basta che gestisci solo:
PHP:
if($pag['status']['code']!=200){
//errore
}else{
//procedo con la stampa dei risultati
}

Vedi se puoi trarne beneficio!
 
Scusa, ho sbagliato il current_page, deve essere incrementato current_page=current_page*max_page...
 
Per ora grazie mille @macus_adi appena possibile provo a sistemarla.

Ma non c'è un modo più semplice inserendo un if e else nel mio script ????
 
prova così,
PHP:
$count = @mysql_num_rows($query_count) or die (mysql_error());

if ( empty($count) )
{
    echo "NON HO TROVATO ANNUNCI CON I DATI DI RICERCA INDICATI"
    // eventuale gestione dei parametri e del ritorno allo script di scelta
}
else
{

//conto le pagine
$pagine = $p->contaPagine($count, $max);

......

//mostro le pagine
$lista = $p->listaPagine($_GET['p'], $pagine);
echo $lista . "<br>";

//mostro il navigatore Precedente/Successiva
$navigatore = $p->precedenteSuccessiva($_GET['p'], $pagine);
echo $navigatore;

}    // chiusura dell'else
?>
considera che lo script termina visualizzando la lista delle pagine ed il navigatore tra pagine
dovrai (penso) aggiustare l'uscita dallo script quando non vi siano risultati

verifica in ogni caso il file "paginazione.php", credo che al suo interno ci sia un metodo da chiamare nel caso di zero elementi

ps, non dimenticare la "graffa" a chiusura dell'else
 
Scusa, sono abituato così... come suggerisce qualcuno fai in quel modo....
Va da se che solitamente le Classi che effettuano la paginazione abbiano tutti i controlli del caso, per quello ho scritto una Classetta...

Ricorda sempre che il codice dovrebbe essere scritto per il riuso, quindi cerca per quanto ti è possibile di fare un salto di qualità avendo cura delle logiche da applicare, e soprattutto nel caso di esposizione di API strutturando il codice in una determinata maniera non devi riscrivere nulla!!! ;)
 
Ciao @macus_adi,
tieni presente che io lo faccio per divertimento per i miei siti, non lo faccio per lavoro, in ogni caso la prima strada che mi hai indicato la studierò, ma per ora avevo un pò più fretta e pensavo di risolvere modificando questo che funziona già :)

In ogni caso ho provato ad aggiungere quello che mi hai postato, ma come da mille mie prove prima di scrivere qui si blocca e mi da pagina bianca "nel senso bianca come quando trova un errore e non estrae nulla" neanche se ci sono risultati.

comunque oggi provo a smanettarci un pò e vediamo se riesco a risolvere, in caso ti scrivo qui, altrimenti spero che appena hai un attimo possa aiutarmi tu :)

Grazie mille

ti posto il codice come l'ho sistemato, e il codice della paginazione.

PHP:
<?php
//includiamo il file della classe
@require("paginazione.php");

//connettiamoci a MySQL e selezioniamo il database
class MySQL
{
function MySQL()
{
require "db_connect.php";
}
}

$data = new MySQL();

// istanziamo la classe per l'impaginazione
$p = new Paging;

// numero massimo di risultati per pagina
$max = 6;

// identifichiamo la pagina da cui iniziare la numerazione
$inizio = $p->paginaIniziale($max);


// contiamo i records nel database
// contiamo i records nel database
$query_count = @mysql_query(
"SELECT * FROM
pompe INNER JOIN tipologia ON (pompe.tipologiaid=tipologia.id )
INNER JOIN province ON (pompe.provinceid=province.id )
INNER JOIN regione ON (pompe.regioneid=regione.id )
INNER JOIN categoria ON (pompe.categoriaid=categoria.id )
INNER JOIN prioryty ON (pompe.priorytyid=prioryty.id )
INNER JOIN stato_annuncio ON (pompe.stato_annuncioid=stato_annuncio.id )
INNER JOIN users ON (pompe.user_id=users.id)
WHERE tipologia.tipologia='Cani' AND categoria.categoria='Toilette' AND province.province='Milano' AND stato_annuncio.stato_annuncio='attivo' AND priorytyid ORDER BY priorytyid DESC, id_annunci DESC ")

 

   or die (mysql_error());
$count = @mysql_num_rows($query_count) or die (mysql_error());


if ( empty($count) )
{
    echo "NON HO TROVATO ANNUNCI CON I DATI DI RICERCA INDICATI"
    // eventuale gestione dei parametri e del ritorno allo script di scelta
}
else
{


// troviamo il numero delle pagine che dovr� essere contato
$pagine = $p->contaPagine($count, $max);


// limitiamo la SELECT al numero di risultati per pagina
$obj_titolo = @mysql_query(
"SELECT * FROM
pompe INNER JOIN tipologia ON (pompe.tipologiaid=tipologia.id )
INNER JOIN province ON (pompe.provinceid=province.id )
INNER JOIN regione ON (pompe.regioneid=regione.id )
INNER JOIN categoria ON (pompe.categoriaid=categoria.id )
INNER JOIN prioryty ON (pompe.priorytyid=prioryty.id )
INNER JOIN stato_annuncio ON (pompe.stato_annuncioid=stato_annuncio.id )
INNER JOIN users ON (pompe.user_id=users.id)
WHERE tipologia.tipologia='Cani' AND categoria.categoria='Toilette' AND province.province='Milano' AND stato_annuncio.stato_annuncio='attivo' AND priorytyid ORDER BY priorytyid DESC, id_annunci DESC LIMIT ".$inizio.",".$max) or die (mysql_error());

//recuperiamo i dati da stampare


while ($row = mysql_fetch_array($obj_titolo)) {

$click_annuncio = $row['click_annuncio'];
$id_annunci = $row['id_annunci'];
$user_id = $row['id'];

  $messaggio = substr($row['messaggio'], 0, 200);
  $mq = $row['mq'];
  $tipologia = $row['tipologia'];
  $categoria = $row['categoria'];
  $regione = $row['regione'];
  $province = $row['province'];
  $cittas = $row['cittas'];
  $titolo = $row['titolo'];
     $tipo = $row['tipo'];
   $locali = $row['locali'];
  $username = $row['username'];
  $email = $row['email'];
    $cliente = $row['cliente'];
       $logo_cliente = $row['logo_cliente'];
       $titolo_link = preg_replace('<br>', '', $titolo);
    $titolo_link = preg_replace('/[^a-z ]+/i', '', $titolo_link);
   $titolo_link = preg_replace('/\s+/', '-', $titolo_link);
  $titolo_link = strtolower ($titolo_link);
  $provincia = $row['provincia'];

   $nome_file = $row['nome_file'];
  $tipo_file = $row['tipo_file'];
  $dati_file = $row['dati_file'];

  $nome_file_vero = $row['nome_file_vero'];
  $tipo_file = $row['tipo_file'];
  $dati_file = $row['dati_file'];
//recuperiamo i dati da stampare

// stampiamo i nostri dati

// stampiamo i nostri dati

   echo"<div class='panel panel-default'>";
echo "<div class='row'>";
echo "  <div class='col-sm-4'><a href=\"Italia/$regione/$tipologia/$categoria/$province/$titolo_link-$id_annunci\"/><img src='immagini2ricette.php?id_annunci=$id_annunci' name='$nome_file' alt'$nome_file' title='$titolo' class='img-responsive'  /></a></div>";
echo "  <div class='col-sm-8'><a href=\"Italia/$regione/$tipologia/$categoria/$province/$titolo_link-$id_annunci\"/><h2>$titolo</h2></a>";
echo "<h5>$tipologia | $categoria | $province | $cittas </h5>";
  echo "<hr>";
 echo " <br /><h5>$messaggio (...)</h5><br />";
 echo "<br />";
echo "</div>";
echo "</div>";
echo "</div>";



}

//l'errore dovrebbe essere qui chi mi aiutaaaaaa


//mostriamo le pagine
$lista = $p->listaPagine($_GET['p'], $pagine);
echo $lista . "<br>";

//mostriamo il navigatore Precedente/Successiva
$navigatore = $p->precedenteSuccessiva($_GET['p'], $pagine);
echo $navigatore;



}
?>


Paginazione

PHP:
<?php
// definiamo una costante per la pagina corrente
define("SELF", $_SERVER['PHP_SELF']);

// definiamo la classe
class Paging
{
// definiamo la pagina di partenza
function paginaIniziale($max_row)
{
if ((!isset($_GET['p'])) || ($_GET['p'] == "1"))
{
$parti_da = 0;
$_GET['p'] = 1;
}else{
$parti_da = ($_GET['p']-1) * $max_row;
}
return $parti_da;
}

// contiamo le pagine e stabiliamo quanti records devono essere impaginati
function contaPagine($conta, $max_row)
{
$pgg = (($conta % $max_row) == 0) ? $conta / $max_row : floor($conta / $max_row) + 1;
return $pgg;
}

// mostriamo l'elenco delle pagine
function listaPagine($p_corrente, $pgg)
{
$listapgg = "";
if (($p_corrente != 1) && ($p_corrente))
{
$listapgg .= " <a href=\"".SELF."?p=1\">Prima pag.</a> ";
}
if (($p_corrente-1) > 0)
{
$listapgg .= "<a href=\"".SELF."?p=".($p_corrente-1)."\"><</a> ";
}
if($p_corrente>$pgg){
        header("location: index.php?p=1");
    }
    elseif($p_corrente==1){
        $inizio = $p_corrente;
    }
    elseif($p_corrente==2){
        $inizio = $p_corrente-1;
    }
    elseif($p_corrente==$pgg-1){
        $inizio = $p_corrente-3;
    }
    elseif($p_corrente==$pgg){
        $inizio = $p_corrente-4;
    }
    else{
        $inizio=$p_corrente-2;
    }
    for ($i=1; $i<=5; $i++){
        if ($inizio == $p_corrente){
            $listapgg .= "<b>".$inizio."</b>";
            $inizio++;
        }
        else{
            $listapgg .= "<a href=\"".SELF."?p=".$inizio."\">".$inizio."</a>";
            $inizio++;
        }
        $listapgg .= " ";
    }
if (($p_corrente+1) <= $pgg)
{
$listapgg .= "<a href=\"".SELF."?p=".($p_corrente+1)."\">></a> ";
}
if (($p_corrente != $pgg) && ($pgg != 0))
{
$listapgg .= "<a href=\"".SELF."?p=".$pgg."\">Ultima pag.</a> ";
}
$listapgg .= "</td>\n";
return $listapgg;
}

// permettiamo la navigazione per pagine precedenti e successive
function precedenteSuccessiva($p_corrente, $pgg)
{
$impaginazione = "";
if (($p_corrente-1) <= 0)
{
$impaginazione .= "Precedente";
}else{
$impaginazione .= "<a href=\"".SELF."?p=".($p_corrente-1)."\">Pag. precedente</a>";
}
$impaginazione .= " | ";
if (($p_corrente+1) > $pgg)
{
$impaginazione .= "Prossima";
}else{
$impaginazione .= "<a href=\"".SELF."?p=".($p_corrente+1)."\">Prossima pag.</a>";
}
return $impaginazione;
}
}
?>
 
Mhhhhhhhhhh allora cosi funziona e non funziona, nel senso che se ci sono risultati mi restituisce mi restituisce all'inizio dei risultati ci sono annunci, mentre invece se non ci sono annunci al posto di scrivermi non ci sono annunci mi da pagina bianca :(

perchè non capisco

PHP:
$query_count = @mysql_query(
"SELECT * FROM
pompe INNER JOIN tipologia ON (pompe.tipologiaid=tipologia.id )
INNER JOIN province ON (pompe.provinceid=province.id )
INNER JOIN regione ON (pompe.regioneid=regione.id )
INNER JOIN categoria ON (pompe.categoriaid=categoria.id )
INNER JOIN prioryty ON (pompe.priorytyid=prioryty.id )
INNER JOIN stato_annuncio ON (pompe.stato_annuncioid=stato_annuncio.id )
INNER JOIN users ON (pompe.user_id=users.id)
WHERE tipologia.tipologia='Cani' AND categoria.categoria='Toilette' AND province.province='Milano' AND stato_annuncio.stato_annuncio='attivo' AND priorytyid ORDER BY priorytyid DESC, id_annunci DESC ")

    or die (mysql_error());
$count = @mysql_num_rows($query_count) or die (mysql_error());


    
if (mysql_num_rows($count) =='0' ){
       echo "non ci sono annunci"; 
    }else{ 
       echo "ci sono annunci"; 
   
   

// troviamo il numero delle pagine che dovr� essere contato
$pagine = $p->contaPagine($count, $max);

// limitiamo la SELECT al numero di risultati per pagina
$obj_titolo = @mysql_query(
"SELECT * FROM
pompe INNER JOIN tipologia ON (pompe.tipologiaid=tipologia.id )
INNER JOIN province ON (pompe.provinceid=province.id )
INNER JOIN regione ON (pompe.regioneid=regione.id )
 
Ultima modifica:
anche cosi se ci sono risultati va avanti e mi da il messaggio ci sono risultati, ma se non ci sono si blocca :( che sbaglio

PHP:
// contiamo i records nel database
// contiamo i records nel database
$query_count = @mysql_query(
"SELECT * FROM
pompe INNER JOIN tipologia ON (pompe.tipologiaid=tipologia.id )
INNER JOIN province ON (pompe.provinceid=province.id )
INNER JOIN regione ON (pompe.regioneid=regione.id )
INNER JOIN categoria ON (pompe.categoriaid=categoria.id )
INNER JOIN prioryty ON (pompe.priorytyid=prioryty.id )
INNER JOIN stato_annuncio ON (pompe.stato_annuncioid=stato_annuncio.id )
INNER JOIN users ON (pompe.user_id=users.id)
WHERE tipologia.tipologia='Cani' AND categoria.categoria='Toilette' AND province.province='Milano' AND stato_annuncio.stato_annuncio='attivo' AND priorytyid ORDER BY priorytyid DESC, id_annunci DESC ")

    or die (mysql_error());
$count = @mysql_num_rows($query_count) or die (mysql_error());





// troviamo il numero delle pagine che dovr� essere contato
$pagine = $p->contaPagine($count, $max);

$obj_titolo = @mysql_query(
"SELECT * FROM
pompe INNER JOIN tipologia ON (pompe.tipologiaid=tipologia.id )
INNER JOIN province ON (pompe.provinceid=province.id )
INNER JOIN regione ON (pompe.regioneid=regione.id )
INNER JOIN categoria ON (pompe.categoriaid=categoria.id )
INNER JOIN prioryty ON (pompe.priorytyid=prioryty.id )
INNER JOIN stato_annuncio ON (pompe.stato_annuncioid=stato_annuncio.id )
INNER JOIN users ON (pompe.user_id=users.id)
WHERE tipologia.tipologia='Cani' AND categoria.categoria='Toilette' AND province.province='Milano' AND stato_annuncio.stato_annuncio='attivo' AND priorytyid ORDER BY priorytyid DESC, id_annunci DESC LIMIT ".$inizio.",".$max) or die (mysql_error());




while ($row = mysql_fetch_array($obj_titolo)) {

if (mysql_fetch_array($row) == '0' ){
       echo "non ci sono annunci"; 
    }else{ 
       echo "ci sono annunci"; 
     

$click_annuncio = $row['click_annuncio'];
$id_annunci = $row['id_annunci'];
$user_id = $row['id'];

  $messaggio = substr($row['messaggio'], 0, 200);
  $mq = $row['mq'];
  $tipologia = $row['tipologia'];
  $categoria = $row['categoria'];
  $regione = $row['regione'];
  $province
 
per prima cosa togli tutte le @ dalle istruzioni sql, esempio "@mysql_query(" e tutte le altre dove presente
quel carattere anteposto nasconde gli errori generati dall'istruzione
poi controlla
l'ultima "AND" perché non è specificata bene e la query sicuramente è errata
PHP:
WHERE tipologia.tipologia='Cani'
AND categoria.categoria='Toilette'
AND province.province='Milano'
AND stato_annuncio.stato_annuncio='attivo'
AND priorytyid
ORDER BY priorytyid DESC, id_annunci DESC LIMIT ".$inizio.",".$max)
or die (mysql_error());

quando posti ancora per un errore, indica anche l'errore che leggi nel log di php
 
Ultima modifica di un moderatore:
l'ultima "AND" perché non è specificata bene e la query sicuramente è errata
Codice:
WHERE tipologia.tipologia='Cani'
AND categoria.categoria='Toilette'
AND province.province='Milano'
AND stato_annuncio.stato_annuncio='attivo'
AND priorytyid
ORDER BY priorytyid DESC, id_annunci DESC LIMIT ".$inizio.",".$max)
or die (mysql_error());


questa funziona correttamente :) per la chiocciola ok la tolgo

per quanto riguarda non mi a errori semplicemente non mi restituisce l'errore non ci sono annunci e si blocca lo script, mentre invece se ci sono da ci sono annunci e mi estrae i risultati.
 
Giorno a tutti.... mi spiace che ti dia errore, ma l'output a me esce, comunque non è un problema, anzi motivo di approfondimento.

Ho provato a replicare il tuo DB con dei dati di prova, ed il risultato è questo:

Linea 48 della classe:
PHP:
$this->conn->set_free_query(QUERY_CONTA_GENERALE);
Linea 68 della classe:
PHP:
$this->conn->set_free_query(QUERY_GENERALE.' LIMIT '.$this->current_page.','.$this->max_page);


File sql contenente le due query:
PHP:
$query_brutale='SELECT
  test_pompe_pompe.id,
  test_pompe_pompe.pompe_title,
  test_pompe_priority.priority,
  test_pompe_province.provincia,
  test_pompe_categorie.category,
  test_pompe_regione.regione
FROM test_pompe_pompe
  INNER JOIN test_pompe_categorie
    ON test_pompe_pompe.pompe_categoria = test_pompe_categorie.id
  INNER JOIN test_pompe_priority
    ON test_pompe_pompe.pompe_prioryty = test_pompe_priority.id
  INNER JOIN test_pompe_province
    ON test_pompe_pompe.pompe_province = test_pompe_province.id
  INNER JOIN test_pompe_regione
    ON test_pompe_pompe.pompe_regione = test_pompe_regione.id ORDER BY test_pompe_pompe.id';

$query_conta_brutale='SELECT
  count(test_pompe_pompe.id) as num
FROM test_pompe_pompe
  INNER JOIN test_pompe_categorie
    ON test_pompe_pompe.pompe_categoria = test_pompe_categorie.id
  INNER JOIN test_pompe_priority
    ON test_pompe_pompe.pompe_prioryty = test_pompe_priority.id
  INNER JOIN test_pompe_province
    ON test_pompe_pompe.pompe_province = test_pompe_province.id
  INNER JOIN test_pompe_regione
    ON test_pompe_pompe.pompe_regione = test_pompe_regione.id';

define('QUERY_GENERALE',$query_brutale);
define('QUERY_CONTA_GENERALE',$query_conta_brutale);

Inizializzazione e recupero risultati:
PHP:
$page=0;
if(isset($_GET['page'])){
    $page=intval($_GET['page']);
}
$paginazione=new Paginazione_Dir($page);
print_r($paginazione->result);
Va da se che in questo caso non ho messo clausole where che potresti aggiungere tranquillamente tu....
In definitiva l'output da te desiderato viene gestito tutto qui, e senza errore, naturalmente se non ti funziona spiegami dove si ferma e cerco di capire meglio il motivo.
Se continui con il tuo codice, ti segnalo che sarebbe meglio utilizzare l'estensione mysqli, e caricare i dati direttamente con una sola iterazione:
PHP:
$conn=new mysqli('localhost','root','','test');
$result=$conn->query(QUERY_GENERALE)->fetch_all(1);
fetch_all(1) significa che carichi il risultato della query come array multidimensionale associativo, quindi non hai bisogno di iterare per recuperare i dati, quindi l'accesso al risultato è molto più veloce....
Buon lavoro
 

Allegati

  • pompe.png
    pompe.png
    113,5 KB · Visite: 480
Ultima modifica:
Generalizzando al massimo potresti provare a fare una cosa del genere:
PHP:
//nuova connessione
$conn=new mysqli('localhost','root','','test');
//ottiene tutti i risultati, e li memorizza nella variabile result
$result=$conn->query(INSERISCI LA TUA QUERY)->fetch_all(1);
PHP:
class New_Pompe {
  
    private $array=[];

    private $max_page=6;

    private $current_page=0;

    private $current_init=0;

    private $total_pages=0;

    public $template='';

    /**
     * New_Pompe constructor.
     *
     * @param array $ar Risultato query senza LIMIT
     * @param int $page Pagina iniziale richiesta
     */
    public function __construct($ar,$page=0) {
        $this->array=$ar;
        $this->total_pages=round(count($ar)/$this->max_page);
        $this->set_current_page($page);
    }


    public function set_current_page($page){
        $this->current_page=$page;
    }

    /**
     * Metodo per creare la paginazione esatta, nel caso in cui il valore sia invalido current init viene settato a 0
     */
    public function set_corret_page(){
        if($this->current_page>0){
            $this->current_init=$this->current_page*$this->max_page;
            ($this->current_init>=0 && $this->current_init<=$this->current_init)?null:$this->current_init=0;
        }
    }

    /**
     * Metodo per ottenere il tempalte sia popolato che il template Errore
     */
    public function get_template(){
        $filtered=array_slice($this->array,$this->current_init,$this->max_page);
        if(!empty($filtered)){
            foreach ($filtered as $items){
                $this->template.=$this->make_item_template($items);
            }
        }
        if(!empty($this->template)){
            echo $this->template;
            echo $this->append_paginazione();
        }else{
            echo $this->make_template_error();
        }

    }

    /**
     * Metodo per la costruzione dinamica del template
     * @param array $item Elemento associativo dell'array
     *
     * @return string
     */
    private function make_item_template($item){
        $tpl='<div class="row">';

        foreach ($item as $chiave=>$valore){
            $tpl.='<div class="col-md-3">'.$chiave.' - '. $valore.'</div>';
        }
        $tpl.='</div>';
        return $tpl;

    }

    /**
     * Metoto errore, elementi array vuoti
     * @return string
     */
    private function make_template_error(){
        return '<div class="row"><div class="col-md-12">ERRORE NESSUN RISULTATO TROVATO</div></div>';
    }
public function append_paginazione(){
   $str='';
   if($this->current_page<5){
      for($i=0;$i<6;$i++){
         $str.='<a href="?page='.$i.'">'.($i+1).'</a>';
      }
   }else{
      for($i=($this->current_page-3);$i<($this->current_page+3);$i++){
         $str.='<a href="?page='.$i.'">'.($i+1).'</a>';
      }
   }
   return $str;
}
}
La richiami in questo modo, così non utilizzi librerie esterne:
PHP:
$conn=new mysqli('localhost','root','','test');
$result=$conn->query(QUERY_GENERALE)->fetch_all(1);
$page=0;
if(isset($_GET['page'])){
    $page=intval($_GET['page']);
}
$pompe=new New_Pompe($result,$page);

//questa stampa a video i risultati!
$pompe->get_template();

In questo modo non dovresti impazzire, devi solo recuperare tutti gli item della query e passarla alla classe New_Pompe ed hai finito!
Spero sia utile!
 
Ultima modifica:
Ciao @macus_adi
grazie mille ancora una volta per la tua disponibilità :)

cerco di capire e imparare, quindi questa classe per la paginazzione che mi hai messo tu dovrei se non ho capito male integrarla dentro al mio script ?? ma come ?? sorry ma come ben avrai capito non sono un genio ripeto lo faccio per divertimento e imparo man mano ma certi meccanismi per me sono ancora difficili, in ogni caso prometto che ci provo e mi applicherò per fare quello che mi hai detto :)

tornando invece a monte si mi da ancora errore dopo ti mando un esempio e cosi capisci dove si blocca .
 
Allora, crea un file e copia all'interno il contenuto della Classe New_Pompe, fai la tua query senza inserire aggiungere il limit (lo gestisce la classe), ricordati che devi estrarre tutti i dati come ti ho detto sopra.
Una volta inclusa la classe nel tuo file la richiami in questo modo:
$page=0;
if(isset(
$_GET['page'])){
$page=intval($_GET['page']);
}

$pompe=new New_Pompe($result,$page);

//questa stampa a video i risultati!
$pompe->get_template();
Ripeto non aggiungere il limit nella query, per uno studio è abbastanza sufficiente, fino a 10000 record vai tranquillo!


New_Pompe(risultato array della query,numero di pagina corrente)
 

Discussioni simili