Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Query di ricerca

  1. #1
    Utente di HTML.it L'avatar di ertos
    Registrato dal
    Nov 2005
    Messaggi
    448

    Query di ricerca

    Ciao Ragazzi
    Ho un form con 4 select di questo tipo

    select 1
    <select name="regione" style="width:175px">
    <option value="" selected="selected">Seleziona una Regione:</option>
    <option value="1">Abruzzo</option>

    .......
    </select>

    select 2
    <select name="provincia" style="width:175px">
    <option value="" selected="selected">Seleziona una Provincia:</option>
    <option value="2">Milano</option>

    .......
    </select>

    select 1
    <select name="regione" style="width:175px">
    <option value="" selected="selected">Seleziona una sezione:</option>
    <option value="13">sezione 1</option>

    .......
    </select>

    select 1
    <select name="regione" style="width:175px">
    <option value="" selected="selected">Seleziona una Categoria:</option>
    <option value="13">Categoria 1</option>

    .......
    </select>


    Nel database ci sono 4 celle gia create: regione - provincia - sezione - categoria

    Ora voglio attraverso il form fare una ricerca all'interno del database in modo da poter cercare utilizzando le 4 condizioni.

    Ho fatto inquesto modo:
    recupero i dato del form
    $regione = $_POST['regione'];
    $provincia=$_POST['provincia'];
    $sezione=$_POST['sezione'];
    $categoria=$_POST['categoria'];

    Ecco la query
    $query = mysql_query("SELECT * FROM `nometabellai` WHERE `id` = '$id' AND (`regione` = '$regione' AND `provincia` = '$provincia' AND `sezione` = '$sezione' AND `categoria` = '$categoria'");

    Il mio problema è che se solamente il 1 e il 3 campo del form sono settati (cioe faccio una ricerca solamente per REGIONE e per SEZIONE) la query non mi da nessun risultato nonstante in realta nel databse ci sono le notizie.

    L'errore è dato dal fatto che la query appare in questo modo.
    $query = mysql_query("SELECT * FROM `nometabellai` WHERE `id` = '$id' AND (`regione` = '$regione' AND `sezione` = '$sezione' AND ");

    Vi è un AND finale che mi crea problemi.

    Come posso fare per risolvere tutto cio?

    Grazie

  2. #2
    Allora.... una prima osservazione.
    Se scrivi:
    codice:
    <option value="" selected="selected">Seleziona una Provincia:</option>
    Allo script che riceve i dati della form arriverà solo e sempre il dato di quella option, a prescindere dalla scelta effettuata dall'utente.
    Se vuoi selezionare un valore di default, ti consiglio di usare semplicemente:
    codice:
    <option value="" selected>Seleziona una Provincia:</option>
    Tenendo conto, però, che il tuo è il primo valore mostrato nel menù a tendina, secondo me è inutile che lo selezioni.

    Per quello che riguarda l'AND finale, puoi agire in due modi: o aggiungi un valore sempre vero tipo 1 = 1, oppure componi una stringa che vai a togliere proprio le ultime 4 lettere (lo spazio e l'AND, per l'appunto), con substr().

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    539
    Codice PHP:
    $query "SELECT * FROM Nometabella WHERE ID=" $id;

    if(
    $_POST['regione']!=""){
       
    $query .= " AND regione='" $_POST['regione'] . "'";
    }

    if(
    $_POST['provincia']!=""){
       
    $query .= " AND provincia='" $_POST['provincia'] . "'";
    }

    if(
    $_POST['sezione']!=""){
       
    $query .= " AND sezione='" $_POST['sezione'] . "'";
    }

    if(
    $_POST['categoria']!=""){
       
    $query .= " AND categoria='" $_POST['categoria'] . "'";

    in questo modo la query si compone con gli AND solo se i valori passati non sono uguali a nulla...

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.