[PHP] Problema paginazione motore di ricerca

Sono ripartito da qui, che tra l'altro in un'altro sito mi funzionava correttamente (qui non capisco che succede)

PHP:
<?php
 if(!isset($_SESSION)){session_start ();}

if(isset ($_POST['aid'])){  
    $_SESSION['aid']=$_POST['aid'];
}
 
if(isset ($_POST['bid'])){  
    $_SESSION['bid']=$_POST['bid'];
}


 ?>




<!DOCTYPE html>
<!--[if IE 7]>
<html class="ie ie7 no-js" lang="en-US">
<![endif]-->
<!--[if IE 8]>
<html class="ie ie8 no-js" lang="en-US">
<![endif]-->
<!--[if !(IE 7) | !(IE 8)  ]><!-->
<html lang="en" class="no-js">
<head>
    <!-- Basic need -->
    <title>onoranze pompe funebri</title>


.....................................

 <?php
class MySQL{    
    function MySQL()    
    {    
        require_once "db_connect.php";  //metti l'once
    }    
}
$eid = $_POST['aid'];
    $bid = $_POST['bid'];
$data = new MySQL();  
if(isset ($_POST['cerca_c'])){
    $_SESSION['cerca_c']=$_POST['cerca_c'];
}
$cerca_a = mysql_escape_string(stripslashes($_SESSION['cerca_c']));
if (strlen($_SESSION['cerca_c']) < 1 && $_SESSION['aid'] == "" && $_SESSION['bid'] == "" ) {
echo "dati inseriti non validi";
    //e qui il ritorno alla pagina di inserimento o a quella che ti fa più piacere
}  else{
  $q = "SELECT * FROM pompe
         INNER JOIN tipologia ON (pompe.tipologiaid=tipologia.id )
         INNER JOIN provincia ON (pompe.provinciaid=provincia.id )
                           WHERE 1=1 ";
if($cerca_a != "") {
$q.= " &&  (id_annunci LIKE '%$cerca_a%'  OR messaggio LIKE '%$cerca_a%' OR cittas LIKE '%$cerca_a%' OR name LIKE '%$cerca_a%'  )";
}
if($aid != "") {
$q.= " && tipologia.id = '$aid'";
}
if($eid != "") {
$q.= " && provincia.id = '$bid'";
}

     $q = mysql_query($q) or die (mysql_error()) ;
    $count=mysql_num_rows($q);
    if($count == 0){
        echo "Non ci sono risultati con la tua ricerca. Prova a cambiare la parola chiave";
        //e qui il ritorno alla pagina di inserimento o a quella che ti fa più piacere es. registrati
    }else{
        //visto che ci sono dati inserisci anche la paginazione
        require_once "paginazione.php";//metti l'once
        $p = new Paging;
        $max = 10;
        // identifichiamo la pagina da cui iniziare la numerazione
        $inizio = $p->paginaIniziale($max);
        // troviamo il numero delle pagine che dovrà essere contato
        $pagine = $p->contaPagine($count, $max);
        $lim="LIMIT $inizio, $max";
        $sq_lim=$q.$lim;//ripetere lo stesso codice uguale è sempre cattiva programmazione
        $risultato=mysql_query($sq_lim);
     
        while($row=mysql_fetch_array($q)){  
            $click_annuncio = $row['click_annuncio'];
$id_annunci = $row['id_annunci'];
$user_id = $row['id'];
    $cittas = $row['cittas'];
  $messaggio = substr($row['messaggio'], 0, 25);
  $nome_file = $row['nome_file'];
  $tipo_file = $row['tipo_file'];
  $dati_file = $row['dati_file'];

 
            //cosa ci sta a fare in mezzo a una table <p class='three'> eventualmente la class dalla al td o al tr
            //tra l'altro non c'è la chiusura del tag </p>
            //poi c'è una chiusura </table> nel mezzo (quindi hai messo due chiusure e una sila apertura) e
            //ci sono dei tr non aperti ma solo chiusi
echo "  <p><a href=\"risultato-onoranze.php?id=$id_annunci\"/><img src='immagini2ricette.php?id_annunci=$id_annunci' name='$nome_file' alt'$nome_file' title='$titolo' class='img-responsive'  /></a></p>";
            echo "<a href=\"risultato-onoranze.php?id=$id_annunci\"/>$titolo</a><br /><br /> ";
            echo "<h5>$messaggio ...</h5><br />";
}

        $lista = $p->listaPagine($_GET['p'], $pagine);
        echo "<tr><td colspan=\"3\">";
        echo "$lista . <br>";
          $navigatore = $p->precedenteSuccessiva($_GET['p'], $pagine);
         echo $navigatore;
        echo "</td></tr>";
        echo"</table></h5>";
    }//fine if-else ci sono dati
}//fine if-else post giusto
?>


