[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
273
11
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
273
11
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
148
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
273
11
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:
Discussioni simili
Autore Titolo Forum Risposte Data
U PHP bottone per invio mail o ritorno al form PHP 15
T [PHP] Creare Honeypot per form contatti PHP 10
M [PHP] Framework per form complessi (configuratore prodotto) PHP 6
S [PHP] Aiuto creazione form php per completamento modello word PHP 1
U [PHP] form per ricerca multipla: Unknown column 'undefined' in 'where clause' PHP 2
C Come posso integrare il bottone "paga adesso" di paypal e un form php per invio dati? PHP 1
E Correzione per form PHP/HTML PHP 3
A consiglio uso jquery php per mostrare parte di un form PHP 6
L come passare il campo allegato dal file html al fiel php per spedirlo con un form PHP 12
A Pulsante per compilare una form php in automatico con dati presi da un db PHP 6
A form in php o html per raccolta mail PHP 4
A problema con un semplice form per un loggin in php PHP 2
A Form per alimentare un DB con PHP: aiuto!! PHP 17
P Help per form php PHP 4
M file php per inviare dati form PHP 0
S finestra browser php per form-mail PHP 0
G Invio form con PHP PHP 2
M Collegamento tra form html e script php PHP 4
A form PHP prenotazione tramite query PHP 2
A Form php prenotazione di un azienda sanitaria locale presso studio medico PHP 1
L Problemi form Pagina php HTML e CSS 3
V PHP form intersecate PHP 0
C Form email php su pagina index.html? PHP 21
L form multipla php sql,errore in inserimento MySQL 0
L Insert php sql da una form multipla PHP 6
webmachine [PHP] [JAVASCRIPT] Form strano in HTML PHP PHP 1
G Form in php WordPress 0
F [PHP] Form html PHP 2
G FORM HTML E PHP PHP 0
S [PHP] Recupero nome immagine da Form con input file PHP 3
O [PHP] inviare dati da form e script ajax PHP 0
B [PHP] Creare PDF dopo inserimento dati form PHP 4
C [PHP] Form con Inserimento dati dalla maschera e un menù a discesa che prende i dati dal db PHP 1
C [PHP] Form inserimento più menù a discesa PHP 9
D [PHP] Consigli su come creare form PHP 1
A [PHP] Invio automatico dati da form PHP 6
ANDREA20 [PHP] [HTML] crea form di contatto PHP 4
ANDREA20 [PHP] form modulo contattp PHP 5
M HELP FORM CREATO IN PHP PHP 14
L [PHP] Form da select compilare campi automaticamente PHP 1
I [PHP] inviare form con allegato tramite una mail PHP 1
A [PHP] Controllo nome utente form di registrazione PHP 4
B [PHP] Invio mail automatico dopo compilazione form - db PHP 25
P PHP - Leggere una pagina passata con Form e Captcha PHP 0
Angelo Russo [PHP] [HTML] form contatti PHP 0
F [php] sicurezza password form login PHP 2
M [PHP] Problema search form PHP 3
Cosina [PHP] Preservare i campi del form solo se l'invio non ha successo PHP 5
Cosina Andare a capo nel testo della mail ricevuta dal form php PHP 1
N [PHP] filtrare input form di tipo array PHP 0

Discussioni simili