Form estrai da data a data

  • Creatore Discussione Creatore Discussione _LAIL_
  • Data di inizio Data di inizio

_LAIL_

Utente Attivo
19 Set 2013
57
0
6
Salve a tutti chiedo aiuto alla vostra grande esperienza.

Girovagando per la rete sono riuscita a mettere insieme questo sistemino per estrarre dati da mysql filtrando il campo data con un range solo che non funziona :(

PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento senza titolo</title>
</head>

<body>
<form action = "<?php echo $_SERVER['PHP_SELF']; ?>" method = "post">
<p>Da Data: <input type = "text" name = "inizio" ><br>
<p>A Data: <input type = "datetime" name = "fine"><br>
<P><input type="reset"  value="Cancella Date"><br>
<p><input type = "submit" name = "submit" value="Invia">
</form>

<?php
include('connect.php');
if(isset($_POST['inizio']) && isset($_POST['fine'])){
$start = $_POST['inizio'];
$end = $_POST['fine'];
$sql =  "SELECT * FROM gps_porte WHERE DATA_INSERIMENTO >".$start." OR DATA_INSERIMENTO<".$end;
$query = mysql_query($sql);
while($row = mysql_fetch_array($query,MYSQL_ASSOC)){
echo 
$ID=$row['ID'];
$DATA_INSERIMENTO=$row['DATA_INSERIMENTO'];
$CLIENTE=$row['CLIENTE'];
$POSIZIONE=$row['POSIZIONE'];
$DATA_SCADENZA=$row['DATA_SCADENZA'];
$PREZZO=$row['PREZZO'];
$CAUZIONE=$row['CAUZIONE'];
$NOME_CLUB=$row['NOME_CLUB'];
$LINK_LUOGO=$row['LINK_LUOGO'];
$DATA_INIZIO=$row['DATA_INIZIO'];
$LINK_INSEGNA=$row['LINK_INSEGNA'];
$NOTE=$row['NOTE'];
}
}

// CREA CODICE HTML
?>

<body bgcolor ="#808080">
	<table align="center" bgcolor ="#FFA500" width="600" height="25" border=2>
	
<tr>
<td align="center" bgcolor ="#FFA500" width="25"><font color="#000000">ID</font></td>
	<td align="center" bgcolor ="#FFA500" width="150"><font color="#000000">DATA INSERIMENTO</font></td>
<td align="center" bgcolor ="#FFA500" width="60"><font color="#000000">CLIENTE</font></td>
	<td align="center" bgcolor ="#FFA500" width="60"><font color="#000000">POSIZIONE</font></td>
    <td align="center" bgcolor ="#FFA500" width="60"><font color="#000000">DATA SCADENZA</font></td>
<td align="center" bgcolor ="#FFA500" width="60"><font color="#000000">PREZZO</font></td>
<td align="center" bgcolor ="#FFA500" width="60"><font color="#000000">CAUZIONE</font></td>
<td align="center" bgcolor ="#FFA500" width="60"><font color="#000000">NOME CLUB</font></td>
<td align="center" bgcolor ="#FFA500" width="60"><font color="#000000">LINK LUOGO</font></td>
<td align="center" bgcolor ="#FFA500" width="60"><font color="#000000">DATA INIZIO</font></td>
<td align="center" bgcolor ="#FFA500" width="60"><font color="#000000">LINK INSEGNA</font></td>
<td align="center" bgcolor ="#FFA500" width="60"><font color="#000000">NOTE</font></td>



<tr>
<td align="center" width="25" height="25">
	<font color="#0000FF"><?php echo $ID;?></td>
<td align="center" width="60" height="25">
	<font color="#0000FF"><?php echo $DATA_INSERIMENTO;?></font></td>
<td align="center" width="60" height="25">
	<font color="#0000FF"><?php echo $CLIENTE;?></font></td>
<td align="center" width="60" height="25">
	<font color="#0000FF"><?php echo $POSIZIONE;?></font></td>
    <td align="center" width="60" height="25">
	<font color="#0000FF"><?php echo $DATA_SCADENZA;?></font></td>
<td align="center" width="60" height="25">
	<font color="#0000FF"><?php echo $PREZZO;?></font></td>
<td align="center" width="60" height="25">
	<font color="#0000FF"><?php echo $CAUZIONE;?></font></td>
<td align="center" width="60" height="25">
	<font color="#0000FF"><?php echo $NOME_CLUB;?></font></td>
<td align="center" width="60" height="25">
	<font color="#0000FF"><?php echo $LINK_LUOGO;?></font></td>
<td align="center" width="60" height="25">
	<font color="#0000FF"><?php echo $DATA_INIZIO;?></font></td>
<td align="center" width="60" height="25">
	<font color="#0000FF"><?php echo $LINK_INSEGNA;?></font></td>
<td align="center" width="60" height="25">
	<font color="#0000FF"><?php echo $NOTE;?></font></td>

</table>
<br>
</body>
</html>



non riesco a capire il perche non funziona non da errori ma non estrae i dati :( .

Grazie per il vostro aiuto.
 
ciao
lavorare con le date è sempre una rogna, alcune cose:
1) come è formattata la data?
vedo dai campi di input che uno è tipo text e uno tipo datatime, sarebbe bene che fossero dello stesso tipo
è importante come la data è formattata perche es. se risulta
PHP:
<?php
$start="15/01/2013";
$end ="01/12/2013";
?>
hai che (ricorda è un confronto di stringhe)
$start maggiore di $end, il che è assurdo (anche l'uso dei separatori è importante)
2)indipendentemente ti conviene verificare le date (es. 31/02/2013 non è una data valida)
3)visto che fai tutto nella stessa pagina racchiudi la ricerca nel db e la visualizzazione tra
PHP:
<?php
if(isset($_POST['submit'])){
	//parte di ricerca php
	//e parte html di visualizzazione
}
?>
4) usa nei nomi delle variabili e dei campi sempre le minuscole, può sembrare più semplice, ma l'uso del maiscolo è spesso fonte di errori
5) poi abbandona le vecchie istruzioni mysql e passa alle mysqli o alla classe pdo, le mysql sono deprecate e tra poco non funzioneranno più
quindi dimmi intanto come sono formattate le date, poi ti so dire
 
