Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Query con numero di parametri arbitrario

    Ciao a tutti!

    Non so come gestire questo problema in maniera semplice.
    Devo permettere ad un utente una ricerca di un annuncio immobiliare.
    L'utente può selezionare diverse opzioni:
    Regione
    Provincia
    Comune
    Tipo
    Piano
    Numero locali
    Dimensioni in mq
    Prezzo.

    Se non seleziona niente esce un errore.
    Ma ovviamente io non posso sapere in anticipo cosa deciderà di selezionare.
    Ad esempio l'utente A seleziona regione=Lombardia e prezzo=100000-200000.
    Ma l'utente B invece potrebbe selezionare regione=Toscana e tipo=Villa e mq=100-150.

    Come faccio a creare un'unica query senza sapere il numero dei campi cercati?

  2. #2
    Utente di HTML.it L'avatar di Aires
    Registrato dal
    Jan 2010
    Messaggi
    725
    Allora io uso questo sistema.


    Query principale :
    codice:
    $query = "Select * from nome tabella Where ".$condizioni_query;
    Nel $condizioni_query vai ad aggiungere i vari dati

    Codice PHP:
    <?
    $condizioni_query 
    1;
    if(isset(
    $_POST['villa'])){ $condizioni_query .= " and villa LIKE '".$_POST['villa']."'";}
    if(isset(
    $_POST['regione'])){ $condizioni_query .= " and regione LIKE '".$_POST['regione']."'";}
    if(isset(
    $_POST['citta'])){ $condizioni_query .= " and citta LIKE '".$_POST['citta']."'";}
    ?>
    In pratica tu peschi tutte le select che ci sono, se lui le setta bene andrà ad aggiungerle alla variabile, altrimenti non le inserisce

    Nota bene, prima di tutto indichi $condizioni_query = 1 perchè cosi se non cerca nulla la query verrà eseguita su tutti i record senza darti problemi
    Originariamente inviato da qazar
    Se finisci di leggere il thread mi sono corretto,è solo i kernel scritto in html.
    Originariamente inviato da rnlflame
    Comunque non dovevano crollare

  3. #3
    Non ci avevo minimamente pensato!
    Ci provo subito!

  4. #4
    Ci ho messo un po' a sistemarmi il codice, ma quando provo ad "attaccare" la variabile $condizioni alla query mi esce una pagina bianca.
    Ora non posso postare il codice perché sto lavorando su un altro pc non in linea.
    Ma ti faccio due domande:
    al posto di LIKE posso mettere tranquillamente l'= ?
    e $condizioni_query .=
    è uguale a $condizioni_query = $condizioni_query . " giusto?

    Sono due domande idiote, ma non vedo quale altro possa essere il problema!

  5. #5
    Utente di HTML.it L'avatar di Aires
    Registrato dal
    Jan 2010
    Messaggi
    725
    Si penso che tu possa mettere =
    E si $condizione_query .= serve semplicemente ad aggiungere ciò che indichi dopo l'uguale nella variabile $condizione_query

    Se dopo hai il codice a mano se puoi postalo o almeno la struttura della condizione e la query
    Originariamente inviato da qazar
    Se finisci di leggere il thread mi sono corretto,è solo i kernel scritto in html.
    Originariamente inviato da rnlflame
    Comunque non dovevano crollare

  6. #6
    Alla fine, dopo ore a sbatterci la testa, funziona tutto!
    Posto il codice della pagina, magari a qualcuno potrà servire!

    Codice PHP:
    <?php
    #FILE CONTENENTE IL RECUPERO DELLE VARIABILI DAL FORM DI RICERCA DI UN IMMOBILE
    #E LE QUERY PER AVERE UN RISULTATO

    session_start();
    #require('pg_connect.php');
    ?>

    <link href="stili.css" rel="stylesheet" type="text/css" />
    <table valign="top">
    <tr>

    <?php
    $db 
    pg_connect("host=localhost port=*** dbname=*** user=*** password=***");

    #RECUPERO DELLE VARIABILI#
    $uso $_POST['uso']; #POST DA CAMPO HIDDEN
    $reg $_POST['reg'];
    $prov $_POST['prov'];
    $comune $_POST['comune'];
    $tipo $_POST['tipo'];
    $mq $_POST['mq'];
    $postoauto $_POST['postoauto'];
    $prezzo $_POST['prezzo'];
    $piano $_POST['piano'];
    $nlocali $_POST['nlocali'];

    #MESSAGGI DI ERRORE#
    $mex "";
    #CONTROLLO PROVINCIA-REGIONE
    include('controllo_provreg.php'); #NON FUNZIONA IL CONTROLLO!

    if ($tipo!="Seleziona" && $tipo!="Appartamento"){
        if (
    $piano!="Seleziona"){
            
    $mex $mex "[*]Il piano va inserito solo nel caso tu stia cercando un appartamento'\n";
        }    
        if (
    $nlocali!="Seleziona"){
            
    $mex $mex "[*]Il numero di locali va inserito solo nel caso tu stia cercando un appartamento'\n";
        }
    }
    if (!empty(
    $mq)){
        if (!
    is_numeric($mq)){
            
    $mex $mex "[*]Non hai inserito una metratura valida\n";
        }
    }
    if (!empty(
    $prezzo)){
        if (!
    is_numeric($prezzo)){
            
    $mex $mex "[*]Non hai inserito un importo valido\n";
        }
    }

    if (
    $mex!=""){
        
    $mex "Attenzione torna indietro\n" $mex;
        echo 
    "<span class='testo'>" .$mex"</span>";
        if (
    $uso=="privato"){
        
    ?><tr><td class="testo"><form method=post action="ricercaannuncipriv.php"><input type="submit" value="Indietro"></td></tr><?php
        
    }elseif ($uso=="commerciale"){
        
    ?><tr><td class="testo"><form method=post action="ricercaannuncicomm.php"><input type="submit" value="Indietro"></td></tr><?php
        
    }
        exit;
    }

    #SE NON CI SONO ERRORI
    if ($mex==""){
        
    #$que = new db();
        #$que->db_open();

        
    $condizioni 1;
        if (
    $reg!="Seleziona"){
            
    $condizioni $condizioni " AND recapito.regione = '".$reg."'";
        }
        if (
    $prov!="Seleziona"){
            
    $condizioni $condizioni " AND recapito.provincia = '".$prov."'";
        }
        if (!empty(
    $comune)){
            
    $condizioni $condizioni " AND recapito.comune = '".$comune."'";
        }    
        if (
    $tipo!="Seleziona"){
            
    $condizioni $condizioni " AND immobile.tipo = '".$tipo."'";
        }
        if (!empty(
    $mq)){
            
    $condizioni $condizioni " AND immobile.mq = '$mq'";
        }
        if (!empty(
    $postoauto)){
            
    $condizioni $condizioni " AND immobile.postoauto = '".$postoauto."'";
        }
        if (!empty(
    $prezzo)){
            
    $condizioni $condizioni " AND annuncio.prezzo = '$prezzo'"
        }
        if (
    $uso=="privato"){
            if (
    $piano!="Seleziona"){
                
    $condizioni $condizioni " AND immobile.piano = '".$piano."'";
            }
            if (
    $nlocali=="10"){
                
    $condizioni $condizioni " AND immobile.nlocali >= '$nlocali'";
            }elseif (
    $nlocali!="Seleziona"){
                
    $condizioni $condizioni " AND immobile.nlocali = '$nlocali'";
            }    
        }
        if (
    $reg=="Seleziona" && $prov=="Seleziona" && empty($comune) && $tipo=="Seleziona" && $piano=="Seleziona" && $nlocali=="Seleziona" && empty($postoauto) && empty($prezzo)){
            echo 
    "<span class='testo'>Non hai inserito nessun criterio!</span>
    "
    ;
            if (
    $uso=="privato"){
                echo 
    "<form method=post action='ricercaannuncipriv.php'><input type='submit' value='Indietro'>";
            }elseif (
    $uso=="commerciale"){
                echo 
    "<form method=post action='ricercaannuncicomm.php'><input type='submit' value='Indietro'>";
            }
        }else{
            
    $query "SELECT DISTINCT annuncio.id_a, annuncio.datapub, annuncio.validita FROM annuncio JOIN immobile ON (annuncio.id_i = immobile.id_i) JOIN recapito ON (immobile.id_i = recapito.id_i) WHERE ".$condizioni;
            
    $result pg_query($db,$query);
            
    $record pg_fetch_row($result);
            if (!
    $record){
                echo 
    "<span class='testo'>Non sono presenti annunci corrispondenti ai criteri inseriti</span>
    "
    ;
                if (
    $uso=="privato"){
                    echo 
    "<form method=post action='ricercaannuncipriv.php'><input type='submit' value='Indietro'>";
                }elseif (
    $uso=="commerciale"){
                    echo 
    "<form method=post action='ricercaannuncicomm.php'><input type='submit' value='Indietro'>";
                }
            }else{
                
    #RIPETO LA QUERY PER NON PERDERE RISULTATI
                
    $result pg_query($db,$query);
                echo 
    "<span class='menu'>Ecco gli annunci corrispondenti ai criteri inseriti</span>

    "
    ;
                echo 
    "<table border='1'><tr class='menu'><td align='center'>Id</td><td align='center'>Data di pubblicazione</td><td align='center'>Data di scadenza</td></tr>";
                while (
    $record pg_fetch_row($result)){
                    echo 
    "<tr valign='top'>";
                    for (
    $x=0$x<3$x++){
                        
    #SE LA VARIABILE E' UNA DATA, ALLORA LA MODIFICO PER OTTENERE IL FORMATO dd-mm-yyy
                        
    if (!is_numeric($record[$x])){
                            list(
    $y$m$d) = explode("-"$record[$x]);
                            
    $record[$x] = $d."-".$m."-".$y;
                        }
                        echo 
    "<td class='testo' align='center'>".$record[$x]."</td>";
                    }
                    echo 
    "</tr>";
                }
                echo 
    "</table>";
            }
        }
    }
    ?>
    </tr>
    </table>
    ps: comunque grazie Aires per l'aiuto

  7. #7
    Utente di HTML.it L'avatar di Aires
    Registrato dal
    Jan 2010
    Messaggi
    725
    Di niente
    Originariamente inviato da qazar
    Se finisci di leggere il thread mi sono corretto,è solo i kernel scritto in html.
    Originariamente inviato da rnlflame
    Comunque non dovevano crollare

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.