[PHP][MYSQL] Ricerca avanzata tramite form

Emix

Utente Attivo
15 Feb 2010
596
0
16
Buongiorno a tutti,
ho un problema che non riesco a risolvere, ma probabilmente è una questione di logica.

Io ho un form in cui posso scegliere tra due checkbox, inserire una data inizio e una fine, selezionare da un elenco una stazione.
La pagina dopo dovrebbe fare una SELECT e mostrare a video i risultati in base a cosa ha selezionato l'utente nella pagina prima, come una comunissima ricerca avanzata... Il form è questo:

HTML:
<form action="search_validate.php" method="post">
Data inizio <input type="date" name="datain" value="" placeholder="AAAA-MM-DD" /><br />
Data fine <input type="date" name="dateout" value="" placeholder="AAAA-MM-DD" /><br />SCP:<BR />
SI <input type="checkbox" value="si" name="SCPSI" /><br />
NO<input type="checkbox" value="no" name="SCPNO" /><br>FLOTTA:<br />
COURTESY <input type="checkbox" value="Courtesy" name="courtesy" /><br />
POOL <input type="checkbox" value="Pool" name="Pool" /><br>
<font face="Eras Medium ITC">Stazione:</font></td><td>
<select name="Stazione" id="Stazione" class="bootstrap-frm">
<option value="">Scegli la stazione</option>
<option value="TUTTE">TUTTE</option>
<option value="STAZIONE1">STAZIONE1</option>
<option value="STAZIONE2">STAZIONE2</option>
<option value="STAZIONE3">STAZIONE3</option>
<option value="STAZIONE4">STAZIONE4</option>
<option value="STAZIONE5">STAZIONE5</option>
<option value="STAZIONE6">STAZIONE6</option>
<option value="STAZIONE7">STAZIONE7</option>
<option value="STAZIONE8">STAZIONE8</option>
<option value="STAZIONE9">STAZIONE9</option>
<option value="STAZIONE10">STAZIONE10</option>
<option value="STAZIONE11">STAZIONE11</option>
</select><br />
<input id="button" style="margin-left: 10px;" value="Cerca" type="Submit">
</form>

Il codice PHP prima si preoccupa di verificare se è stato selezionato qualcosa, altrimenti assegna 0 come value. Recupera i dati della select e delle date.

Ora il problema sorge qua... come faccio a costruire una query in base agli input dati nella pagina precedente? In questa caso io posso avere o 1 stazione specifica o TUTTE, o una flotta specifica o TUTTE o un campo SCP specifico o TUTTE nell'intervallo delle date inserite....

Sto uscendo pazzo....

Grazie a chi vuole rispondere
 

marino51

