Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    302

    Escludere dalla query SELECT i campi vuoti

    Buongiorno a tutti voi,
    ho realizzato una query che prende dei dati da un database verificando le variabili POST e mostra a video i dati. il mio problema è questo, inserendo i dati nel form e cliccando su cerca mi vengono correttamente passati i dati richiesti, ma, ahime, mi vengono mostrate tutte le righe del database e non solo quelle con i campi richiesti.

    questa la query:

    codice:
    $cliente = $_POST['cliente'];
    $targa = $_POST['targa'];
    
    
    $cerca = mysql_query ("SELECT * FROM MiaTabella WHERE `targa` = '$targa' OR `cliente` = '$cliente'");
    
    
    echo "
        <table border>
        <tr><th colspan='3'>Risultati Ricerca</tr>
        <tr><th>Id<th>Targa<th>Cliente<th>Vettura</tr>
    ";
    
    
    while ($riga = mysql_fetch_row($cerca)){
        echo "<tr><td>$riga[0]<td>$riga[2]<td>$riga[5]<td>$riga[1]";
    }
    
    
    echo "</table>";
    mi sapreste indicare dove sbaglio ?

    grazie
    Se volete che la funzione di un programma non venga scoperta dall'utente, descrivetela nella documentazione...

  2. #2
    AND al posto di OR nella query.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    302
    Quote Originariamente inviata da satifal Visualizza il messaggio
    AND al posto di OR nella query.
    buongiorno satifal,
    ma se metto la clausola AND al posto di OR verifica sono costretto a specificare nel modulo di ricerca
    entrambe le condizioni ossia il cliente e la targa, se metto solo una delle due non mi restituisce nulla
    Se volete che la funzione di un programma non venga scoperta dall'utente, descrivetela nella documentazione...

  4. #4
    La condizione corretta è l'AND è la query che così com'è non va bene. Devi comporla dinamicamente in base alla presenza o meno dei vari parametri:

    Codice PHP:
    <?php
    $cliente 
    $_POST['cliente'];
    $targa $_POST['targa'];

    $query "SELECT * FROM MiaTabella WHERE 1";

    if (!empty(
    $cliente)) {
        
    $query .= " AND `cliente` = '$cliente'";
    }
    if (!empty(
    $targa)) {
        
    $query .= " AND `targa` = '$targa'";
    }

    echo 
    $query;

    $cerca mysql_query($query);
    ...
    ?>
    "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 2010
    Messaggi
    302
    Quote Originariamente inviata da satifal Visualizza il messaggio
    La condizione corretta è l'AND è la query che così com'è non va bene. Devi comporla dinamicamente in base alla presenza o meno dei vari parametri:

    Codice PHP:

    <?php
    $query 
    "SELECT * FROM MiaTabella WHERE 1"; <----- non ho capito 
    ...
    ?>
    buongiorno,
    non ho ben capito questa condizione !!!
    Se volete che la funzione di un programma non venga scoperta dall'utente, descrivetela nella documentazione...

  6. #6
    L'ho inserita esclusivamente per comodità dato che mi permette di risparmiare qualche controllo a codice. Il "WHERE 1" è una condizione sempre vera per cui potrebbe anche essere eliminata. Il WHERE va però inserito nel caso in cui, non sempre vero, sia presente almeno una condizione. Quindi, bisognebbe controllare che vi sia almeno una condizione prima di inserire la clausola WHERE nella query.
    Inserendola sempre, a prescindere, tale controllo può essere evitato infatti mi limito ad inserire le condizioni in AND in caso esse siano presenti.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    302
    Quote Originariamente inviata da satifal Visualizza il messaggio
    L'ho inserita esclusivamente per comodità dato che mi permette di risparmiare qualche controllo a codice. Il "WHERE 1" è una condizione sempre vera per cui potrebbe anche essere eliminata. Il WHERE va però inserito nel caso in cui, non sempre vero, sia presente almeno una condizione. Quindi, bisognebbe controllare che vi sia almeno una condizione prima di inserire la clausola WHERE nella query.
    Inserendola sempre, a prescindere, tale controllo può essere evitato infatti mi limito ad inserire le condizioni in AND in caso esse siano presenti.
    perfetto, ma se costruisco la query in questo modo :

    codice:
    <?php>
    // mi connetto al DBMS
    $myconn = mysql_connect($host, $user, $pass) or die('Errore...');
    
    
    //Mi connetto al database
    mysql_select_db($database, $myconn) or die('Errore...');
    
    
    $cliente = $_POST['cliente'];
    $targa = $_POST['targa'];
    
    
    $query ("SELECT * FROM CommesseOfficina WHERE 1");
    
    
    if (!empty($cliente)) {
        $query .= " AND `cliente` = '$cliente'";
    }
    if (!empty($targa)) {
        $query .= " AND `targa` = '$targa'";
    }
    
    
    echo $query;
    
    
    $cerca = mysql_query($query);
    
    
    echo "
    	<table border>
    	<tr><th colspan='3'>Risultati Ricerca</tr>
    	<tr><th>Id<th>Targa<th>Cliente<th>Vettura</tr>
    ";
    
    
    while ($riga = mysql_fetch_row($cerca)){
    	echo "<tr><td>$riga[0]<td>$riga[2]<td>$riga[5]<td>$riga[1]";
    }
    
    
    echo "</table>";
    
    
    // E chiudiamo la connessione a MySQL
    mysql_close();
    
    
    
    
    ?>
    
    ?>
    non mi restituisce nessun risultato...
    Se volete che la funzione di un programma non venga scoperta dall'utente, descrivetela nella documentazione...

  8. #8
    Beh c'è l'echo $query che te la stampa e puoi verificare se la query è corretta o meno!
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    302
    Quote Originariamente inviata da satifal Visualizza il messaggio
    Beh c'è l'echo $query che te la stampa e puoi verificare se la query è corretta o meno!
    codice:
    $query ("SELECT * FROM CommesseOfficina WHERE 1");
    PHP Fatal error: Function name must be a string in on line 17

    che è proprio la riga $query
    Se volete che la funzione di un programma non venga scoperta dall'utente, descrivetela nella documentazione...

  10. #10
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Se $query è una variabile, e lo è, allora ti manca un = e devi togliere le parentesi.

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.