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

[email protected]

Utente Attivo
18 Apr 2017
75
0
6
47
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;
?>
 

macus_adi

Utente Attivo
5 Dic 2017
1.333
90
48
IT/SW
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!
 

macus_adi

Utente Attivo
5 Dic 2017
1.333
90
48
IT/SW
Scusa, ho sbagliato il current_page, deve essere incrementato current_page=current_page*max_page...
 

marino51

Utente Attivo
28 Feb 2013
3.036
192
63
Lombardia
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
 

macus_adi

Utente Attivo
5 Dic 2017
1.333
90
48
IT/SW
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!!! ;)
 

[email protected]

Utente Attivo
18 Apr 2017
75
0
6
47
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;
}
}
?>
 

[email protected]

Utente Attivo
18 Apr 2017
75
0
6
47
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:

[email protected]

Utente Attivo
18 Apr 2017
75
0
6
47
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
 

marino51

Utente Attivo
28 Feb 2013
3.036
192
63
Lombardia
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:

[email protected]

Utente Attivo
18 Apr 2017
75
0
6
47
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.
 

macus_adi

Utente Attivo
5 Dic 2017
1.333
90
48
IT/SW
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: 252
Ultima modifica:

macus_adi

Utente Attivo
5 Dic 2017
1.333
90
48
IT/SW
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:

[email protected]

Utente Attivo
18 Apr 2017
75
0
6
47
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 .
 

macus_adi

Utente Attivo
5 Dic 2017
1.333
90
48
IT/SW
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
Autore Titolo Forum Risposte Data
S [PHP] Difficoltà con costrutto if/else PHP 6
X [PHP] Problema if else PHP 23
Trapano [PHP] come impostare un if else PHP 10
bubino8 [PHP] esleif oppure else if PHP 4
elpirata Stabilire condizione if ed else in query php PHP 14
foki PHP errore T-ELSE PHP 3
G Invio form con PHP PHP 1
T fatture con voci fattura in php PHP 0
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
M Collegamento tra form html e script php PHP 4
M Problemi con la stampa dei valori in php PHP 1
W [Cerco collaborazioni] Sviluppatore Web (PHP) Offerte e Richieste di Lavoro e/o Collaborazione 1
D passare valori da database sql a php PHP 1
L Ricezione dei dati su file php da modulo html PHP 6
E Inviare variabile a PHP da ciclo in JS Javascript 0
A form PHP prenotazione tramite query PHP 2
A Form php prenotazione di un azienda sanitaria locale presso studio medico PHP 1
F menù select dinamico da db in php PHP 3
L Problemi form Pagina php HTML e CSS 3
L php mysql non salva solo id PHP 21
L php mysql cerca e visualizza pagina PHP 0
F Il codice php è giusto? PHP 2
R Aggiornare record mysql con Ajax, jQuery e php Ajax 2
A invio massivo dati a file php Javascript 4
Z MySql injection PHP PHP 1
V PHP form intersecate PHP 0
I [Offro][Retribuito] Programmatore Php Offerte e Richieste di Lavoro e/o Collaborazione 0
P Funzione jQuery Ajax invio file a php jQuery 1
C Dopo chiusura del tag php la stringa html va a capo PHP 1
E Transaction php PHP 11
B ciclare file xml con PHP PHP 1
L Estrazione dati php Database 6
A Aiuto per pagina php PHP 0
E Php select option e ajax PHP 23
I Aiuto php Dependent Lookup PHP 0
T arretramento versione PHP... PHP 3
D problema php mysql PHP 1
D problema php mysql PHP 1
E Barra di avanzamento codice PHP PHP 4
G creazione menu a tendina e invio a pagina php PHP 1
A inserire variabile php colore in div html PHP 2
Z Video protetto con PHP PHP 0
Z Problema di sincronizzazione PAYPAL con PHP PHP 1
I Eecuzione di javascript in ciclo foreach php. PHP 7
S Libreria PHP per creare file dwg o dxf PHP 0
A [cerco - retribuito] Sviluppatore Php freelance per progetti vari Offerte e Richieste di Lavoro e/o Collaborazione 2
L Google chart php mysql PHP 2
R Download file multipli da directory php PHP 0
F pagina dinamica PHP PHP 3
P Rimozione automatica url da sitemap.xml con PHP PHP 1

Discussioni simili