Utente Attivo
28 Feb 2013
3.204
207
63
Lombardia
ho strutturato il tuo script per fare delle prove con la soluzione proposta,
PHP:
<?php
if (empty($_POST['cerca']))
{
?>
<form action="ricerca.php" method="post">
Data inizio <input type="date" name="datain" value="" placeholder="AAAA-MM-DD" /><br />
Data fine <input type="date" name="dateout" value="" placeholder="AAAA-MM-DD" /><br />
SCP:<BR />
SI <input type="checkbox" value="si" name="SCPSI" /><br />
NO<input type="checkbox" value="no" name="SCPNO" /><br>
FLOTTA:<br />
COURTESY <input type="checkbox" value="Courtesy" name="courtesy" /><br />
POOL <input type="checkbox" value="Pool" name="Pool" /><br>
<font face="Eras Medium ITC">Stazione:</font></td><td>
<select name="Stazione" id="Stazione" class="bootstrap-frm">
<option value="">Scegli la stazione</option>
<option value="TUTTE" selected>TUTTE</option>
<option value="STAZIONE1">STAZIONE1</option>
<option value="STAZIONE2">STAZIONE2</option>
<option value="STAZIONE3">STAZIONE3</option>
<option value="STAZIONE4">STAZIONE4</option>
<option value="STAZIONE5">STAZIONE5</option>
<option value="STAZIONE6">STAZIONE6</option>
<option value="STAZIONE7">STAZIONE7</option>
<option value="STAZIONE8">STAZIONE8</option>
<option value="STAZIONE9">STAZIONE9</option>
<option value="STAZIONE10">STAZIONE10</option>
<option value="STAZIONE11">STAZIONE11</option>
</select><br />
<input name="cerca" id="button" style="margin-left: 10px;" value="Cerca" type="Submit">
</form>
<?php
}
else
{
    if (empty($_POST['datain']))  $datain="1900-01-01";
    else                          $datain=$_POST['datain'];

    if (empty($_POST['dateout'])) $dateout="9999-12-31";
    else                          $dateout=$_POST['dateout'];

    $sql = "SELECT column_name(s) FROM table_name WHERE column_date BETWEEN '".$datain."' AND '".$dateout."'";

    if (!empty($_POST['SCPSI']))    $sql .= " AND condizione per scpsi";

    if (!empty($_POST['SCPNO']))    $sql .= " AND condizione per scpno";

    if (!empty($_POST['courtesy'])) $sql .= " AND condizione per courtesy";

    if (!empty($_POST['Pool']))     $sql .= " AND condizione per Pool";

    if (!empty($_POST['Stazione']) and $_POST['Stazione'] != "TUTTE") $sql .= " AND column_stazione = '".$_POST['Stazione']."'";

    echo $sql;
}
?>

ho modificato anche,
<option value="TUTTE" selected>TUTTE</option>
<input name="cerca" id="button" style="margin-left: 10px;" value="Cerca" type="Submit">

questo è "un" risultato
SELECT column_name(s) FROM table_name WHERE column_date BETWEEN '1900-01-01' AND '2017-08-01' AND condizione per scpsi AND condizione per courtesy AND column_stazione = 'STAZIONE6'

ps, non ho volutamente inserito logiche di controllo, vedi SI o NO, COURTESY o POOL
che lascio a te, che conosci l'applicazione

le clausole che seguono la where possono essere complicate con AND e OR (e LIKE) secondo la necessità
 
Ultima modifica:

Emix

Utente Attivo
15 Feb 2010
596
0
16
Ciao Marino e grazie per la risposta.
Funziona tutto egregiamente soltanto che giustamente non funzionano le doppie spunte. Mi spiego. A me servirebbe poter scegliere anche entrambe le scelte ES: SCP si e SCP no. In quel caso anche se la condizione che crei è giusta, non funziona per la query non stampa nulla. Come posso fare nel caso in cui mi servissero entrambi ? Mettiamo un ulteriore checkbox o c'è un modo diverso ?

Grazie
 

marino51

Utente Attivo
28 Feb 2013
3.204
207
63
Lombardia
A me servirebbe poter scegliere anche entrambe le scelte ES: SCP si e SCP no
Si e NO è applicato allo stesso campo ed i valori sono solo i due indicati ?
se la risposta è positiva, la doppia spunta equivale ad estrarre tutto, basta mettere un "if" che in caso di doppia spunta non inserisca nessuna della due condizioni
se la risposta è negativa, quali sono le definizioni del campo(o campi), i contenuti e come deve operare la scelta ?

per courtesy/pool vale lo stesso discorso
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
Nono hai capito perfettamente. sono solamente due o si o no e in caso di flotta sono soltanto due, pool e corutesy.
 

marino51

Utente Attivo
28 Feb 2013
3.204
207
63
Lombardia
may be ...
PHP:
    $sql = "SELECT column_name(s) FROM table_name WHERE column_date BETWEEN '".$datain."' AND '".$dateout."'";

    if (empty($_POST['SCPSI']) or empty($_POST['SCPNO']))
    {
        if (!empty($_POST['SCPSI']))    $sql .= " AND condizione per scpsi";

        if (!empty($_POST['SCPNO']))    $sql .= " AND condizione per scpno";
    }

    if (empty($_POST['courtesy']) or empty($_POST['Pool']))
    {
        if (!empty($_POST['courtesy'])) $sql .= " AND condizione per courtesy";

        if (!empty($_POST['Pool']))     $sql .= " AND condizione per Pool";
    }

    if (!empty($_POST['Stazione']) and $_POST['Stazione'] != "TUTTE") $sql .= " AND column_stazione = '".$_POST['Stazione']."'";
 
