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

    Creare where dinamici in php

    Ciao a tutti,

    ho un problema che non so come affrontarlo.

    Ho una pagina che contiene un form con 3 combobox, il quale serve a selezionare una serie di criteri per una query di visualizzazione:

    ogni combobox passa dei valori numerici, se è 0 vuol dire che non si mette una scelta di selezione, se ci sono valori numerici diversi da 0 è una selezione di un oggetto.

    Nella pagina php che visualizza la lista che viene originata dalla scelta di questo form, vorrei avere una query del tipo:

    "SELECT * from mia.tabella WHERE $condizione"

    E dove $condizione venga costruito in modo dinamico, della serie se scelgo:

    indifferente
    item2
    item1

    la condizione contenga solo gli i valori superiori a 0.

    Sono stato contorto, spero che si capisca

    Grazie

    Mau

  2. #2
    Su quali campi della tabella devi generare le condizioni?
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    in pratica ho tre combobox così denominate:

    colore
    marca
    grandezza

    e ho un tabella con questi campi:

    id - marca - nrSerie - colore - grandezza - dataAcquisto

    in pratica se seleziono uno dei tre combobox con un valore (ad es: colore - rosso) mi dovrâ fare vedere solo gli oggetti di colore rosso. Se aggiungo che la grandezza è uguale a small dovrà farmi vedere tutti gli oggetti rossi di grandezza small.

    Ho risposto alla tua domanda?

  4. #4
    Codice PHP:
    <?php
    $colore 
    $_POST['colore'];
    $marca $_POST['marca'];
    $grandezza $_POST['grandezza'];

    $query "SELECT * FROM tabella WHERE 1";
    if (isset(
    $colore) && !empty($colore)) {
        
    $query .= " AND colore = '$colore'";
    }
    if (isset(
    $marca) && !empty($marca)) {
        
    $query .= " AND marca = '$marca'";
    }
    if (isset(
    $grandezza) && !empty($grandezza)) {
        
    $query .= " AND grandezza = '$grandezza'";
    }
    $result mysql_query($query) or die ("Error: ".mysql_error());

    ...
    ?>
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    Codice PHP:
    // supponiamo $colore, $marca e $grandezza contengano il valore d'interesse
    $where "(1=1)";
    if (
    $colore>0$where .= " AND (colore=$colore)";
    if (
    $marca>0$where .= " AND (colore=$marca)";
    if (
    $grandezza>0$where .= " AND (colore=$grandezza)";
    $query "SELECT * from tabella WHERE ($where)" 
    Si può anche inizializzare la clausola con una stringa vuota, caricare le condizioni in un vettore e poi usare implode, ma la sostanza non cambia di molto...

  6. #6
    Grazie dei suggerimenti, stasera provo e vi faccio sapere se è funzionato.

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    come ho già fatto più volte in altri casi simili ti suggerisco di stampare a video (o cmq "loggare" da qualche parte) la query (con qlcs come print $query) per verificare che sia correttamente composta...

  8. #8
    ciao a tutti ho provato la soluzione proposta da eiyen, se seleziono il primo combobox non ho nessun problema, se seleziono solo il secondo o il terzo mi da errore, infatti se vado a vedere il print della query mi risulta una cosa tipo questa:

    SELECT * FROM mia.tabella WHERE ( AND (colore = 1));

    Premetto che lavoro con la banca dati SQL Server 2008.

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.