Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 23
  1. #1
    Utente di HTML.it L'avatar di Renyp
    Registrato dal
    Nov 2004
    Messaggi
    304

    Form di ricerca con molti select e problema recordset

    Ciao a tutti,
    sono un principiante in asp e sto cercando di realizzare un db di prodotti (un'unica tabella con tanti record) e un box/form di ricerca (con 3 select e un tasto invia) presente nella pagina ricerca.asp e in altre varie pagine.html del sito (in modo tale da consintire la ricerca nelle varie sezioni del sito).

    Purtroppo mi sono bloccato sulla query - e il relativo recordset in asp - nella pagina ricerca.asp che gestisca le informazioni inviate dal form.

    Il form ha 3 select. Con le 3 select posso avere o non avere la clausola "WHERE". Cioè se l'utente non seleziona nessuna delle opzioni nelle tre select la query resta select * from, senza where.
    Ma può capitare che cerchi tra i prodotti tramite un solo filtro, o la combinazione di due a caso.
    (Penso che per chi è pratico risulti una stupidaggine, ma io ci sto perdendo la testa...)

    In realtà, vorrei comunque che quando dal form non viene effettuata nessuna scelta (cioè quando si arriva alla pagina ricerca.asp da un link diretto e non dal form) comparisse comunque un elenco dei prodotti in offerta (quindi nella query del recordset ci sarà cmq un "where xxx = y").

    Qualcuno di buona volontà è disposto ad aiutarmi?
    Grazie!!

  2. #2
    se hai comunque un ... WHERE qualcosa, per le altre select devi
    - controllare se c'è qualcosa
    - se c'è, aggiungi alla tua stringa sql ... AND qualcos'altro


  3. #3
    Utente di HTML.it L'avatar di Renyp
    Registrato dal
    Nov 2004
    Messaggi
    304
    Ciao Optime, e grazie per la risposta!
    Vediamo se ho capito.
    Sottolineo che io intendevo partire con la condizione che se l'utente arriva a ricerca.asp senza essere passato da un form (quindi coi 3 campi nulli) il RS carica i record in offerta. Altrimenti l'utente arriva in una pagina che graficamente sarebbe quasi tutta vuota, mentre così troverebbe già i prodotti in offerta.

    Quindi controllo se e quali valori arrivano da un form:
    campo1 = request.form("campo1")
    campo2 = request.form("campo2")
    campo3 = request.form("campo3")

    set RS = server.CreateObject("ADODB.recordset")
    sqlCatalogo = "SELECT * FROM tabella1 WHERE"

    if campo1 = "" and campo2 = "" and campo3 = "" then

    sqlCatalogo = sqlCatalogo & "campoinofferta is not null"

    else

    if campo1 = "" and campo2 = "" then
    sqlCatalogo = sqlCatalogo & "campo3 =" & campo3 & " "
    end if

    if campo1 = "" and campo3 = "" then
    sqlCatalogo = sqlCatalogo & "campo2 =" & campo2 & " "
    end if

    if campo2 = "" and campo3 = "" then
    sqlCatalogo = sqlCatalogo & "campo1 =" & campo1 & " "
    end if


    if campo1 <> "" and campo2 <> "" then
    sqlCatalogo = sqlCatalogo & "campo1 ='" & campo1 & "' and campo2 =" & campo2 & " "
    end if

    if campo1 <> "" and campo3 <> "" then
    sqlCatalogo = sqlCatalogo & "campo1 ='" & campo1 & "' and campo3 =" & campo3 & " "
    end if

    if campo2 <> "" and campo3 <> "" then
    sqlCatalogo = sqlCatalogo & "campo2 ='" & campo2 & "' and campo3 =" & campo3 & " "
    end if


    if campo1 <> "" and campo2 <> "" and campo3 <> "" then
    sqlCatalogo = sqlCatalogo & "campo1 ='" & campo1 & "' and campo2 =" & campo2 & " "
    sqlCatalogo = sqlCatalogo & "campo3 ='" & campo3 & "
    end if

    end if

    Quindi per prevedere tutte le occorrenze delle tre select faccio così?
    Magari mi sto perdendo in tutti questi "if then end if" e non serve, e invece c'è una costruzione e una struttura del codice molto più semplice e "flessibile"...?

    Così se un domani voglio aggiungere (o togliere) un filtro di ricerca non dovrei rifare questo labirinto tutto dall'inizio....

  4. #4
    certo che te la sai complicare la vita la mia indicazione è mooolto più semplice

    sqlCatalogo = sqlCatalogo & "campoinofferta is not null"

    if campo1<>"" then
    sqlCatalogo = sqlCatalogo & " AND ....selezione da campo 1"
    End If

    if campo2<>"" then
    sqlCatalogo = sqlCatalogo & " AND ....selezione da campo 2"
    End If

    così puoi avere mille select senza problemi di combinazioni

  5. #5
    Utente di HTML.it L'avatar di Renyp
    Registrato dal
    Nov 2004
    Messaggi
    304
    Infatti
    Stavo pensando a qualche forma annidata o con gli AND che mi facilitasse la vita.

    Ma forse ti ho confuso le idee con quel campoinofferta.
    La tua soluzione prevede sempre un AND, perchè pensi che si accodino a campoinofferta. Ma campoinofferta appartiene ad una condizione IF (se i 3 sono tutti nulli allora seleziona i record con campoinofferta non nullo).
    Con la tua soluzione non si cade nel caso in cui diventa

    sqlCatalogo = "SELECT * FROM tabella1 WHERE AND campo1=campo1"

    ?
    Spero di essermi spiegato un po' meglio..

  6. #6
    allora la tua sql di base sarà

    sqlCatalogo = "SELECT * FROM tabella1 WHERE 1=1"

    tutto il resto (anche l'offerta) in AND


  7. #7
    Utente di HTML.it L'avatar di Renyp
    Registrato dal
    Nov 2004
    Messaggi
    304
    ah, 1=1...
    ok, allora va benissimo..la testo e ti dico, grazie mille!

  8. #8
    Utente di HTML.it L'avatar di Renyp
    Registrato dal
    Nov 2004
    Messaggi
    304
    Buongiorno...!
    Allora, ho messo online questa versione dello script, e va abbastanza bene, tranne per il fatto che non funziona l'opzione in cui tutti e tre i campi sono nulli e allora RS dovrebbe caricare solo i record con il campo "offerte" = ok o comunque not null. E invece li carica sempre tutti.
    Questo il codice, evidenzio la stringa che in teoria non funziona..

    Dim RS, sqlRS, tipocorso, tipostudente, lingua

    tipocorso = request.querystring("tipocorso")
    tipostudente = request.querystring("tipostudente")
    lingua = request.querystring("lingua")

    set RS = server.CreateObject("ADODB.recordset")
    sqlRS = "SELECT * FROM corsi WHERE 1=1 "

    if tipocorso <> "" then
    sqlRS = sqlRS & "AND tipocorso = '" & tipocorso & "'"
    end if

    if tipostudente <> "" then
    sqlRS = sqlRS & "AND tipostudente = '" & tipostudente & "'"
    end if

    if lingua <> "" then
    sqlRS = sqlRS & "AND lingua = '" & lingua & "'"
    end if


    if tipocorso = "" and tipostudente = "" and lingua = "" then
    sqlCatalogo = sqlCatalogo & "AND offerte = 'ok' "
    end if


    RS.open sqlRS, objConn

    If RS.Eof=True or RS.Bof=True then
    Response.Write "

    Nessun risultato trovato</P>"
    Else

    DO WHILE not (RS.EOF)

    response.write .....bla bla bla....

    RS.movenext
    Loop
    end if

  9. #9
    quella dei tre campi vuoti la devi mettere come IF principale, e tutte le altre nella sua ELSE

  10. #10
    Utente di HTML.it L'avatar di Renyp
    Registrato dal
    Nov 2004
    Messaggi
    304
    Eh, c'ho già provato scrivendo così, ma non funge lo stesso:

    set RS = server.CreateObject("ADODB.recordset")
    sqlRS = "SELECT * FROM corsi WHERE 1=1 "
    if tipocorso = "" and tipostudente = "" and lingua = "" then
    sqlCatalogo = sqlCatalogo & "AND offerte = 'ok' "
    else
    if tipocorso <> "" then
    sqlRS = sqlRS & "AND tipocorso = '" & tipocorso & "'"
    end if


    if tipostudente <> "" then
    sqlRS = sqlRS & "AND tipostudente = '" & tipostudente & "'"
    end if


    if lingua <> "" then
    sqlRS = sqlRS & "AND lingua = '" & lingua & "'"
    end if
    end if

    Possibile che abbia sbagliato qui: sqlCatalogo = sqlCatalogo & "AND offerte = 'ok' " ?

    offerte è un campo (con contenuto "testo") dell'unica tabella corsi del db. Solo in tre record nel campo offerte c'è scritto "ok", gli altri sono vuoti..

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.