Pagina 1 di 11 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 103
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    464

    Motore di ricerca con piu filtri

    Ciao a tutti, ho un’idea da realizzare ammetto abbastanza ambiziosa per le mie competenze ma non credo sia impossibile.
    Vorrei fare un motore di ricerca dei prodotti per un sito con database access che funzioni in questo modo.
    Mettere 10 menu a tendina, ognuno dei quali interroga il database su caratteristiche proprie del prodotto, tipo colore (colonna tabella db “Colore”), (colonna stessa tabella db “Peso”) peso, (colonna stessa tabella db “Forma”)forma, ecc ecc.
    Al selezionare di ognuna di queste vorrei che la pagina risultati.asp cominci a restituire il risultato ed ovviamente se si seleziona una seconda opzione
    continui ad applicare filtri alla prima … e così via fino alle 10 opzioni.
    Ovviamene con relativa paginazione dei risultati ecc.
    Potete essere così gentili da indirizzarmi nel lavoro?
    Ci sono diversi codici già disponibili ma non ho trovato quello che fa al caso mio.
    Grazie in anticipo del vostro aiuto.

  2. #2
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    Devi costruire una query dinamica aggiungendo i filtri nella WHERE solo dei menu a tendina compilati. Esempio:
    codice:
    txt = ""
    if cerca_testo &"[]" <> "[]" then
    if txt &"[]" <> "[]" then txt = txt &" AND "
    txt = txt &"(tnews.news_titolo LIKE '%"& cerca_testo &"%' OR tnews.news_testo LIKE '%"& cerca_testo &"%')"
    end if
    if news_stato &"[]" <> "[]" then
    if txt &"[]" <> "[]" then txt = txt &" AND "
    txt = txt &"tnews.news_stato = "& news_stato &""
    end if
    if txt <> "" then txt = " WHERE "& txt &""
    
    
    sql = "SELECT * FROM tnews"
    sql = sql & txt
    Roby

  3. #3
    per risparmiare qualche if si può costruire la prima select così

    SELECT colonne FROM tabella WHERE 1=1

    e poi aggiungere il resto sempre via AND


  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    464
    Grazie Roby ed Optime:

    in pratica ogni scelta che si fa dal menù a tendina questa va a compilare la WHERE della query.


    Quindi 1° menu a tendina:

    <select name="continente">
    <OPTION value="">Per continente</OPTION>
    <OPTION value="1">Europa</OPTION>
    <OPTION value="2">America</OPTION>
    <OPTION value="3">Africa</OPTION> e così via...

    COME PASSO PRATICAMENTE LA SCELTA DI SOPRA NELLA QUERY SOTTO? E DEVO FARE TUTTO NELLA STESSA PAGINA?

    Volendo cercare solo con 5 menù avremo:

    sql = "SELECT colonna1,colonna2,colonna3,colonna4,colonna5 FROM tabella WHERE 1=1 AND colonna1 Like '%" & continente & "%' AND colonna2 like '%" & stato & "%' AND colonna3 like '%" & regione & "%' AND colonna4 LIKE '%"& comune &"%' AND colonna5 LIKE '%" & strada & "%' ORDER BY colonna1"

    GIUSTO?
    E POI OVVIAMENTE DOPO LA RESTITUZIONE DEL PRIMO RISULTATO SCEGLIENDO L'OPZIONE DAL SECONDO MENU' A TENDINA BISOGNA METTERE QUALCHE COSA PER IL RELOAD?

    GRAZIE ANCORA PER LA VOSTRA DISPONIBILITA'

  5. #5
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    Devi fare la request di tutti i campi.
    E' meglio se cominci passando i dati ad un'altra pagina.

    Roby

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    446
    Ciao,
    puoi fare in questo modo...
    da qualche parte nella pagina :

    codice:
    <form name="ricerca" method="get" action="ricerca.asp">
    <select name="opzione1">
    <option value="1" <% if opzione1 = 1 then Response.Write "selected" end if%>>...</option>
    <option value="2" <% if opzione1 = 2 then Response.Write "selected" end if%>>...</option>
    </select>
    <select name="opzione2">
    <option value="1" <% if opzione2 = 1 then Response.Write "selected" end if%>>...</option>
    <option value="2" <% if opzione2 = 2 then Response.Write "selected" end if%>>...</option>
    </select>
    <select name="opzione3">
    <option value="1" <% if opzione3 = 1 then Response.Write "selected" end if%>>...</option>
    <option value="2" <% if opzione3 = 2 then Response.Write "selected" end if%>>...</option>
    </select>
    ...
    </form>
    sempre nella stessa pagina, all'inizio :

    codice:
    opzione1 = Request("opzione1")
    opzione2 = Request("opzione2")
    opzione3 = Request("opzione3")
    ...
    e poi quando devi costruire la query ...

    codice:
    sql = "Select * from tabella where 1=1 "
    if opzione1 <>"" then
     sql = sql & " and campo1 = " & opzione1
    end if
    if opzione2 <> "" then
    sql = sql & " and campo2 = " & opzione2
    end if
    ...
    sql = sql & " order by nomecampo"
    Quando devi passare alla pagina 2....

    codice:
    Pagina 2
    Con questo dovresti essere in grado di proseguire da solo.
    Unica nota... mi raccomando a controllare bene i campi che prelevi dalla querystring. Alcuni simpaticoni potrebbero iniettare sql in modo da farti brutti scherzi sul db.

    Ciao
    Veloce,Affidabile,Economico : Scegline 2

    Se la tua ragazza non te la da, tu non prendertela

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    464
    Grazie ancora,
    quindi sia Roby che Saucer dite che metto nella pagina 1 i menù e poi passo alla pagina 2 le options ed ovviamente la query la faccio nella pagina 2. Così facendo però non posso ottenere quello che volevo, cioè alla prima option scelta dall'utente dovrebbe già caricare i risultati e poi man mano che ne sceglie un'altra affinare sempre di piu la ricerca. Ho capito bene che in questo modo non è possibile fare tipo un reload in automatico dei risultati?

    Per quanto riguarda invece le SQL injection avevo già letto da piu parti dei doppi apici ecc ecc ma in questo caso come lo eviterei?

    Il resto sembra essere tutto abbastanza chiaro.
    Thanks

  8. #8
    devi fare tutto nella stessa pagina. visto che le scelte sono tutte da select, non preoccuparti della sql injection (a meno che tu non ti saboti da solo )

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    446
    Tutto in un'unica pagina "ricerca.asp"

    Per l'sql injection invece, se utilizza il mio metodo, dovrebbe starci attento, in quanto basterebbe che un utente smaliziato, vada a fare una ricerca e prendendo ad esempio l'url :

    codice:
    ricerca.asp?opzione1=1&opzione2=1.......
    e modificandolo leggermente in :

    codice:
    ricerca.asp?opzione1=1;querydidistruzionedimassa....&opzione2=1.......
    si ritroverebbe con un db stramazzato...

    Per un minimo di sicurezza, basta andare a utilizzare il seguente codice quando va a richiamare le variabili :

    codice:
    opzione1 = Request("opzione1")
    if not isnull(opzione1) then
    opzione1 = Replace(opzione1,"'","''")  ' Fare attenzione al carattere ' presente nella replace....bisogna sostituire il singolo apice con 2 singoli apici
    end if
    Veloce,Affidabile,Economico : Scegline 2

    Se la tua ragazza non te la da, tu non prendertela

  10. #10
    Utente di HTML.it L'avatar di lucalicc
    Registrato dal
    Sep 2002
    Messaggi
    6,926
    nel codice della select aggiugi questo
    Codice PHP:
    onChange="document.form1.submit()" 
    in modo che ti ricarichi la pagina.
    nella stessa pagina metti il codice che ti costruisce la query
    e degli if per selezionare i valori delle varie select
    in questo modo per ogni variazione delle select la pagina
    viene ricaricata e la query estrae i relativi record e li mostra in tempo reale.
    Per evitare il ricaricamento di tutta la pagina dovresti fare tutto con ajax
    ma in questo caso non ti posso essere di grande aiuto.
    luca
    www.intheweb.it - Internet solutions

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 © 2026 vBulletin Solutions, Inc. All rights reserved.