[PHP] Form per creare filtro di ricerca su DB

sandropochi

Nuovo Utente
10 Mar 2017
8
0
1
Salve a tutti.
Cerco un semplice script in php che permetta l'inserimento di filtri da passare al comando SELECT di una query.
Praticamente io ho un database con dei corsi che si svolgono in varie città, ogni corso può svolgersi in varie lingue e ogni corso può appartenere ad una diversa categoria.
Lo script che vorrei deve permettere all'utente di selezionare, da una casella a discesa, (prendendo i dati dal DB), la città, la lingua e la categoria del corso.
Premendo "Cerca" il form passa le variabili alla query che, con il comando SELEC, visualizzerà sullo schermo i corsi che hanno le caratteristiche richieste.
Ho fatto delle prove ma non ho capito come "passare" più di una variabile alla Query. (Array?)
Con una sola variabile riesco...
Grazie.
 

zorro

Utente Attivo
20 Ott 2014
237
10
18
ROMA
Ciao,
si, se la scelta da passare è una sola, ad es. tramite radio-button, ti basta una semplice variabile, as es.:

PHP:
<option value="scelta"..........
mentre se le scelte sono più di una (check-box) ti occorre un array:

PHP:
<option value="scelte[]"..........
 

sandropochi

Nuovo Utente
10 Mar 2017
8
0
1
form.png

Questo è il form...
Dopo aver scelto Lingua, Location, Category e le date inizio e fine, tali variabili dovrebbero passare alla query la quale dovrebbe restituire solo i record in possesso di tali caratteristiche.
Quando la variabile era una sola io passavo, per esempio:

$confirm=$_REQUEST['confirm'];
$id=$_REQUEST['id_category'];
Adesso che sono più di una come passo i valori?
 

zorro

Utente Attivo
20 Ott 2014
237
10
18
ROMA
Ciao,
penso che nel tuo caso non sia necessario un array comunque,s se mi dai un po' di tempo, faccio
qualche prova e ti faccio sapere. Ciao
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
se non ho capito male con i dati inviati dal form vuoi costruire la query di estrazione, giusto?
ti schematizzo
PHP:
<?php
//......
$wh =" WHERE 1=1 ";
$ord="";
//tralascio i controlli sui valori importanti soprattutto per le date
if(!empty($_POST['data_inizio']) && !empty($_POST['data_fine'])){
    //questo non so di preciso come sia la tua data o le date
    //se hai un campo solo 'data' o due campi 'data_fine' e 'data_inizio'
    //hho fatto finta che tu abbia un campo solo
    $wh .= " AND data BETWEEN '".$_POST['data_inizio']."' AND ".$_POST['data_fine']."' ";
}
if(!empty($_POST['lingua'])){
    $wh .= " AND lingua ='".$_POST['lingua']."' ";
}
if(!empty($_POST['categoria'])){
    $wh .= " AND categoria ='".$_POST['categoria']."' ";
}
if(!empty($_POST['locatione'])){
    $wh .= " AND locazione ='".$_POST['locazione']."' ";
}
if(!empty($_POST['ordina'])){
    $ord = " ORDER BY ".$_POST['ordina']." ";
}
//e quindi costruisci la quesry
$query ="SELECT * FROM tabella $wh $ord";
//.....
?>
 

zorro

Utente Attivo
20 Ott 2014
237
10
18
ROMA
Ciao,
ho fatto delle prove e ti mando anche il mio codice:


home.php:

PHP:
<?php

//---------------------LEGGO IL DB------------------

include('conn.php');
$connessione = new mysqli($host, $user, $password, $db);

// verifica su eventuali errori di connessione
if ($connessione->connect_errno) {
    echo "Connessione fallita: ". $connessione->connect_error . ".";
    exit();
}

