Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    SELECT da campi formulario

    Salve a tutti/e,

    ho un formulario (un motore di ricerca) e a seconda della spunta o meno di alcuni checkbox o del riempimento di alcune textarea, con un if(isset_POST[..) rinvio a select diverse.

    È un metodo che funziona ma devo prevedere tutte le combinazioni possibili e non credo sia il metodo migliore...... suggerimenti?

    Grazie.
    En la habana hay una pila 'e locos!

  2. #2
    Prova a sfruttare gli INPUT usandoli come array.

    Se metti le [] dopo il nome di un INPUT la pagina dell'elaborazione te lo vede come array.

    <input type="check" name="casella[]" />
    <input type="check" name="casella[]" />
    <input type="check" name="casella[]" />
    ...

    sarà l'equivalente di
    $_REQUEST["casella"][0]
    $_REQUEST["casella"][1]
    $_REQUEST["casella"][2]
    ...

    Vedi se ti può essere utile.

    Controlla però, perché in ASP un check non flaggato non lo manda alla pagina di elaborazione, non mi ricordo se anche PHP faceva una cosa analoga e ora non posso provarlo.

  3. #3
    Sicuramente quando ci sono checkbox bisogna mettere [], quello già lo faccio. Non mi sono dunque ben spiegato, ci riprovo con un esempio:

    ho un checkbox e due textarea. A seconda degli input o meno del visitatore devo aggiungere parametri alla select. Avevo risolto con un if(isset_POST[... ecc...) e un rimando a query diverse, ma non credo sia la soluzione più adatta!
    En la habana hay una pila 'e locos!

  4. #4
    Secondo me è meglio se verifichi la presenza del testo:

    if(trim($_REQUEST["nome"])!=""){...


    Potrebbero uscire dei Notice se il request in questione non c'è ma un Notice molte volte vale come il 2 a bastoni quando la premiera è denara.

  5. #5
    Sì, ma la differenza tra nome e _POST non c'é! Non mi cambia nulla su quello che voglio sapere!!!
    Non capisco se mi spiego male o continui a fraintendere tu la mia domanda!!!
    En la habana hay una pila 'e locos!

  6. #6
    Aaaahh, ora ho capito.

    Tu dici che a seconda di quello che ti arriva devi includere campi che magari non fanno parte delle stesse tabelle...

    Secondo me potresti fare questo, in sostanza tu devi scrivere sia una from che una where (non so se anche i campi da restituire debbano variare).

    Tu parti dividendo in tre tronconi:
    Es.
    $select="a.id,a.cognome,b.nome ";
    $from="from utente b ";
    $where="where a.valid=1 "; (ho messo valid ma potresti mettere qualsiasi cosa, anche 1 e basta.

    Se ad esempio hai due altre tabelle, es. categoria e indirizzo, ti crei una variabile "bittario"

    $varbit=1; (ovvero 2^0, si presuppone che categoria sia 2 e indirizzo 4)

    A mano a mano che analizzi i campi aggiungi alla where e alla select se serve, es.
    Codice PHP:
    if(trim($_REQUEST["categoria"])!=""){
       
    $where.=" and b.categoria='".trim($_REQUEST["categoria"])."' ";
       
    $select.=",b.categoria"//(se serve aggiungerla)
       
    $varbit=$varbit|2;

    Al termine vai a ritoccare la from utilizzando $varbit:
    Codice PHP:
    if($varbit 2)
       
    $from.=" inner join categoria b on a.idcategoria=b.idcategoria ";
    if(
    $varbit 4)
       
    $from.=" inner join indirizzo c on a.idindirizzo=c.idindirizzo "
    In questo modo costruisci un pezzo alla volta la tua select, fammi sapere se ti è stato d'aiuto

  7. #7
    Uhm.... cerco di ricapitolare per vedere se ho capito bene:
    ho 4 parametri di scelta nel form che agiranno su una sola tabella: zona[], stanze[], mq, prezzo.
    Dunque:
    Codice PHP:
    SELECT FROM tabella WHERE .........
    if(
    trim($_REQUEST["zona"])!=""){
       
    $where.=" zona ='".trim($_REQUEST["zona"])."' ";
    }
    if(
    trim($_REQUEST["stanze"])!=""){
       
    $where.=" and stanze ='".trim($_REQUEST["stanze"])."' ";
    }
    if(
    trim($_REQUEST["mq"])!=""){
       
    $where.=" and mq <='".trim($_REQUEST["mq"])."' ";
    }
    if(
    trim($_REQUEST["zona"])!=""){
       
    $where.=" prezzo <='".trim($_REQUEST["prezzo"])."' ";

    È corretto un codice scritto così? Non l'ho mai fatto......
    En la habana hay una pila 'e locos!

  8. #8
    Quasi corretto, sbagli solo la prima if.

    Se nessuno inserisce la zona ti va in errore perché avresti una "where and ..."

    Ti conviene scrivere una query iniziale così:
    Codice PHP:
    SELECT FROM tabella WHERE 1 
    E' l'equivalente di scrivere
    Codice PHP:
    SELECT FROM tabella 
    perché la clausola 1 e basta sarà sempre vera, ma ti da la possibilità di aggiungere pezzi da quel punto in poi di tipo " and campo=valore "

    Ok?

  9. #9
    Dunque:
    Codice PHP:
    $cur mysql_query ("SELECT * FROM tabella WHERE 1
    if(trim(
    $_REQUEST["zona"])!=""){
       
    $where.=" zona ='".trim($_REQUEST["zona"])."' ";
    }
    if(trim(
    $_REQUEST["stanze"])!=""){
       
    $where.=" and stanze ='".trim($_REQUEST["stanze"])."' ";
    }
    if(trim(
    $_REQUEST["mq"])!=""){
       
    $where.=" and mq <='".trim($_REQUEST["mq"])."' ";
    }
    if(trim(
    $_REQUEST["prezzo"])!=""){
       
    $where.=" prezzo <='".trim($_REQUEST["prezzo"])."' ";
    }
    ORDER BY id ASC"
    ) or die (mysql_error()); 
    È corretto il codice scritto così?
    En la habana hay una pila 'e locos!

  10. #10
    No, dimentichi la and iniziale, scrivi così, non so se come avevi scritto funzionava:
    Codice PHP:
    $select "SELECT * FROM tabella WHERE 1 ";
    if(
    trim($_REQUEST["zona"])!=""){ 
       
    $select .=" and zona ='".trim($_REQUEST["zona"])."' "

    if(
    trim($_REQUEST["stanze"])!=""){ 
       
    $select .=" and stanze ='".trim($_REQUEST["stanze"])."' "

    if(
    trim($_REQUEST["mq"])!=""){ 
       
    $select .=" and mq <='".trim($_REQUEST["mq"])."' "

    if(
    trim($_REQUEST["prezzo"])!=""){ 
       
    $select .=" and prezzo <='".trim($_REQUEST["prezzo"])."' "

    $select .=" ORDER BY id ASC";
    mysql_query($select) or die (mysql_error()); 
    Poi ovviamente bisognerà aggiungere vari controlli tipo il fatto che se ti inseriscono un apice ' lo devi raddoppiare.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.