- Home
- Categorie
- Coding e Sistemistica
- Altri linguaggi per il web
- motore di ricerca interno con asp e access
-
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
-
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.
-
ok, capisco la logica ma non saprei come fare questo tipo di controllo.
-
lo fai con is null, cioè if(isnull(request.Form("nom")) ...
-
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.
-
Innanzitutto dovresti inizializzare addedQuery a stringa vuota, addedQuery = "";
-
in che parte del codice dovrei inizializzarlo?
-
Prima che lo usi la prima volta.
-
devo inizializzarla prima di
if (request.QueryString("nom")<>"") then addedQuery=addedQuery+" AND nome LIKE '%" + nome + "%' "
ma non so come scrivere correttamente il codice.
-
credo sia addedQuery =""
-
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.