se vuoi ti mando in pvt la url e cosi vedi che succede, nel senso:
I risultati della prima pagina tutto ok, si forma la paginazione mi trova 2 pagine di risultati ecc ecc, come vado nelle seconda pagina /cerca_c.php?p=2 al posto di darmi i risultati solo fi quella provincia me li tira fuori tutti e mi forma la paginazione di tutte i risultati del sito.
Tra l'altro non capisco il perché ma il problema forse è nella parte della paginazione, perchè io metto il limit a 10 invece mi vengono fuori circa 25 annunci nella prima pagina,
 
ciao
prova a parte questo stupido script senza paginazione
PHP:
<?php
$conn = mysqli_connect($host,$username,$password, $db) or die (mysql_error());//metti i tuoi dati di connessione
$q ="SELECT * FROM mio
         INNER JOIN tipologia ON (mio.tipologiaid=tipologia.id )
         INNER JOIN provincia ON (mio.provinciaid=provincia.id )
         INNER JOIN users ON (pompe.user_id=users.id) WHERE 1=1 ";

$ris=mysql_query($conn, $q);
echo mysqli_num_rows($ris)."<br>";
while($riga=mysqli_fetch_assoc($ris)){
    echo $riga['pompe.id_annunci']."<br>";//prova anche con $riga['id_annunci']
}
?>
se non ti da nulla probabilmente l'errore è nella querystringa $q
prova anche a correggere la $q in
$q ="SELECT pompe.* FROM mio....
e riprova

poi sto guardando come modificare meglio la $q

dimenticavo si passa l'url
 
Ciao si penso che il problema sia nel $q cosi mi da sempre pagina bianca anche cosi $riga['id_annunci']
 
Ciao,
mio non esiste l'avevo messo all'inizio solo per mettere un nome, in realtà come anche nello script che avevi fatto la tabella principale è pompe.

di seguito le tabelle:

PHP:
Tpologia

