• 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.