• User Attivo

    [SQL] Aiuto SELECT * FROM

    Ho creato un sito di un agenzia immobiliare, e nella home ho messo un form per la visualizzazione solo alcune categorie del database. Però ho questo problema nello script.

    Se scrivo per esempio

    strsql = "SELECT * FROM vendita WHERE tipologia='Villette';"

    tutto ok mi escono solo le villette, ma se metto

    strsql = "SELECT * FROM vendita WHERE tipologia='" & request.form("scelta") & "';"

    non mi esce niente, eppure la variabile request.form("scelta") è giusta perchè ho provato a mettere un Response.write (request.form("scelta")) e mi da il risultato Villette...
    Perché?


  • Bannato User Attivo

    fai un escape "


  • Moderatore

    prova a togliere eventuali spazi con la funzione trim()


  • User Attivo

    @Legolas said:

    prova a togliere eventuali spazi con la funzione trim()

    Qual'è la sintassi della funzione Tirm?


  • Moderatore

    SELECT * FROM vendita WHERE tipologia='" & trim(request.form("scelta")) & "'


  • User Attivo

    @Legolas said:

    SELECT * FROM vendita WHERE tipologia='" & trim(request.form("scelta")) & "'

    Niente non funziona.
    Questo
    Response.write (trim(request.form("scelta")))
    mi da a video il risultato Villetta.

    Questo
    strsql = "SELECT * FROM [vendita] WHERE tipologia='Villetta'"
    mi da a video solo le villette.
    Se metto questo
    strsql = "SELECT * FROM [vendita] WHERE tipologia='" & trim(request.form("scelta")) & "'"
    non esce niente perchè?...vi prego aiutatemi!!!


  • Super User

    embrerebbe corretta....
    ma la variabile che passi è sempre "villetta" ? non ci sono apostrofi o cose strane???

    fai un bel response.write(strsql) e vedi che cosa ti scrive....


  • User Attivo

    Risolto.
    Posto la soluzione:

    select case trim(Request.Form("scelta"))
    case "1"
    tipo = "Appartamento"
    case "2"
    tipo = "Casa antica"
    case "3"
    tipo = "Casa rurale"
    case "4"
    tipo = "Suolo edificatore"
    case "5"
    tipo = "Terreno"
    case "6"
    tipo = "Villa"
    case "7"
    tipo = "Villetta"
    end select

    strsql = "SELECT * FROM [vendita] WHERE tipologia='" & tipo &"'"

    e nel form select

    <select name="scelta">
    <option value="1">Appartamenti</option>
    <option value="2">Case antiche</option>
    <option value="3">Case rurali</option>
    <option value="4">Suoli edificati</option>
    <option value="5">Terreni</option>
    <option value="6">Ville</option>
    <option value="7">Villette</option></select>

  • Super User

    cioè?
    quindi la ComboBox passava dei valori numerici anzichè la stringa???


  • User Attivo

    @autodafe said:

    cioè?
    quindi la ComboBox passava dei valori numerici anzichè la stringa???

    No passava stringhe ma evidentemente non gli piaceva quel formato.


  • User Attivo

    post vecchiotto...

    la soluzione adottata non mi pare molto elegante ed utile, considerando che una qualsiasi tipologia nuova ti costringe ad aggiungere una casistica nell'istruzione CASE.

    La soluzione era quella di assegnare il valore in arrivo dalla form ad una variabile, rpima di inserirla nella query.
    Ho avuto lo stesso problema anni fa.

    In pratica:

    
    scelta=request.form("scelta")
    strsql = "SELECT * FROM vendita WHERE tipologia='" & scelta & "';"
    
    

    Facendo un'analisi di un altro tipo invece vien fuori che l'errore più grosso che hai fatto è quello di utilizzare del full-text per indicare una tipologia di record. In questo caso villetta, appartamenti o altro, quando andava invece definita questa tipologia in una tabella separata con relativi ID di riga.

    Associando poi alla singola tipologia di immobile l'ID corrispondente.
    In questo modo avresti avuto una struttura molto più flessibile con impegno aggiuntivo pari a 0.

    Bye


  • User Attivo

    Ti ringrazio per la correzione proverò a cambiare il codice.Quello di cui ho bisogno ora è, creare uno script in grado di cercare in un database un'immobile secondo alcune scelte, del tipo:

    Primo Select - Tipo: casa,villa,terrano etc...
    Secondo Select: Località: Mare, centro urbano, montagna etc...
    Terzo Select: Vende, affitta etc...

    Ora, vi chiedo come devo impostare la riga di comando affinchè il risultato sia la somma delle 3 scelte?

    Maggior dettagli su www.salentodomus.it subito sotto l'header.


  • User Attivo

    E' semplicemente una select con 3 "where" 😄

    proprio in questi casi qui torna utile la struttura come quella che ho illustrato.
    Anche perchè adesso hai aggiunto anche la tipologia di contratto (locazione e vendita) e località.

    Non aver paura di usare più tabelle, quelle non si pagano, l'importante è che strutturi il DB nel modo corretto, poi vedrai che il codice verrà da se.


  • User Attivo

    @Icelord said:

    E' semplicemente una select con 3 "where" 😄

    proprio in questi casi qui torna utile la struttura come quella che ho illustrato.
    Anche perchè adesso hai aggiunto anche la tipologia di contratto (locazione e vendita) e località.

    Non aver paura di usare più tabelle, quelle non si pagano, l'importante è che strutturi il DB nel modo corretto, poi vedrai che il codice verrà da se.

    Cioè come 3 where, così?

    strsql = "SELECT * FROM [vendita] WHERE tipologia='" & scelta & "' WHERE categoria='" & sceltacategoria & "' ORDER BY ID DESC;"


  • User Attivo

    @sraone77 said:

    Cioè come 3 where, così?

    strsql = "SELECT * FROM [vendita] WHERE tipologia='" & scelta & "' WHERE categoria='" & sceltacategoria & "' ORDER BY ID DESC;"

    No. Devi creare un'altra tabella (tipologia) con i campi "id_tipologia(intero-contataore-chiave primaria)" e "tipologia(varchar)". Poi togli il campo testo "tipologia" dalla tab vendita e metti un campo intero "id_tipologia"
    Alla fine farai una inner join fra tab vendita e tab tipologia passando nella where il numerico id_tipologia.

    "select vendita.*,tab_cat.tipologia from vendita inner join tab_cat on tab_cat.id_tipologia=vendita.id_tipologia where tab_cat.id_tipologia="&scelta&""

    Dove la variabile "scelta" è l'id che corrisponde alla tipologia che ti interessa.

    Il problema è che forse non sai cosa è una join visto che hai concatenato 3 where di seguito 🙂
    Non lo dico per offesa...

    Apro una parentesi. Stai passando in pasto alle query dei dati non filtrati. Sicurezza zero. In questi casi possono cancellarti l'intero db in 2 secondi.
    Ma questo richiederebbe un thread dedicato.

    P.s. L'ho spiegato una cacca ma a quest'ora sto fuso. Magari domani rileggo cosa ho scritto 😄

    Pienamente d'accordo con Icelord


  • User Attivo

    Fusionman, mi sa che l'hai mandato in crisi 🙂

    cmq per concatenare 3 whre basta metterci un AND di mezzo.
    Come avrai notato non ti sto riscrivendo la query con queste istruzioni perchè è proprio la base dell'utilizzo del linguaggio SQL e se non stai di cosa si sta parlando meglio studiare un po' prima.

    Ti consiglio, visto che non hai esperienza in merito, di dare un'occhiata prima a delle guide, su HTML.it ne trovi diverse e ben fatte.
    E di guardare anche siti come aspitalia.it e devguru.com

    Prima di fare lavori del genere sarebbe meglio formarsi ed informarsi. Come dice Fusionman non c'è nulla sulla sicurezza in queste tue chiamate. Rischi di trovarti un sito completamente aperto o svuotato e non ci fai una bella figura.

    Formazione è la parola chiave 😉


  • User Attivo

    Premetto che non sono così ignorante da non saper scrivere una semplice riga di comando. Certo non sono un veterano dell'asp ma per quello che devo fare mi sono sufficienti le nozioni che ho.
    Ora il mio errore era quello di mettere dopo l'AND, dinuovo il comando WHERE. Quindi ho risolto in questo modo:

    strsql = "SELECT * FROM [vendita] WHERE tipologia='" & scelta & "' AND categoria='" & sceltacategoria & "' ORDER BY ID DESC;"

    grazie.


  • User Attivo

    Ma io non volevo offendere nessuno. L'ho detto per spronarti ad approfondire la questione e mettere in chiaro che non si possono spiegare certi argomenti se prima non se ne conoscono altri.
    Non è mica detto che si deve conoscere tutto? Magari sei un genio del C++ nel quale io sono completamente ignorante
    Se poi vuoi usare un metodo che funziona ma che non è il modo giusto allora prosegui per quella strada. Altrimenti vediamo di aiutarti.
    Ciao


  • User Attivo

    No figurati non mi sono offeso. Ora però non riesco a fare sta cosa:
    ho questa query

    scelta=request.form("scelta")
    sceltacategoria=request.form("sceltacategoria")
    sceltalocalita=request.form("sceltalocalita")

    strsql = "SELECT * FROM [vendita] WHERE tipologia='" & scelta & "' AND categoria='" & sceltacategoria & "' AND localita='" & sceltalocalita & "' ORDER BY ID DESC;"

    e tutto va bene, ma se mette nelle scelte, l'opzione "Vedi tutti" quale valore devo dare alla variabile affinchè mi escano tutti i dati di quella colonna?

    es.: apparamento --> vende --> Vedi tutti
    oppure

    vdi tutti --> vende --> Mare


  • User Attivo

    dovresti usare degli IF e non inserire nella query l'istruzione wher corrispondnde a quel dato.