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

    [PHP MySQL] Ricerca dei record

    Ciao a tutti, ho 2 select e 1 input con cui eseguo la ricerca dei dati in modo non combinato (il codice dice tutto)..
    Vorrei poter giostrare la ricerca anche in modo combinato, cioè devono valere nella ricerca solo i campi selezionati/digitati, sia singolarmente che combinati tra di loro. Spero di essermi spiegato..

    Al momento filtro la ricerca con i singoli campi come segue: se uno dei 3 campi sono selezionati/digitati, la ricerca viene eseguita, ma se ne seleziono/digito più di uno non ottengo nulla perchè le condizioni vanno in crisi tra di loro. Come posso risolvere?

    codice:
    <form action="#" method="POST">
        <select name="titolo">
            <option value="">Seleziona una voce...</option>
            <option value="1">a</option>
            <option value="2">b</option>
            <option value="3">c</option>
            <option value="4">d</option>
        </select>
        <select name="stato">
            <option value="">Seleziona una voce...</option>
            <option value="1">a</option>
            <option value="2">b</option>
            <option value="3">c</option>
            <option value="4">d</option>
        </select>
        <input type="text" name="pratica" />
        <button type="submit" name="submit">Cerca</button>
    </form>
    
    if(isset($_POST['submit']))
        {
        $pratica = $_POST['pratica'];
        $titolo = $_POST['titolo'];
        $stato = $_POST['stato'];
    
    
        $query_sql = 'SELECT * FROM pratiche WHERE 1=1';
    
    
        if($titolo != null)
            {
            $val = $titolo;
            $query_sql .= ' AND pratiche.desc = ?';
            }
        else
            {
            $_POST['titolo'] = false;
            }
            
        if($stato != null)
            {
            $val = $stato;
            $query_sql .= ' AND pratiche.status = ?';
            }
        else
            {
            $_POST['stato'] = false;
            }
    
    
        if(!empty($pratica))
            {
            $val = '%'.$pratica.'%';
            $query_sql .= ' AND pratiche.name LIKE ?';
            }
        else
            {
            $_POST['pratica'] = false;
            }
    
    
        require("../conn.php");
        try { $connessione = "mysql:host=$host; dbname=$db; charset=utf8"; $connessione = new PDO ($connessione, "$user", "$password"); $connessione -> setAttribute (PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $query = $connessione -> prepare ("$query_sql");
        $query -> execute(array($val));
        $connessione = null; } catch (PDOException $e) { /*echo $e -> getMessage();*/ die(); }
        while ($r = $query->fetch())
            {
            *risultati*
            }
        }

  2. #2
    Utente di HTML.it L'avatar di m4rko80
    Registrato dal
    Aug 2008
    residenza
    Milano
    Messaggi
    2,655
    Ciao, per combinare i filtri dovresti usare OR, a seconda di come li vuoi combinare ovviamente.
    Esempio:
    SELECT * FROM tabella WHERE (pratica = $pratica ) or ( stato = $stato)..
    e così via, piuttosto che solo AND . Concatenando con gli AND se compili tre campi tutti i campi dovranno contenere quello che hai richiesto

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.