Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    Motore di ricerca e paginazione

    Ciao a tutti.
    Ho un motore di ricerca in php che dopo aver controllato delle condizioni fornisce il risultato.
    Il problema è che non riesco ad adattarlo alla grafica facendo si che mi fornisca solo 10 risultati per volta.
    Vi mostro il codice:

    codice:
    <form action="motore/risultati.php" method="post">
        <input name="stringa" type="text" size="35">
          <INPUT type=submit VALUE="Cerca" class="button">
      
    
       <select name="ordine">
               <option value="crescente">per data ascendente</option>
               <option value="decrescente" selected>per data decrescente</option>
       </select>
       <select name="criterio">
                  <option value="esatta" selected>stringa esatta</option>
                  <option value="tutte">tutte le parole</option>
                  <option value="almeno">almeno una parola</option>
       </select>
    </FORM>
    Il form sopra invia i dati a :

    codice:
    <?php
    include("../config/config.php");
    if(!$stringa or $stringa=="")
    {
    echo "<font face=\"arial\" size=\"2\">E' necessario specificare
     la/le parola/parole da cercare
    <a href=\"javascript:
    history.back()\">indietro</a></font>";
    exit();
    }
    if($ordine=="crescente") { $ord="ASC"; }
    elseif($ordine=="decrescente") { $ord="DESC"; }
    $cn=mysql_connect($dbserver,$dbuser,$dbpass);
    mysql_select_db($dbname,$cn);
     
    $sql="SELECT*, DATE_FORMAT(data, '%d.%m.%Y') as data2 FROM $table WHERE ";
     
    if($criterio=="esatta")
    {
    $sql.="testo LIKE '%$stringa%' ORDER BY id $ord";
    }
    elseif($criterio=="almeno")
    {
    $lista_parole=explode(" ",$stringa);
    for($i=0;$i<count($lista_parole);$i++)
    {
    $str.="testo LIKE '%$lista_parole[$i]%' OR ";
    }
    $str=substr($str,0,(strlen($str)-3));
    $sql.=$str." ORDER BY id $ord";
    }
    elseif($criterio=="tutte")
    {
    $lista_parole=explode(" ",$stringa);
    for($i=0;$i<count($lista_parole);$i++)
    {
    $str.="testo LIKE '%$lista_parole[$i]%' AND ";
    }
    $str=substr($str,0,(strlen($str)-4));
    $sql.=$str." ORDER BY id $ord";
    }
    $query=mysql_db_query($dbname,$sql);
    $num=mysql_num_rows($query);
    ?>
    <? 
    if($num<1) 
    { 
    echo "Nessun risultato trovato
    <a href=\"java script:history.back()\">indietro</a>"; 
    } 
    elseif($num>=1) 
    { 
    while($riga=mysql_fetch_array($query)) 
     
    { 
    $id = $riga["id"]; 
     
    echo "
    <a href=\"../leggi.php?id_leggi=$id\">".nl2br
    ($riga[titolo])."</a>
    $riga[data2]
    "; 
    } 
    } 
    mysql_close($cn); 
    ?>
    Come posso fare ?
    "La verità sarà sempre una bugia."

  2. #2
    aggiungi alla query:

    LIMIT 10,0

    e poi con la paginazione rifai la query con LIMIT 10,10 ecc...

    ovviamente i numeri devi gestirli con delle variabili...


    Ciao!

  3. #3
    Grazie per la risposta!
    Non so bene dove aggiungerlo... ho provato ma non conosco la sintassi... mi suggeriresti dove porre il LIMIT?
    Per non parlare di creare un comando che nel caso di risultati superiore 10 mi aggiunga il comando pagina avanti | pagina dietro...
    Mi aiuteresti?
    "La verità sarà sempre una bugia."

  4. #4
    UP
    Per favore non fatemi sentire una particella di sodio

    "La verità sarà sempre una bugia."

  5. #5
    Utente di HTML.it L'avatar di marco80
    Registrato dal
    May 2005
    Messaggi
    1,357
    il limit va alla fine . es.: where data ="" limit 0,10 prende dalla riga zero del db cioe' la prima fino alla 10cima.

    per la paginazione devi fare un lavoretto con una select magari. se il numero di risultati e' maggiore di 10, spunta la select con le pagina da 1 a quello che sono. devi fare i vari calcoli per capire quante sono. Pensaci un'po' su e prova.
    La vita e' uno switch();

  6. #6
    Si ma io ho

    codice:
    FROM $table WHERE
    seguito da un pò di condizioni...

    non funziona se metto LIMIT dopo WHERE...

    "La verità sarà sempre una bugia."

  7. #7
    posta la query completa!
    e il messaggio di errore!
    Ciao!

  8. #8
    Ho postato tutto sopra...
    Intendi questa?

    codice:
    $sql="SELECT*, DATE_FORMAT(data, '%d.%m.%Y') as data2 FROM $table WHERE ";
    if($criterio=="esatta")
    {
    $sql.="testo LIKE '%$stringa%' ORDER BY id $ord";
    }
    elseif($criterio=="almeno")
    {
    $lista_parole=explode(" ",$stringa);
    for($i=0;$i<count($lista_parole);$i++)
    {
    $str.="testo LIKE '%$lista_parole[$i]%' OR ";
    }
    $str=substr($str,0,(strlen($str)-3));
    $sql.=$str." ORDER BY id $ord";
    }
    etc. etc.etc... ...
    "La verità sarà sempre una bugia."

  9. #9

    la query con il limit già messo...
    Ciao!

  10. #10
    per postare la query fai
    echo $sql;
    e posta quello.

    Comunque, LIMIT da solo non fa la paginazione, ma si LIMITa (appunto) a mostrarti solo alcuni record.

    Esempio:
    SELECT * FROM tabella WHERE pippo = pluto LIMIT 5,10
    mostra 10 record a partire dal quinto.

    La paginazione è un altro paio di maniche: si tratta di impostare dinamicamente il LIMIT, e altre amenità.
    la pillola di guidoz sulla impaginazione dei risultati
    la pillola di darcas sull'impaginazione (ad oggetti)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.