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

    Motore di ricerca per fascie di anno

    Salve, ho un database mysql dove sono inseriti dati riguardanti libri antichi.-
    Sapreste consigliarmi dove reperire info per realizzare in php un motore di ricerca per fascie di anno (menu a tendina) ?
    Es: libri antichi
    dal 1500 al 1600
    dal 1600 al 1700
    dal 1700 al 1800
    dal 1800 al 1900

    Grazie
    Pier Mario

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    select * from tabella where anno_pubblicazione between 'limite_inferiore' and 'limite_superiore'

  3. #3
    ma questo non va bene per menù a tendina ?

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    supponendo che salvi l'anno come intero e non come data
    <select name="fascia">
    <option value="1501 and 1600">dal 1501 al 1600</option>
    <option value="1601 and 1700">dal 1601 al 1700</option>
    <option value="1701 and 1800">dal 1701 al 1800</option>
    <option value="1801 and 1900">dal 1801 al 1900</option>
    </select>


    $query = "select * from tabella where anno_pubblicazione between $_POST[fascia] ";
    echo $query;

  5. #5
    Originariamente inviato da nicola75ss
    supponendo che salvi l'anno come intero e non come data
    <select name="fascia">
    <option value="1501 and 1600">dal 1501 al 1600</option>
    <option value="1601 and 1700">dal 1601 al 1700</option>
    <option value="1701 and 1800">dal 1701 al 1800</option>
    <option value="1801 and 1900">dal 1801 al 1900</option>
    </select>


    $query = "select * from tabella where anno_pubblicazione between $_POST[fascia] ";
    echo $query;
    magari prima di inserire un input dall'esterno dentro una query meglio processarlo adeguatamente, per evitare sql injection

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Si hai ragione, era solo per dargli un'idea del procedimento da seguire.

  7. #7
    Per intanto vi ringrazio per l'aiuto che mi state offrendo.-
    Premessa: in Mysql ho il database "libriantichicavallero_com" e la tabella "articoli" in cui è presente la colonna "ANNO" (varchar(22) in quanto a volte l'anno è ad es "1920-1921" o più lungo ancora).-
    Ho 1 file chiamato "search_fasciaanno.php":
    <?
    include("config.inc.php");

    $db = mysql_connect($db_host, $db_user, $db_password);
    if ($db == FALSE)
    die ("Errore nella connessione. Verificare i parametri nel file config.inc.php");
    mysql_select_db($db_name, $db)
    or die ("Errore nella selezione del database. Verificare i parametri nel file config.inc.php");
    ?>

    <form name "cerca3" method="post" action="result_fasciaanno.php">
    <input TYPE="hidden" NAME="submitted" VALUE="base_fasciaanno">

    <?
    $query = "SELECT * FROM `articoli` where `ANNO` between $_POST[FASCIAANNO] ";
    $esegui = mysql_query ($query,$db) or die ("Connessione non riuscita");
    $option="<select name=\"select_fasciaanno\">";
    $option.="<option>fascie di anno</option>";
    while ($array = mysql_fetch_array ($esegui)){

    $array[FASCIAANNO] = stripslashes($array[FASCIAANNO]);

    $option.="<option value=\"1501 and 1600\">dal 1501 al 1600</option>";
    $option.="<option value=\"1601 and 1700\">dal 1601 al 1700</option>";
    $option.="<option value=\"1701 and 1800\">dal 1701 al 1800</option>";
    $option.="<option value=\"1801 and 1900\">dal 1801 al 1900</option>";
    $option.="<option value=\"1901 and 2000\">dal 1901 al 2000</option>";

    }
    $option.="</select>";
    echo "$option";
    ?>




    <input TYPE="submit" ACTION="result_fasciaanno.php" VALUE="cerca" METHOD="get" NAME="search_fasciaanno">
    </form>

    <?
    mysql_close($db);
    ?>---------------------------------

    ed un altro file chiamato "result_fasciaanno.php":
    <?
    echo("<table border=\"1\">
    <tr>
    <td valign=\"top\" style=\"color:red\">N</td>
    <td valign=\"top\" style=\"color:red\">AUTORE</td>
    <td valign=\"top\" style=\"color:red\">TITOLO</td>
    <td valign=\"top\" align=\"center\" style=\"color:red\">ANNO</td>
    </tr>");

    $db = mysql_connect($db_host, $db_user, $db_password);
    if ($db == FALSE)
    die ("Errore nella connessione. Verificare i parametri nel file config.inc.php");
    mysql_select_db($db_name, $db)
    or die ("Errore nella selezione del database. Verificare i parametri nel file config.inc.php");

    $query = "SELECT * FROM `articoli` where `ANNO` between $_POST[FASCIAANNO] ";

    $result = mysql_query($query, $db) or die (mysql_error());

    // conteggia i risultati
    $num_righe=mysql_num_rows($result);
    echo"Ricerca per fascie di anno: {$_POST['select_fasciaanno']}
    ";
    echo"Risultati: $num_righe

    ";
    // fine

    while ($row = mysql_fetch_array($result))

    { echo("<tr><td valign=\"top\">$row[N]</td>
    <td valign=\"top\" align=\"left\">$row[AUTORE]</td>
    <td valign=\"top\" align=\"left\"><a href=\"view.php?N=$row[N]\" title=\"Dettagli\">$row[TITOLO]</a></td>
    <td valign=\"top\" align=\"right\">$row[ANNO]</td>
    </tr>"); }

    echo("</table>");

    mysql_close($db);
    ?>
    ---------------------------------
    Qualcosa non funziona ed a video mi da "connessione non riuscita", come mai ?

  8. #8
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Non ho guardato il codice ma se usi un campo varchar e ci metti dentro stringhe tipo 1920-1921 o altro come hai detto, allora la query che ti ho suggerito non va più bene. Bisognerebbe o che usassi due campi, uno nel formato che hai già più un campo intero nel quale metti solo 1 anno (ad esempio 1920) e che poi ti servirà per fare le ricerche o magari si può anche risolvere "castando" ad intero i primi 4 caratteri del campo varchar. Ma forse la prima soluzione è preferibile. Attendi altri pareri.

  9. #9
    Direi che va molto bene la seconda soluzioni che mi hai prospettato e cioè:
    "castando" ad intero i primi 4 caratteri del campo varchar
    Attendo
    ciao

  10. #10
    mi sembra sbagliato l'approccio al problema.

    La tabella dei libri dovrebbe avere l'anno e non un range di valori ed essere il campo di tipo YEAR.

    il form riportera' solo l'anno iniziale della ricerca

    codice:
    $option.="<option value=\"1501\">dal 1501 al 1600</option>";
    $option.="<option value=\"1601\">dal 1601 al 1700</option>";
    $option.="<option value=\"1701\">dal 1701 al 1800</option>";
    $option.="<option value=\"1801\">dal 1801 al 1900</option>";
    $option.="<option value=\"1901\">dal 1901 al 2000</option>";
    la query:
    codice:
    select * from tabella
    where anno BETWEEN $anno_inizio AND $anno_inizio + 99
    Questa significa pure che (genericamente parlando) se la tabella non e' ben strutturata, poi ci si arrampica con dei workaround per farla funzionare ad ogni costo.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

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.