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

    Dubbi funzionamento corretto ciclo IF ELSE e FILTRI DI RICERCA

    Buon pomeriggio a tutti...
    approfitterei del vostro "know how" per chiarire alcuni dubbi.
    Ho costruito uno script di ricerca con diversi filtri... attualmente funziona, per� ho dubbi sulla genuinit� del metodo. Mi spiego meglio:
    la mia necessit� � quella di filtrare una rierca in base alle preferenze degli utenti:
    ES. Select "appartamento" WHERE "minimo 3 stanze" AND "vista mare" OR "2 piani" ETC ETC ETC...
    ora, poich� i filtri sono tanti e variabili ho pensato di risolvere in questo modo.
    Creo una prima query generica con il pimo filtro:
    SELCT * FROM tab_apt WHERE type = "Appartamento"
    successivamente creo due tabelle temporanee e inserisco i risultati della SELECT nella prima;
    eseguo la SELECT con il secodo filtro sulla prima tabella temporanea:
    SELECT * FROM tab_temp1 WHERE room >= 3
    raccolgo i dati, li inserisco nella seconda tabella temporanea e svuoto la prima...
    Altra SELECT nella seconda tab temporanea inserendo i risultati nella prima e svuotando la seconda etc etc etc fino ad ottenere i risultati filtrati.
    Alla fine eseguo un DROP sulle tabelle temporanee per liberare il DB...

    IL PRIMO DUBBIO �:
    Oggi l'utente � 1 (il sottoscritto ) e il metodo sembra fnzionare (attualmente ho meno di 100 record da analizzare) ma se domani gli utenti fossero 100 o 1000 con altrettanti record o pi�? Che pu� succedere? Rischio di stressare il server?

    IL SECONDO DUBBIO �:
    Il costrutto if else mi genera risultati falsi se impostato in questo modo
    Pagina del form:
    <form name="hours" method="post">
    <select name="hour">
    <option value="" selected="selected">Qualsiasi</option>
    <option value="01">1</option>
    <option value="02">2</option>
    <option value="03">3</option>
    etc...
    </select>
    <input type="checkbox" name="hournow" value="True">IN QUESTO MOMENTO
    </form>
    Pagina php che riceve i dati:
    // in questo modo mi restituise un falso risultato... nel senso che $myhour risulta sempre essere = date(G)
    $hour = $_POST["hour"];
    $justnow = $_POST["hournow"];
    // il valore "true" � passato come stringa
    if ($justnow ="True") {
    $myhour = date(G);
    } else {
    $myhour =='';
    }
    impostato cos� invece funziona
    $hour = $_POST["hour"];
    $justnow = $_POST["hournow"];
    if (!$justnow =='') {
    $myhour = date(G);
    } else {
    $myhour ='';
    }

    Logicamente non vedo differenza... perch� una funziona e l'altra no?!?

    Spero non essere stato trooooooppo lungo e noioso!!!!

    Un saluto a tutti

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Crea la query parametricamente.
    Diciamo che i filtri sono: tipo, stanze, vista mare, terrazzo.

    Codice PHP:
    // comincia così, visto che il tipo c'è sicuramente
    $query "Select * FROM tab_apt WHERE tipo='$tipo'";

    if ( 
    $terrazzo )
    {
        
    // notare lo spazio iniziale
        
    $query .= " AND terrazzo='si'";
    }

    // se $num_stanze è 0 questo viene saltato perché 0 = false
    if ( $num_stanze )
    {
        
    $query .= " AND num_stanze=$num_stanze";
    }

    if ( 
    $vista_mare )
    {
        
    $query .= " AND vista_mare='si'";

    Alla fine avrai la query con i filtri voluti, chiaramente creati gli if in base alle reali esigenze.
    Ultima modifica di Alhazred; 25-05-2017 a 18:05

  3. #3
    effettivamente... così è molto più pulito e veloce...
    un unico altro dubbio per il quale penso do conoscere la risposta però nel dubbio...

    Ho alcuni parametri che mi arrivano in forma di array passati da alcuni checkbox... inserisco nei parametri della query gli switch / case e continuo costruendo la select, giusto?!?

    Grazie per la celerissima risposta!!!

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