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

Achille610@

Utente Attivo
18 Apr 2017
75
0
6
50
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.343
91
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.343
91
48
IT/SW
Scusa, ho sbagliato il current_page, deve essere incrementato current_page=current_page*max_page...
 

Achille610@

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

marino51

Utente Attivo
28 Feb 2013
3.203
207
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.343
91
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!!! ;)
 

Achille610@

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

Achille610@

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

Achille610@

Utente Attivo
18 Apr 2017
75
0
6
50
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.203
207
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:

Achille610@

Utente Attivo
18 Apr 2017
75
0
6
50
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.343
91
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: 417
Ultima modifica:

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
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:

Achille610@

Utente Attivo
18 Apr 2017
75
0
6
50
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.343
91
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
F Cerco Hosting con VECCHIE versioni di php Hosting 0
Cosina Captcha php PHP 1
S passare un valore da un form a un file .php con metodo post PHP 4
N php msyql PHP 6
N php problemi a visualizzare video PHP 3
A menu a tendina php PHP 1
D protezione cartelle: blocco visualizzazione/scaricamento contenuto, ma abilitazione utilizzo dati da parte di file .php presenti sul sito Web Server 1
F Php date_diff PHP 1
K [PHP] Aggiungere caratteri ad una stringa in base alla lunghezza della stessa PHP 2
C Wp-admin a file php WordPress 5
Lino80 [Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress Offerte e Richieste di Lavoro e/o Collaborazione 0
csi Inviare file jpg in locale alla stampante con php PHP 0
M Passaggio variabili array php su un tasto jq PHP 3
E Php aggiornamento tabella PHP 9
G phpmailer e php 8.1 con estensione mysqli PHP 6
M Invio dati database via email php PHP 0
K [php] Problema con inner join PHP 4
K [php]form invio dati PHP 0
P Codifica caratteri speciali mysql php PHP 0
K [PHP] Problema con variabili concatenate. PHP 1
E Stampante termica escpos-php PHP 6
JeiMax Modifica codice php personalizzato PHP 2
G Come modificare un pdf in php PHP 1
U Link a doppio file PHP PHP 0
E PHP & jQuery PHP 8
N Passare array da php a javascript PHP 5
F Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili PHP 20
L tipo boolean non funzionante su mariadb (mysql). E codice php 7.4. PHP 0
U PHP creare un file excel dopo ricerca nel DB PHP 0
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5
F Php e fatturazione elettronica PHP 0
P lanciare script asp (o php) da jquery Javascript 1
Couting95 inserire dati da un file di testo in una tabella in php PHP 1
P Data scraping in PHP non funziona PHP 4
C Calcoli matematici in php PHP 5
F Scrivere dei dati in word con php PHP 0
D PHP leggere cartella di Windows PHP 1
I dominio aruba versione php server linux Domini 3
G Colorare menu select attraverso ricerca php PHP 0
L PHP motore di ricerca nel sito PHP 1
S PHP e Mysqli PHP 0
Y Stampare da php su un foglio A6 attraverso una stampante esterna PHP 1
M Visulizzare immagine con php PHP 8
G [PHP] Creare script di prenotazione con controllo disponibilità. PHP 7

Discussioni simili