PHP restituisce il risultato di una query errato

carlo9987

Utente Attivo
5 Mar 2013
35
0
0
Roma
Ciao a tutti!

Da qualche giorno sto cercando di risolvere, senza successo, un problema decisamente strano.

Lavoro con la seguente configurazione: Apache + PHP 5 + SQL Server 2005.

Premetto che se lanciata direttamente su SQL server i risultati sono corretti, ma sulla pagina web invece, assolutamente no ed il problema in seguito a diverse verifiche, è da attribuirsi alle date:

PHP:
$startDate= $_POST['startDate']; 
$endDate = $_POST['endDate'];


$queryResultStr = "select ISF, Provincia, AMB, Categoria, SPEC, count(Visitato) Totale from vtlcontattiriep where userIdLogIn = '".$DM."' and startDate between '".$startDate." 00:00:00' and '" . $endDate . " 23:59:59' GROUP BY ISF, Provincia, Categoria, AMB, SPEC";

$queryResult = mssql_query($queryResultStr);

echo $startDate ."</br>"; # ----> esempio: 18-01-2012

echo $endDate."</br>";	 # ----> esempio: 23-10-2012			

var_dump($queryResultStr); # ----> esempio: string(229) "select ISF, Provincia, AMB, Categoria, SPEC, count(Visitato) Totale from vtlcontattiriep where userIdLogIn = '10' and startDate between '18-01-2012 00:00:00' and '23-10-2012 23:59:59' GROUP BY ISF, Provincia, Categoria, AMB, SPEC"
	

			
while($rowResult = mssql_fetch_array($queryResult)){

           echo "<tr class='" . str_replace(" ","",$rowResult['ISF']) . " " . $rowResult['Provincia'] . " " . str_replace(".","",$rowResult['Categoria']) . " " . str_replace(" ","",str_replace(".","",$rowResult['AMB'])) . " " . str_replace(".","",$rowResult['SPEC']) . "' style='font-family: Tahoma'>";
						
           echo "<td>" . $rowResult['ISF'] . "</td><td>" . str_replace(" ","SENZA PROVINCIA",$rowResult['Provincia']) . "</td><td>" .  $rowResult['Categoria'] . "</td><td>" .  $rowResult['AMB'] . "</td><td>" .  $rowResult['SPEC'] . "</td><td>" .  $rowResult['Totale'] . "</td>"; 
echo "</tr>";

}


Spero che qualcuno mi possa aiutare, sto impazzendo!!! :incazz2:

Vi ringrazio in anticipo!
 
modifica la parte di select in questo modo,

$DM."' and convert(varchar, startDate, 103) between '".$startDate."' and '". $endDate. "' GROUP

probabilmente nella tua select originale non c'è corrispondenza di formato delle date
ciao
Marino
 
Ti ringrazio per la risposta! :)

Già avevo provato con la conversione e purtroppo non mi restituisce alcun risultato.

Inserendo la parte di codice

PHP:
'".$startDate." 00:00:00'

riadatto la data ed infatti la query che viene generata, se lanciata direttamente su SQL Server funziona perfettamente.
 
Ciao Borgo italia!

Allora la data viene acquisita tramite datapicker con il seguente formato:

dateFormat: 'dd-mm-yy'

In seguito la metto nella variabile $startDate:

PHP:
$startDate= $_POST['startDate'];

e poi la inserisco nella condizione della query così:

PHP:
 and startDate between '".$startDate." 00:00:00' and '" . $endDate . " 23:59:59'

Potrebbe esservi d'aiuto sapere che sul db il campo è di tipo DATATIME.



ciao
come hai settato il campo startDate?
probabilmente, come dice marino51, non è giusta la corrispondenza del formato delle date.
 
ciao
se non vado errato il formato delle date con DATATIME è YYYY-MM-DD HH:MM:SS
quindi (non mi ricordo di preciso perchè a me piace lavorare col timestamp) è evidente l'incongruenza con dd-mm-yy
 
Effettivamente voleva la data nel formato YYYY-MM-DD HH:MM:SS.... La cosa che mi aveva messo fuori strada è proprio il fatto che se lancio la query direttamente da SQL Server vuole il formato DD-MM-YYYY HH:MM:SS, altrimenti mi restituisce l'errore:

La conversione del tipo di dati da char a datetime ha generato un valore di tipo datetime non compreso nell'intervallo dei valori consentiti.

Chi mi può spiegare questa cosa???

Grazie mille!:D
 
ciao
prova così
PHP:
<?php
//....
// se da datapicker il formato è (come tu esempio) ----> esempio: 18-01-2012 
//riducila al formato richiesto YYYY-MM-DD HH:MM:SS
$espl=explode("-", $_POST['startDate']);
$startDate=$espl[2]."-".$espl[1]."-".$espl[0]." 00:00:00";
//analogo per $endDate
//e poi la usi nella query
//se vuoi utolizzarla anche nell'echo, ma in formato italiano, fatti altre due variabili (es) $startDate_it=$_POST['startDate'];
//.....
?>
 
Perfetto!!! Funziona :D

Grazie mille per il supporto :fonzie:

ciao
prova così
PHP:
<?php
//....
// se da datapicker il formato è (come tu esempio) ----> esempio: 18-01-2012 
//riducila al formato richiesto YYYY-MM-DD HH:MM:SS
$espl=explode("-", $_POST['startDate']);
$startDate=$espl[2]."-".$espl[1]."-".$espl[0]." 00:00:00";
//analogo per $endDate
//e poi la usi nella query
//se vuoi utolizzarla anche nell'echo, ma in formato italiano, fatti altre due variabili (es) $startDate_it=$_POST['startDate'];
//.....
?>
 

Discussioni simili