Form ricerca due date stesso campo

  • Creatore Discussione Creatore Discussione lelemkop
  • Data di inizio Data di inizio

lelemkop

Utente Attivo
2 Lug 2013
55
0
6
Ciao a tutti. Ho un problema che non riesco a risolvere.
Ho una tabella dove c'è un campo data (datatime) dove va inserito automaticamente la data e l'ora di inserimento. Quindi 2013-09-02 12:00:00. Per me questo campo è fondamentale. Ora volevo fare un form di ricerca intervallato tra due date ( per ora perchè dopo mi serve anche l'ora).
Ho provato questa query
PHP:
$query = "SELECT * FROM clientiWHERE 1=1";
    $w_data="";
    if ($data !=""){$w_data=" between '%".$data."%' AND '%".$data."%'";}
    $w_intervento=""; 
    if($intervento != ""){$w_intervento=" AND intervento LIKE '%".$intervento ."%' ";}
    $w_cognome=""; 
    if($cognome!=""){$w_cognome=" AND cognome LIKE '%".$cognome."%' ";} 
    $w_nome=""; 
    if($nome!=""){$w_nome=" AND nome LIKE '%".$nome."%' ";} 
    $query .=$w_intervento .$w_cognome.$w_nome.$w_data."  ORDER BY id";
Non mi restituisce alcun risultato, mentre se vado su phpmysql inserendo
PHP:
SELECT * 
FROM  `clienti` 
WHERE data
BETWEEN  '2013-07-05%'
AND  '2013-07-12%'
LIMIT 0 , 30
funziona correttamente. Come posso fare?
Nel form ricerca ho messo così
PHP:
<input id="data" name="data" type="date">
     <input id="data" name="data" type="date">
E' stato inserito due volte perché mi serve "da" "a" praticamente.

Grazie
 
Ciao, non ho visto bene tutto , ma , between non richiede le percentuali (%) come il like
cambia
PHP:
$w_data=" between '%".$data."%' AND '%".$data."%'";
con
PHP:
$w_data=" between '".$data."' AND '".$data."'";
 
L'ho cambiato, ma non cambia niente.
L'avevo messi perchè l campo data è un datetime quindi anche con l'orario ed in formato Anno mese e giorno...
Non saprei perchè se inserisco
PHP:
SELECT * FROM clienti WHERE 1=1 and data like '%".$data."%'";
quindi un giorno solo mi restituisce i risultati cercati.
 
Ultima modifica:
stampa la query prima di eseguirla
PHP:
echo $query;
controlla se ti sembra a posto e postala
 
mi restituisce questo, anche se io avevo chiesto da 5 al 12 ( ho visto che al 12 non c'è nessuna riga)
"SELECT * FROM clienti WHERE 1=1 between '%2013-07-12%' AND '%2013-07-12%' ORDER BY id"
 
ora vedo l'html
Codice:
<input id="data" name="data" type="date">
     <input id="data" name="data" type="date">
dovresti avere qualcosa cosi
Codice:
<input id="data1" name="data1" type="date">
     <input id="data2" name="data2" type="date">
e poi recuperare le due date separate
$data1 e $data2
 
ho inserito
PHP:
$data= &_POST['data] e $data2= &_POST['data]
ed ho cambiato l'html in
PHP:
<input id="data" name="data" type="date">
     <input id="data2" name="data2" type="date">
Ma ora mi cerca solo la prima data
PHP:
SELECT * FROM interventi WHERE 1=1 between '%2013-07-05%' AND '%2013-07-05%' ORDER BY id
 
Ultima modifica di un moderatore:
non data a tutte e due uno ha name data l'altro data2
PHP:
$data= $_POST['data'];
 $data2= $_POST['data2'];
edit
hai cambiato anche la query vero?
PHP:
$w_data=" between '".$data."%' AND '".$data2."'";
 
Ok però non mi fa vedere i record compresi tra queste due date.
PHP:
SELECT * FROM interventi WHERE 1=1 between '%2013-07-05%' AND '%2013-07-12%' ORDER BY id
 
la sintassi della query
Codice:
SELECT * FROM interventi WHERE 1=1 between '%2013-07-05%' AND '%2013-07-12%' ORDER BY id
è sbagliata, deve essere cosi
Codice:
SELECT * FROM interventi WHERE 1=1 && campodata between '2013-07-05' AND '2013-07-12' ORDER BY id
 
ciao
se è espresso in datatime (wiwa il timestamp) potresti provare a fare (non mi ricordo se c'è anche il gmt)
schematizzo
PHP:
<?php
//.....
$data1=$_POST['data1']."00:00:00";//verifica l'esatta formattazione
$data2=$_POST['data2']."59:59:59";
$query="SELECT * FROM clienti WHERE data BETWEEN '$data1' AND '$data2'"; 
//.....
?>

p.s.
vedo pero che prima nel betwen non metti il nome del campo, come fa php/mysql a capire dove cercare
 
l'avevo notato, però mettendo le && mi dà errore.

PHP:
SELECT * FROM interventi WHERE 1=1 && between '2013-07-05%' AND '2013-07-12%' ORDER BY id errore: qualcosa è andato storto
 
Ho risolto così
PHP:
$w_data="";
    if ($data !=""){$w_data= " and data between '".$data."%' AND '".$data2."%'";}
 
Come hanno già detto gli altri non credo servano i '%' quindi se provi a toglierli dovresti avere lo stesso risultato.
 

Discussioni simili