ciao
ecco un esempio (didattico) di come farei io per cercare di evitare alcuni errori
se leggi i commenti dovresti capire quello che ho fatto
PHP:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Documento senza titolo</title>
</head>
<body>
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post">
  <!--lo metto in una tabella per formattarlo meglio -->
  <table width="50%"  border="0" cellspacing="0" cellpadding="3">
    <tr>
      <th width="25%">&nbsp;</th>
      <th width="25%">giorno</th>
      <th width="25%">mese</th>
      <th width="25%">anno</th>
    </tr>
    <tr>
      <!--separo i campi di input per cercare di avere il più possibile uniformità di inserimento -->
	  <td>da data</td>
      <td><input name="g_inizio" type="text" id="g_inizio" size="2" maxlength="2"></td>
      <td><input name="m_inizio" type="text" id="m_inizio" size="2" maxlength="2"></td>
      <td><input name="a_inizio" type="text" id="a_inizio" size="4" maxlength="4"></td>
    </tr>
    <tr>
      <td>a data</td>
      <td><input name="g_fine" type="text" id="g_fine" size="2" maxlength="2"></td>
      <td><input name="m_fine" type="text" id="m_fine" size="2" maxlength="2"></td>
      <td><input name="a_fine" type="text" id="a_fine" size="4" maxlength="4"></td>
    </tr>
    <tr>
      <td><input type="reset" name="reset" value="reset"></td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td><input name="invia" type="submit" id="invia" value="invia"></td>
    </tr>
  </table>
</form>
<?php
if(isset($_POST['invia'])){//verifico di aver dato il submit
	//inizio a verificare i dati
	//metto una variabile per verificare gli errori
	$errori="";//rimane vuota se non ci sono errori
	//verifico la correttezza delle date
	if(checkdate( $_POST['m_inizio'] , $_POST['g_inizio'], $_POST['a_inizio']){
		//la data è giusta quindi la formatto
		$inizio= $_POST['a_inizio']."-".$_POST['m_inizio']."-".$_POST['g_inizio'];
	}else{
		//ho fatto uno o più errori
		$errori.="la data di inizio non è una data valida<br />";
	}
	//analogo per la data fi fine
	if(checkdate( $_POST['m_fine'] , $_POST['g_fine'], $_POST['a_fine']){
		$fine= $_POST['a_fine']."-".$_POST['m_fine']."-".$_POST['g_fine'];
	}else{
		$errori.="la data di fine non è una data valida<br />";
	}
	//verifico che la data di inizio non sia maggiore della data di fine
	if($inizio > $fine){$errori.="la data di inizio non pu&ograve; essere maggiore di quella di fine<br />";}
	//verifico se ho commesso errori, se si $errori non è rimasta vuota
	if($errori !=""){
		//mostro gli errori e torno in automatico al form pulito dopo 3 secondi (il content = '3;...)
		echo $errori;
		echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
	}else{
		//mi connetto al database
		require_once "connect.php";//meglio usare il require dell'include
		//qui uso le vecchie mysql perche per passare a mysqli devi modificare anche connect.php
		$query="SELECT * FROM gps_porte WHERE data_inserimento BETWEEN '$inizio' AND '$fine'";
		$ris=mysql_query($query);
		//ti conviene verificare che ci siano dati che soddisfino la condizione
		if(mysql_num_rows($ris)==0){
			//non ci sono risultati
			echo "<h2>non ci sono dati per le condizioni richieste</h2>";
			echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
		}else{
			echo "<table>";//usa i css esterni es <table class=pinco">
			echo "<tr><th>ID</th><th>DATA INSERIMENTO</th><th>CLIENTE</th><th>POSIZIONE</th>
				  <th>DATA SCADENZA</th><th>PREZZO</th><th>CAUZIONE</th><th>NOME CLUB</th>
				  <th>LINK LUOGO</th><th>DATA INIZIO</th><th>LINK INSEGNA</th><th>NOTE</th></tr>";
			//e inizi a estrarre i dati
			while($riga=mysql_fetch_array($ris)){
				echo "<tr>";
				/*se per inserire es. il nome del cliente hai usato addslashes (spero di si)
				ricordati di urase stripslashes
				es. echo "<td>".stripslashes($riga['cliente'])."</td>";*/
				echo "<td>".$riga['id']."</td>";
				echo "<td>".$riga['data_inserimento']."</td>";
				echo "<td>".$riga['cliente']."</td>";
				echo "<td>".$riga['posizione']."</td>";
				echo "<td>".$riga['data_scadenza']."</td>";
				echo "<td>".$riga['prezzo']."</td>";
				echo "<td>".$riga['cauzione']."</td>";
				echo "<td>".$riga['nome_club']."</td>";
				echo "<td>".$riga['link_luogo']."</td>";
				echo "<td>".$riga['data_inizio']."</td>";
				echo "<td>".$riga['link_insegna']."</td>";
				echo "<td>".$riga['note']."</td>";
				echo "</tr>";
			}
			echo "</table>";
			//e qui ti conviene mettere due link "ripeti ricerca" e "esci"
			echo "<br /><a href=\"".htmlspecialchars($_SERVER['PHP_SELF'])."\">ripeti ricerca</a>&nbsp;&nbsp;
				  <a href=\"index.php\">esci</a>";
		}
	}
}
?>
</body>
</html>
guarda però che ho usato il mio stile, quindi correggi i vari nomi varibile e campi della tabella
inoltre, se vuoi provarlo, verifica che non abbia fatto qualche errore perche l'ho buttato giu di brutto senza verificare
se provando ti da errori dimmelo indicando quali (posta i warning) e il numero di riga o la riga
 
Granzie per tutto il tempo che ci stai perdendo

Allora non funziona nel senso che inserisco i dati ma non tira fuori nulla azzerai campi ma non da risultati e nemmeno errori ( nella riga 44 e 52 mancavano le parentesi ).
 
Potrebbe essere che il campo nel db mysql e in formato date e per quello non estrae i dati?
 
Stampa gli eventuali errori SQL
PHP:
$query = "SELECT * FROM gps_porte WHERE data_inserimento BETWEEN '$inizio' AND '$fine'";
$ris = mysql_query($query);
if (!$ris) {
    echo "Errore query " . $query . " " . mysql_error();
}
molto comodi in fase di sviluppo
inizia anche a studiarti mysqli o PDO
 
ciao
aggiungo a quello che ha detto criric, metti un var_dump che poi toglierai
PHP:
$query = "SELECT * FROM gps_porte WHERE data_inserimento BETWEEN '$inizio' AND '$fine'";
var_dump($query);
$ris = mysql_query($query);
if (!$ris) {
    echo "Errore query " . $query . " " . mysql_error();
}
e verifica che la query sia scritta come dovrebbe
poi con myadmin verifica il formato delle date in tabella, anzi meglio copia il valore di in campo data e postalo

dimenticavo:
guarda che io ho scritto i nomi dei campi in minuscolo, se tu li ai in maiscolo correggili nel mio script o li metti in minuscolo anche nella tabella (meglio)
 
Ultima modifica:
Allora non restituisce errori i campi nella query sono scritti bene il campo data_inserimento e in formato date e il campo lo scrive cosi 2013-07-29.
 
hai messo il var_dump suggerito da Borgo?
posta la query come te la stampa
 
Scusate ragazzi sicuramente sono io ad essere ebete e non capire dopo aver inserito i campi di ricerca e lanciato laquesry non mi restituisce nulla nemmeno mettendo il var_dump se lancio la query dal phpadmin funziona :(
 
cioa
intanto alla riga
PHP:
    if(checkdate( $_POST['m_fine'] , $_POST['g_fine'], $_POST['a_fine'])){//aggiungi una parentesi
poi sino alla riga
PHP:
        $query="SELECT * FROM gps_porte WHERE data_inserimento BETWEEN '$inizio' AND '$fine'";
		var_dump($query);//questo è cosa da: string(84) "SELECT * FROM gps_porte WHERE data_inserimento BETWEEN '2013-10-01' AND '2013-12-13'"
sembrerebbe andare tutto bene
ora provo a costruirmi la tabella e faccio delle prove (se hai pazienza)
 

Discussioni simili