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

    Scegliere cosa visualizzare in base a delle clausule

    Diciamo che il risultato della query " standard " visualizza delle strutture secondo determinate clausule che metto nel where.

    Ma se volessi visualizzare solo i dati, in base a dei parametri di ricerca impostati dall'utente ?
    ( il classico form per visualizzare ad esempio gli alberghi a 3 stelle, in una determinata zona etc etc ).

    Nell'esempio che sto facendo, ho 3 possibilita' di scelta che provengono da un form che l'utente puo' compilare ( con un'unico submit ) : criterio1 criterio2 criterio3.

    Codice PHP:
    <?php
    include ("config.php");
    session_start();

    //recupero i valori dal form , non e' detto che siano stati tutti compilati. Ad esempio un
    //utente potrebbe voler visualizzare i dati in base a 2 criteri, lasciando libero il terzo

    $criterio1 $_GET["criterio1"]; 
    $criterio2 $_GET["criterio2"];
    $criterio3 $_GET["criterio3"];

    $lamiaquery "SELECT quellochemipare 
    FROM dovemipare
    WHERE attributo1 = '
    $criterio1' AND attributo2 = '$criterio2' AND attributo3 = '$criterio3' ";

    $result mysql_query($lamiaquery) or die(mysql_error()) ;
    $rows mysql_num_rows($result);

    if (
    rows>0) {
    echo 
    " <p class=centrato> $rows risultati trovati </p>";
    // Qui inserisco i dati da visualizzare, questa parte non e' importante.
    }

    else {
    echo 
    "<p class="centrato"> Non ci sono dati che soddisfino tutti i requisiti di ricerca </p>";
    }
    exit;
    ?>

    Ora, il problema e' questo : se uno lascia un criterio vuoto, vuol dire che non gli interessa selezionare per quel criterio. Nella mia query invece, tutti i campi devono essere uguali ai relativi criteri.

    Mettendo che un utente abbia compilato solo criterio1 e 2, lasciando bianco il terzo, la mia query restituirebbe un risultato vuoto ...


    Mi servirebbe una sintassi per aggirare questo problema. Nel senso :

    se il campo e' riempito, allora devo verificare le occorrenze di quel valore nella tabella.
    Se non e' riempito, lo tralascio, verificando pero' le altre 2 corrispondenze ..

    Forse potrei mettere qualche if, ma non so proprio ...

  2. #2
    Costruisci la query solo con le variabili settate, ovvero:

    esempio

    $lamiaquery = "SELECT quellochemipare FROM dovemipare where";

    if(isset($criterio1)) {
    $lamiaquery .= "attrunto1 = $criterio1";
    }

    if(isset($criterio2)) {
    $lamiaquery .= "attrunto2 = $criterio2";
    }

    $lamiaquery .= ");"; /*questo serve solo a completare la query con la parentesi e il punto e virgola

    Chiaramente avendo messo where già all'inizio ci dovrà essere almeno una condizione, sennò metti un if prima degli altri due if che verifichi che alemeno una condizione sia settata ed aggiunga where e poi fai come nell'esempio.

    Spero di esserti stato utile, ciao.

  3. #3
    Questa e' un'ottima idea grazie !
    Provo subito a realizzarla, spero di non avere problemi di sintassi ^_^

  4. #4
    Edit : funziona, grazie 1000 !


    Come sintassi penso di aver scritto giusto, pero' purtroppo non mi visualizza i risultati ..

    Per semplicita', ho imposto una condizione fissa nel where ed eliminato tutte le altre condizioni, mettendo un solo if :

    Codice PHP:

    include ("config.php");
    session_start();
    /*
    $zona = $_GET["zona"]; 
    */
    $tipo $_GET["tipo"];
    /*
    $proprietario = $_GET["proprietario"];
    $prezzominimo = $_GET["prezzominimo"];
    $prezzomassimo = $_GET["prezzomassimo"];
    */

    $alloggi "SELECT id_hotel, alloggi.nome, zona, tipologia, prezzominimo, prezzomassimo,user 
    FROM alloggi JOIN utenti ON proprietario=user_id
    WHERE  stato='pubblicato'"

    if(isset(
    $tipo)) {
    $alloggi .= "AND tipologia='$tipo'";
    }
    $alloggi .= ";";
    /*AND zona = '$zona' AND tipo = '$tipo' AND prezzominimo = '$prezzominimo' AND prezzomassimo = '$prezzomassimo'";*/

    $result mysql_query($alloggi) or die(mysql_error()) ;
    $rows mysql_num_rows($result);

    if (
    rows>0) {
    echo 
    "<p class=centrato> $rows risultati trovati </p>";
    }
    /*
    if (rows<0) {
    echo "<p class="centrato"> Non ci sono strutture che soddisfino tutti i requisiti di ricerca </p>";
    }
    */

    exit; 

  5. #5
    Edit : ogni volta che posto che non mi torna, poi mi funziona sempre

    Per non rendere il thread inutile, copio ed incollo il file browse.php funzionante !!


    Codice PHP:
    <?php
    include ("config.php");
    session_start();

    //recupero con get i valori dei campi

    $zona $_GET["zona"]; 
    $tipo $_GET["tipo"];
    $proprietario $_GET["proprietario"];
    $prezzominimo $_GET["prezzominimo"];
    $prezzomassimo $_GET["prezzomassimo"];

    //imposto la query solo con la clausula che sia stato pubblicato l'alloggio

    $alloggi "SELECT id_hotel, alloggi.nome, zona, tipologia, prezzominimo, prezzomassimo, user
    FROM alloggi JOIN utenti ON proprietario=user_id
    WHERE  stato='pubblicato'"
    ;

    //creo un array che chiamo condizioni : se le voci del box di ricerca non sono vuote, le aggiungo all'array

    $condizioni = array(); 

    if(!empty(
    $_GET['zona'])) 
       
    $condizioni[] = " AND zona = '" $_GET['zona'] . "'"

    if(!empty(
    $_GET['tipo'])) 
       
    $condizioni[] = " AND tipologia = '" $_GET['tipo'] . "'"

    if(!empty(
    $_GET['proprietario'])) 
       
    $condizioni[] = " AND user = '" $_GET['proprietario'] . "'";

    if(!empty(
    $_GET['prezzominimo'])) 
       
    $condizioni[] = " AND prezzominimo <= '" $_GET['prezzominimo'] . "'";

    if(!empty(
    $_GET['prezzomassimo'])) 
       
    $condizioni[] = " AND prezzomassimo >= '" $_GET['prezzomassimo'] . "'";

    //aggiungo alla query le condizioni che avevo inserito nell'array
       
    $alloggi $alloggi implode($condizioni); 

    $result mysql_query($alloggi) or die(mysql_error()) ;
    $rows mysql_num_rows($result);
    echo 
    "ci sono $rows risultati";
    exit;
    ?>

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.