CREATE TABLE `tipologia` (
  `id` int(11) NOT NULL,
  `tipologia` varchar(200) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Dump dei dati per la tabella `tipologia`
--

INSERT INTO `tipologia` (`id`, `tipologia`) VALUES
(3, 'onoranze-pompe');


provincia

CREATE TABLE `provincia` (
  `id` int(20) NOT NULL,
  `provincia` varchar(250) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Dump dei dati per la tabella `provincia`
--

INSERT INTO `provincia` (`id`, `provincia`) VALUES
(1, '--Abruzzo--'),
(2, 'Chieti'),
(3, 'L-Aquila'),
(4, 'Pescara'),
(5, 'Teramo'),
(6, '--Basilicata--'),
(7, 'Matera'),
(8, 'Potenza'),

Pompe

CREATE TABLE `pompe` (
  `id_annunci` int(20) NOT NULL,
  `titolo` varchar(300) NOT NULL,
  `messaggio` text NOT NULL,
  `cittas` varchar(250) NOT NULL,
  `via` varchar(200) NOT NULL,
  `tria` varchar(250) NOT NULL,
  `caps` varchar(200) NOT NULL,
  `telefonos` varchar(250) NOT NULL,
  `nome_file2` varchar(400) NOT NULL,
  `tipo_file2` varchar(400) NOT NULL,
  `dati_file2` longblob NOT NULL,
  `sitoweb` varchar(200) NOT NULL,
  `mobile` varchar(200) NOT NULL,
  `fax` varchar(200) NOT NULL,
  `mail` varchar(200) NOT NULL,
  `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `user_id` int(11) NOT NULL,
  `click_annuncio` int(11) NOT NULL,
  `regioneid` int(11) NOT NULL,
  `tipologiaid` int(11) NOT NULL,
  `provinciaid` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


Users

CREATE TABLE `users` (
  `id` int(10) NOT NULL,
  `username` varchar(50) NOT NULL,
  `password` varchar(50) NOT NULL,
  `nome` varchar(200) NOT NULL,
  `cognome` varchar(200) NOT NULL,
  `telefono` varchar(50) NOT NULL,
  `email` varchar(100) NOT NULL,
  `web_site` varchar(200) NOT NULL,
  `regiones` varchar(50) NOT NULL,
  `provincia` varchar(50) NOT NULL,
  `comune` varchar(50) NOT NULL,
  `cap` varchar(50) NOT NULL,
  `stato` varchar(50) NOT NULL,
  `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `attivo` enum('0','1','2','3') NOT NULL DEFAULT '1',
  `level` enum('1','2','3') NOT NULL DEFAULT '1',
  `societa` varchar(50) NOT NULL,
  `p_iva` varchar(100) NOT NULL,
  `note` varchar(500) NOT NULL,
  `nome_file_vero` varchar(255) NOT NULL,
  `tipo_file` varchar(255) NOT NULL,
  `dati_file` longblob NOT NULL,
  `via` varchar(50) NOT NULL,
  `titoli` enum('no','si') NOT NULL DEFAULT 'no',
  `gestione_portafogli` enum('no','si') NOT NULL DEFAULT 'no',
  `obbligazioni` enum('no','si') NOT NULL DEFAULT 'no',
  `profile_pic` varchar(200) NOT NULL,
  `id_fk` int(11) NOT NULL,
  `relationshipid` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

(1, '', 'prova ins', 'prova ins', 'prova ins', 'prova ins', 'prova ins', 'prova ins', 'prova ins', 'prova ins', 'prova ins', 'prova ins', 'prova ins', '2017-06-18 19:11:00', '0', '1', 'prova ins', 'prova ins', '', '', '', '', 'prova ins', 'no', 'no', 'no', '', 0, 0),
 
ciao
ribadisco NON vedo nelle tabelle la primarykey
poi un paio di osservazioni:
1) la tabella province è un po' un assurdo, dovresti scinderla in due tabelle
Codice:
CREATE TABLE regione (
  id int(3) NOT NULL autoincrement prymarykey,
 regione varchar(250) NOT NULL,
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


CREATE TABLE provincia (
  id int(3) NOT NULL autoincrement prymarykey,
  id_r int(2) NOT NULL,
  provincia varchar(250) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
in tab. province id_r lega la provincia alla regione di appartenenza
poi vedo che nella tabella pompe usi un campo tipo blob
dati_file2 longblob NOT NULL
lo usi per caricare delle immagini?
se si, a parte che ti fa venire un db enorme, la loro visualizzazione è una rogna (passare i vary header per foto e testo)
ti conviene se sono immagine caricarle in una cartella come jpg o png o gif e usare il loro nome con percorso per visualizzarle con il classico src="percorso/nome.immagine.jpg"

poi credo che tu debba ripensare un po' al tutto.
spiega bene (a parte la paginazione) cosa vuoi ottenere che riproviamo a ripartire da zero
 
Ciao,
ma io la tabella regione la ho già solo che in fase di caricamento dell'annuncio devono inserire regione e provincia, ma per ora la ricerca mi serve solo per provincia.

(anche perché non essendo bravissimo non riesco a far si che chekkando la regione, mi faccia scegliere solo le province di quella regione)

Per le immagini si uso questo sistema, perché tempo fa provai a richiamarle dalla cartella come dici tu, ma il problema era sempre in fase di inserimento se 2 mettevano la foto con lo stesso nome, mi sovrascriveva l'immagine e quindi non era corretto.

Quello che mi serve al momento è un motore di ricerca che in base a tipologia e provincia, oppure nella barra editabile con il nome della città o nome del negozio tiri fuori i dati, che in realtà il primo script che ti ho mandato lo fa correttamente, ma perde i dati nella seconda pagina.
 
ciao
per la selzione regione/provincia dai un occhio a
https://forum.mrw.it/threads/select-dinamiche-regioni-province-comuni.36007/
anche perche nella tapella provincie quel
Codice:
1, '--Abruzzo--'),
è un assurdo (analogo quando scrivi i nomi di altre regioni)

per i nomi delle immagini o gli dai un nome in automatico al caricamento es. mettendo il time() del momnento in cui le carichi e prima verifichi se il file esiste già e se si chiedi di cambiare nome
es. con time
PHP:
$nome_immagine_da_caricare=time().$_FILES['file']['name'];
poi se il primo script funzionava per la pag 1 mentre per la 2 ti mostrava tutti i record forse ho capito il problema
ti mostro solo il primo poi modifichi gli altri
PHP:
//....
if($cerca_c != "") {
    $q.= " &&  (id_annunci LIKE '%$cerca_c%' OR cittas LIKE '%$cerca_c%' OR titolo LIKE '%$cerca_c%' OR messaggio LIKE '%$cerca_c%'  )";
}
//....
quando passi alla pagina 2 $cerca_a probabilmente diventa vuoto quindi non rimane solo la query totale, prova a modificare
PHP:
//....
if($cerca_c != "" || isset($_SESSION['cerca_c'])) {
    if(isset($_SESSION['cerca_c'])) $cerca_c=$_SESSION['cerca_c'];
    $q.= " &&  (id_annunci LIKE '%$cerca_c%' OR cittas LIKE '%$cerca_c%' OR titolo LIKE '%$cerca_c%' OR messaggio LIKE '%$cerca_c%'  )";
}
//....
 
Nada sempre dati inseriti non validi ... spero di aver capito bene dove mettere;


PHP:
if($cerca_c != "" || isset($_SESSION['cerca_c'])) {
    if(isset($_SESSION['cerca_c'])) $cerca_c=$_SESSION['cerca_c'];
    $q.= " &&  (id_annunci LIKE '%$cerca_c%' OR cittas LIKE '%$cerca_c%' OR titolo LIKE '%$cerca_c%' OR messaggio LIKE '%$cerca_c%'  )";
}


PHP:
    <?php
class MySQL{    
    function MySQL()    
    {    
        require_once "db_connect.php";  //metti l'once
    }    
}
$aid = $_POST['aid'];
    $bid = $_POST['bid'];    
$data = new MySQL();  
 if($cerca_c != "" || isset($_SESSION['cerca_c'])) {
    if(isset($_SESSION['cerca_c'])) $cerca_c=$_SESSION['cerca_c'];
    $q.= " &&  (id_annunci LIKE '%$cerca_c%' OR cittas LIKE '%$cerca_c%' OR titolo LIKE '%$cerca_c%' OR messaggio LIKE '%$cerca_c%'  )";
}
$cerca_c=mysql_escape_string(stripslashes($_SESSION['cerca_c']));
if($cerca_c=="" || strlen($cerca_c)<2){
    echo "dati inseriti non validi";
    //e qui il ritorno alla pagina di inserimento o a quella che ti fa più piacere
}else{
    $q= ("SELECT * FROM pompe
     INNER JOIN tipologia ON (pompe.tipologiaid=tipologia.id )
     INNER JOIN provincia ON (pompe.provinciaid=provincia.id )
     INNER JOIN users ON (pompe.user_id=users.id)
        WHERE id_annunci LIKE '%$cerca_c%'  OR titolo LIKE '%$cerca_c%' OR messaggio LIKE '%$cerca_c%' OR cittas LIKE '%$cerca_c%' ");
   
     $q = mysql_query($q) or die (mysql_error()) ;
    $count=mysql_num_rows($q);
    if($count == 0){
        echo "Non ci sono risultati con la tua ricerca. Prova a cambiare la parola chiave";
        //e qui il ritorno alla pagina di inserimento o a quella che ti fa più piacere es. registrati
    }else{
        //visto che ci sono dati inserisci anche la paginazione
        require_once "paginazione.php";//metti l'once
        $p = new Paging;
        $max = 5;
        // identifichiamo la pagina da cui iniziare la numerazione
        $inizio = $p->paginaIniziale($max);
        // troviamo il numero delle pagine che dovrà essere contato
        $pagine = $p->contaPagine($count, $max);
        $lim="LIMIT $inizio, $max";
        $sq_lim=$q.$lim;//ripetere lo stesso codice uguale è sempre cattiva programmazione
        $risultato=mysql_query($sq_lim);
     
        while($row=mysql_fetch_array($q)){  
            $click_annuncio = $row['click_annuncio'];
$id_annunci = $row['id_annunci'];
$user_id = $row['id'];
  $messaggio = substr($row['messaggio'], 0, 25);
      $titolo = $row['titolo'];
  $cittas = $row['cittas'];
       
 
   $nome_file = $row['nome_file'];
  $tipo_file = $row['tipo_file'];
  $dati_file = $row['dati_file'];
 
   
            //cosa ci sta a fare in mezzo a una table <p class='three'> eventualmente la class dalla al td o al tr
            //tra l'altro non c'è la chiusura del tag </p>
            //poi c'è una chiusura </table> nel mezzo (quindi hai messo due chiusure e una sila apertura) e
            //ci sono dei tr non aperti ma solo chiusi
          echo "  <p><a href=\"risultato-onoranze.php?id=$id_annunci\"/><img src='immagini2ricette.php?id_annunci=$id_annunci' name='$nome_file' alt'$nome_file' title='$titolo' class='img-responsive'  /></a></p>";
        echo "<a href=\"risultato-onoranze.php?id=$id_annunci\"/>$titolo</a><br /><br /> ";
        echo "<h5>$messaggio ...</h5><br />";

}

        $lista = $p->listaPagine($_GET['p'], $pagine);
        echo "<tr><td colspan=\"3\">";
        echo "$lista . <br>";
          $navigatore = $p->precedenteSuccessiva($_GET['p'], $pagine);
         echo $navigatore;
        echo "</td></tr>";
        echo"</table></h5>";
    }//fine if-else ci sono dati
}//fine if-else post giusto
?>


cosi invece me li entrare, ma la seconda pagina perde sempre i risultati :(

PHP:
 <?php
class MySQL{     
    function MySQL()     
    {     
        require_once "db_connect.php";  //metti l'once 
    }     
}
$aid = $_POST['aid']; 
    $bid = $_POST['bid']; 
$data = new MySQL();   
if(isset ($_POST['cerca_c'])){ 
    $_SESSION['cerca_c']=$_POST['cerca_c']; 
} 
$cerca_c = mysql_escape_string(stripslashes($_SESSION['cerca_c']));
if (strlen($_SESSION['cerca_c']) < 1 && $_SESSION['aid'] == "" && $_SESSION['bid']  == "" ) { 
echo "dati inseriti non validi";
    //e qui il ritorno alla pagina di inserimento o a quella che ti fa più piacere 
}  else{ 
  $q = "SELECT * FROM pompe 
     INNER JOIN tipologia ON (pompe.tipologiaid=tipologia.id )
     INNER JOIN provincia ON (pompe.provinciaid=provincia.id )
     INNER JOIN users ON (pompe.user_id=users.id)
                           WHERE 1=1 ";
                           if($aid != "") {
$q.= " && tipologiaid = '$aid'";
}
if($bid != "") {
$q.= " && provinciaid = '$bid'";
}
if($cerca_c != "" || isset($_SESSION['cerca_c'])) {
    if(isset($_SESSION['cerca_c'])) $cerca_c=$_SESSION['cerca_c'];
    $q.= " &&  (id_annunci LIKE '%$cerca_c%' OR cittas LIKE '%$cerca_c%' OR titolo LIKE '%$cerca_c%' OR messaggio LIKE '%$cerca_c%'  )";
}


 
     $q = mysql_query($q) or die (mysql_error()) ; 
    $count=mysql_num_rows($q);
    if($count == 0){ 
        echo "Non ci sono risultati con la tua ricerca. Prova a cambiare la parola chiave"; 
        //e qui il ritorno alla pagina di inserimento o a quella che ti fa più piacere es. registrati 
    }else{ 
        //visto che ci sono dati inserisci anche la paginazione 
        require_once "paginazione.php";//metti l'once 
        $p = new Paging; 
        $max = 6; 
        // identifichiamo la pagina da cui iniziare la numerazione 
        $inizio = $p->paginaIniziale($max); 
        // troviamo il numero delle pagine che dovrà essere contato 
        $pagine = $p->contaPagine($count, $max); 
        $lim="LIMIT $inizio, $max"; 
        $sq_lim=$q.$lim;//ripetere lo stesso codice uguale è sempre cattiva programmazione 
        $risultato=mysql_query($sq_lim); 
      
 while($row=mysql_fetch_array($q)){   
            $click_annuncio = $row['click_annuncio']; 
$id_annunci = $row['id_annunci']; 
$user_id = $row['id'];
  $messaggio = substr($row['messaggio'], 0, 25); 
      $titolo = $row['titolo']; 
  $cittas = $row['cittas'];
        
  
   $nome_file = $row['nome_file'];
  $tipo_file = $row['tipo_file'];
  $dati_file = $row['dati_file'];
  
    
            //cosa ci sta a fare in mezzo a una table <p class='three'> eventualmente la class dalla al td o al tr
            //tra l'altro non c'è la chiusura del tag </p>
            //poi c'è una chiusura </table> nel mezzo (quindi hai messo due chiusure e una sila apertura) e
            //ci sono dei tr non aperti ma solo chiusi
          echo "  <p><a href=\"risultato-onoranze.php?id=$id_annunci\"/><img src='immagini2ricette.php?id_annunci=$id_annunci' name='$nome_file' alt'$nome_file' title='$titolo' class='img-responsive'  /></a></p>";
        echo "<a href=\"risultato-onoranze.php?id=$id_annunci\"/>$titolo</a><br /><br /> ";
        echo "<h5>$messaggio ...</h5><br />";

} 

        $lista = $p->listaPagine($_GET['p'], $pagine);
        echo "<tr><td colspan=\"3\">";
        echo "$lista . <br>";
          $navigatore = $p->precedenteSuccessiva($_GET['p'], $pagine); 
         echo $navigatore; 
        echo "</td></tr>";
        echo"</table></h5>";
    }//fine if-else ci sono dati
}//fine if-else post giusto
?>
 
Ultima modifica:

Discussioni simili