• User Attivo

    motore di ricerca interno con asp e access

    salve a tutti, sto realizzando un sito che tratta di locali (ristoranti, pubs, disco,...) di una certa zona geografica.
    Il sito è diviso in categorie e le stesse sono suddivise per le provincie della zona.
    Vorrei creare un motore di ricerca interno al sito che possa utilizzare i seguenti criteri di ricerca:

    • campo parola chiave
    • campo select categoria
    • campo select località
      Il motore dovrebbe essere realizzato in asp + access.

    I risultati della ricerca dovrebbero dare una pagina contenente, per ciascun locale, di quella categoria, in quella località: logo, titolo, descrizione, riferimenti.

    Sapreste gentilmente indicarmi alcuni esempi di script a cui fare riferimento per la realizzazione?
    Per il momento ho solamente trovato script per motori semplici, senza la previsione di un modulo con campi select...

    Ringrazio in anticipo per il cortese aiuto.;)

    c.


  • Super User

    Se hai tutto nel db è facilissimo, qual'è la parte che non ti torna? Le select basta che metti un valore vuoto, e nella pagina che riceve i dati dalla form controlli se il vaolore è vuoto, se non lo è aggiungi alla query ad esempio ... ' and categoria ='' $ cvalore della select $'''


  • User Attivo

    Quoto in pieno cali1981 con dei semplici select riesci a realizzare il tutto.

    Ad ogni modo se puoi ti consiglio vivamente di utilizzare mySQL, fornisce infatti un sistema interno per le indicizzazioni (FullText).


  • User Attivo

    ciao e grazie per la risposta...

    Il procedimento logico credo di averlo capito: ponendo il caso di avere ad esempio nella select categorie "discoteca" e nella select località "localitaX" non devo fare altro che consultare la tabella del db ed individuare tutti i records che all'interno dei campi cat e loc abbiano "discoteca" e "localitaX".

    Poi dovrò far visualizzare i records trovati nella pagina dei risultati organizzandoli a mio piacere.

    Non avendo però moltissima dimestichezza con la scrittura del codice mi servirebbe qualche script di esempio per capirne l'ortografia giusta.

    ringrazio ancora.


  • User Attivo

    Ragazzi non avete null'altro da aggiungere?
    Eventualmente indicatemi degli esempi --> non mi servono per un banale copia ed incolla bensì per imparare.

    Grazie ancora.


  • Super User

    Ciao, per esempi di codice asp basta che cerchi su google, un esempio puoi trovarlo qui:

    webwizguide.com/kb/asp_tutorials/connecting_to_a_database.asp


  • User Attivo

    Rieccomi, ho sbirciato qualche script qua e la' ma riscontro dei problemi in partenza.

    Ho le due pagine:

    • index.asp (quella in cui è contenuto il motore di ricerca)
    • results.asp (quella che ospita i risultati della ricerca)

    Nel motore ho un campo "nome" più due select popolate che permettono la scelta di "categorie" e "località".

    Nella pagina results ho inserito il seguente codice:

     
    <%
    Dim conn
    Set conn = Server.CreateObject("ADODB.Connection")
    conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & server.MapPath("/mdb-database/dbf.mdb")
    Dim rs
    Set rs = Server.CreateObject("ADODB.Recordset") 
    %>
    <%
    nome=request.Form("nom")
    local=request.Form("loc")
    categ=request.Form("cat")
    rs.Open "SELECT * FROM categorie WHERE loc LIKE '%" & local & "%' AND cat LIKE '%" & categ & "%'", conn 
    %>
    
    

    Praticamente sia che io selezioni o meno dal motore una categoria e una località, nella pagina dei risultati mi fa vedere comunque tutti i records presenti nella tabella del db, anche quelli dunque che non corrispondono ai criteri di ricerca.

    Dove sbaglio?
    grazie


  • Super User

    Devi controllare se le select sono selezionate. Cioè, se tu permetti all'utente di inserire solo il campo nome, devi ocntrollare se le select sono valorizzate e solo in qul caso inserirle nella query. Se invece anche le due select sono obbligatorie, va bene così lo script (a aprte che manca nome ma immagino lo hai fatto per test). Prova a fr vedere cosa contengono local e categ e poi vedi cosa c'è che non va.


  • User Attivo

    ok, capisco la logica ma non saprei come fare questo tipo di controllo.


  • Super User

    lo fai con is null, cioè if(isnull(request.Form("nom")) ...


  • User Attivo

    ho risolto in questo modo ma sembra che ci sia qualcosa che ancora non funzioni come dovrebbe...

    posto il codice della pagina results.asp, quella cioè che ospita i risultati della ricerca.

     
    <%
    Dim sTemp
    Set conn = Server.CreateObject("ADODB.Connection")
    sTemp="DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & server.MapPath("/mdb-database/dbf.mdb")
    conn.Open sTemp
    %>
    <%
    nome=request.QueryString("nom")
    localita=request.QueryString("loc")
    categoria=request.QueryString("cat")
     
    if (request.QueryString("nom")<>"") then addedQuery=addedQuery+" AND nome LIKE '%" + nome + "%' "
    if (request.QueryString("loc")<>"") then addedQuery=addedQuery+" AND localita LIKE '%" + localita + "%' "
    if (request.QueryString("cat")<>"") then addedQuery=addedQuery+"AND categoria LIKE '%" + categoria + "%' "
    if nome="" AND localita="" AND categoria="" then
     errore="Devi selezionare almeno un criterio di ricerca!"
    end if
    %>
    <%
    Set ristorante = Server.CreateObject("ADODB.Recordset")
    ristorante.ActiveConnection = conn
    ristorante.Source = "SELECT * FROM operatori WHERE categoria='Ristoranti' " + addedQuery + " ORDER BY nome ASC"
    ristorante.CursorType = 0
    ristorante.CursorLocation = 2
    ristorante.LockType = 1
    ristorante.Open()
    %>
    <%
    Set pizzeria = Server.CreateObject("ADODB.Recordset")
    pizzeria.ActiveConnection = conn
    pizzeria.Source = "SELECT * FROM operatori WHERE categoria='Pizzerie' " + addedQuery + " ORDER BY nome ASC"
    pizzeria.CursorType = 0
    pizzeria.CursorLocation = 2
    pizzeria.LockType = 1
    pizzeria.Open()
    %>
     
    .........
     
    <%=errore%>
     
    .........
     
     <%if NOT ristorante.EOF OR NOT ristorante.BOF then%>
    ...
    <% while NOT ristorante.EOF %>
    ..........
    <%=ristorante.Fields.Item("nome").Value%>
    <%=ristorante.Fields.Item("desc_b").Value%>
    <% 
    ristorante.MoveNext
    Wend %>
    <%end if%>
    
    

    a seguire ho scritto lo stesso codice per mostrare i risultati di "pizzeria".

    Problemi:

    • se non seleziono nessun campo dal motore non mi da nessun codice <%errore%>
    • il motore mi da dei risultati solo se indico "categoria" e "località" mentre non mi da nulla se selezione uno solo dei campi select.
    • la pagina results contiene lo stesso motore per dare la possibilità agli utenti di fare altre ricerche ma il motore non funziona del tutto (ho usato in entrambi i motori il metodo "GET".

    Credo di aver fatto un po' di pasticci e vorrei sapere se possibile dove sto sbagliando e perchè.

    Ti ringrazio ancora per il tempo dedicatomi.
    Spero di venirne fuori.


  • Super User

    Innanzitutto dovresti inizializzare addedQuery a stringa vuota, addedQuery = "";


  • User Attivo

    in che parte del codice dovrei inizializzarlo?


  • Super User

    Prima che lo usi la prima volta.


  • User Attivo

    devo inizializzarla prima di

    
    if (request.QueryString("nom")<>"") then addedQuery=addedQuery+" AND nome LIKE '%" + nome + "%' "
    
    

    ma non so come scrivere correttamente il codice.


  • Super User

    credo sia addedQuery =""


  • User Attivo

    l'ho inserito così:

     
    <%
    nome=request.QueryString("nom")
    localita=request.QueryString("loc")
    categoria=request.QueryString("cat")
    addedQuery=""
    if (request.QueryString("nom")<>"") then addedQuery=addedQuery+" AND nome LIKE '%" + nome + "%' "
    if (request.QueryString("loc")<>"") then addedQuery=addedQuery+" AND localita LIKE '%" + localita + "%' "
    if (request.QueryString("cat")<>"") then addedQuery=addedQuery+"AND categoria LIKE '%" + categoria + "%' "
    if nome="" AND localita="" AND categoria="" then
     errore="Devi selezionare almeno un criterio di ricerca!"
    end if
    %>
    
    

    ma non mi cambia nulla....
    dalla index.asp in cui è contenuto il motore clicco su cerca senza selezionare alcun criterio e mi porta a results.asp ma non mi da il messaggio di errore.
    Quando poi in results.asp riclicco su cerca ancora senza selezionare criteri mi mostra tutti i records del db.