Ultima modifica:

Emix

Utente Attivo
15 Feb 2010
596
0
16
Come sempre gentilissimo. è corretto. Grazie mille.
 
Discussioni simili
Autore Titolo Forum Risposte Data
MarcoGrazia [PDO][PHP[MySQL] Piccolo modulo di ricerca in un sito tramite l'operatore LIKE Snippet PHP 1
R Barra ricerca php e mysql PHP 0
R Ricerca Email in database mysql con php PHP 2
G Visualizzazion modulo di ricerca in PHP e MySql PHP 0
F Ricerca avanzata PHP & MySQL PHP 4
W [Php - MySql] ricerca con form select diversi PHP 14
P Codifica caratteri speciali mysql php PHP 0
F Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili PHP 20
L tipo boolean non funzionante su mariadb (mysql). E codice php 7.4. PHP 0
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5
F Ricreare struttura php+mysql su Xampp Apache 0
M Array associativi php su 2 campi mysql PHP 10
L php mysql non salva solo id PHP 21
L php mysql cerca e visualizza pagina PHP 0
R Aggiornare record mysql con Ajax, jQuery e php Ajax 2
Z MySql injection PHP PHP 1
D problema php mysql PHP 1
D problema php mysql PHP 1
L Google chart php mysql PHP 2
L Aiuto per programma web php/mySQL PHP 2
S Problemi delle funzioni eliminate con PHP e MySQL PHP 4
C Aiuto compiuto scuola PHP/MySQL PHP 2
G Problema caricamento tabelle MySql da PhP PHP 0
L update tabelle in php mysql [risolto] PHP 6
F Passare una variabile php dal DB mysql alla pagina PHP 3
B Fare calcoli con php da tabella mysql PHP 2
D [MySQL] [PHP] SQL andare da capo MySQL 0
P [OFFRO] Realizzazione siti web in PHP/MYSQL, responsive e Ottimizzati SEO Offerte e Richieste di Lavoro e/o Collaborazione 0
Tommy03 Firebase o PHP+Mysql? Sviluppo app per Android 0
pjtertdj Visualizzazione dati in php da mysql con funzione matematica in javascript PHP 1
E Cerco programmatore PHP/Mysql - retribuito Offerte e Richieste di Lavoro e/o Collaborazione 0
K [RISOLTO] Problema Griglia Php+Mysql PHP 13
Z Gestionale in Php/mysql: Quanto farsi pagare? Aiuto! Discussioni Varie 0
E Inserimento dati da PHP in tabella MySQL PHP 5
R radio input php mysql PHP 2
E Caricare dati da DB MySql all'apertura pagina, meglio PHP o Javascript? PHP 1
giusebos [retribuito] Cercasi programmatore PHP/MySql Offerte e Richieste di Lavoro e/o Collaborazione 1
N Apache + MySQL + PHP MacOs Mojave Web Server 0
T PHP+MYSQL: problema con quelle maledette lettere accentate... PHP 5
K [PHP + MYSQL ] Inserimento dati in database da form dinamico PHP 13
M [PHP] Metodo migliore per fare login a un DB Mysql PHP 1
gandalf1959 problema con la codifica caratteri accentati e speciali tra php e mysql PHP 3
webmachine [PHP][MYSQL] Problema con le SELECT PHP 5
V Creare tabella mysql con php non funziona PHP 1
W Area riservata sicura PHP MySQL PHP 12
G php salvare file in campo blob mysql: massimo 4MB PHP 1
xone [Vendo] Gestionale Magazzino PHP-MYSQL Altri Annunci 0
M Stampare con php e mysql PHP 8
P Importazione dati da file xml in db mysql con php PHP 17
xone [Vendo] Script gestionale php-mysql gestione pratiche Altri Annunci 0

Discussioni simili