if (!$result = $connessione->query("SELECT * FROM CORSI")) {
    echo "Errore della query: " . $connessione->error . ".";
} else {
    // conteggio dei record
    if ($result->num_rows > 0) {
        while($row = $result->fetch_array(MYSQLI_ASSOC)) {
              $citta = $row['CITTA'];
              $lingua = $row['LINGUA'];
              $tipologia = $row['TIPOLOGIA'];

              $arcitta[] = $citta;
              $arlingua[] = $lingua;
              $artipologia[] = $tipologia;
        }
    }
}

// chiusura della connessione
$connessione->close();

echo '<form method="get" action="esegui.php">';
$arcittaok=array_unique($arcitta);
echo 'scegli la citta\': ';
echo '<select name="citta">';
      echo '<option value="  " selected>Effettua una scelta</option>';
      foreach ($arcittaok as $citta) {
          echo '<option value="'.$citta.'">'.$citta.'</option>';
      }
echo '</select>';


$arlinguaok=array_unique($arlingua);
echo '<br><br>scegli la lingua: ';
echo '<select name="lingua">';
      echo '<option value="  " selected>Effettua una scelta</option>';
      foreach ($arlinguaok as $lingua) {
          echo '<option value="'.$lingua.'">'.$lingua.'</option>';
      }
echo '</select>';


$artipologiaok=array_unique($artipologia);
echo '<br><br>scegli la tipologia: ';
echo '<select name="tipologia">';
      echo '<option value="  " selected>Effettua una scelta</option>';
      foreach ($artipologiaok as $tipologia) {
          echo '<option value="'.$tipologia.'">'.$tipologia.'</option>';
      }
echo '</select>';


echo '<br><br><br><br><input type="submit" name="invia" value="Invia i dati">';
echo '</form>';
?>

ed esegui.php


PHP:
<?php
$citta = $_GET['citta'];
$lingua = $_GET['lingua'];
$tipologia = $_GET['tipologia'];

$condizione = 'CITTA = \''.$citta.'\' AND LINGUA = \''.$lingua.'\' AND TIPOLOGIA = \''.$tipologia.'\'';
//echo $condizione;



//---------------------LEGGO IL DB------------------

include('conn.php');
$connessione = new mysqli($host, $user, $password, $db);

// verifica su eventuali errori di connessione
if ($connessione->connect_errno) {
    echo "Connessione fallita: ". $connessione->connect_error . ".";
    exit();
}

// (!$result = $connessione->query("SELECT * FROM CORSI where $condizione")) {
if (!$result = $connessione->query("SELECT * FROM CORSI where $condizione")) {
    echo "Errore della query: " . $connessione->error . ".";
} else {
    // conteggio dei record
    if ($result->num_rows > 0) {
        while($row = $result->fetch_array(MYSQLI_ASSOC)) {
              $id = $row['ID_CORSO'];
              $citta = $row['CITTA'];
              $corso = $row['CORSO'];
              $lingua = $row['LINGUA'];
              $tipologia = $row['TIPOLOGIA'];          
              $costo = $row['COSTO'];

              echo "$id $citta $corso $lingua $tipologia $costo<br>";
        }
    }
}

// chiusura della connessione
$connessione->close();


?>

In conn.php sono contenute le variabili per la connessione (hostname, password, DB ecc.). Per le prove ho creato una tabella (CORSI). Non è necessario un array per il passaggio delle variabili: bastano 3 norrmali variabili che io ho chiamato citta (sede del corso), lingua e tipologia.
Il programma comincia con la lettura dell'intera tabella e, da ogni record, preleva i campi citta, lingua e tipologia, che poi inserisce in altrettanti array dopodiché, con la funzione array_unique() elimino i doppioni, quindi inserisco gli elementi dei nuovi array in altrettante select-box quindi, una volta scelta la sede del corso, la lingua e la tipologia di corso, il programma rilegge l'intera tabella estraendone solo i recordsd che rispondono a quella particolare condizione (citta, lingua e tipologia)
Ovviamente io ho usato dei dati di prova: tu poi dovrai adattarlo alle tue esigenze (ricordati di sostituire il metodo GET col metodo POST)



Zorro
 
Ultima modifica: