2016-11-07 5 views
1


上のオペレータの間に私は2つの日付ピッカー(DD/MM/YYYY)を持つフォームを持っています。
コード:クエリ - PHP ADODB

<label for="from">From Date:</label> 
<input type="text" id="from" name="from"> 
<label for="to">to Date:</label> 
<input type="text" id="to" name="to"> 

そして、私はPHPとのデータのこの範囲を選択してみてください。 しかし、エラーがあります。

Fatal error: Uncaught exception 'com_exception' with message 'Source: Microsoft OLE DB Provider for ODBC Drivers
Description: [Microsoft][Driver ODBC Microsoft Access] Tipi di dati non corrispondenti nell'espressione criterio.' in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\DinamicoWeb\index.php:43 Stack trace: #0 C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\DinamicoWeb\index.php(43): com->execute('SELECT [Id Ord]...') #1 {main} thrown in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\DinamicoWeb\index.php on line 43

だからこれは私のPHPファイル(日付なしの完璧な作業)である:

$input=$_POST['input']; 
$id=$_POST['id']; 
$tipo=$_POST['tipo']; 
$numero1=$_POST['numero1']; 
$numero2=$_POST['numero2']; 
$data1=$_POST['from']; 
$data2=$_POST['to']; 

if (empty($input)) { 
    $sql="SELECT [Id Ord] AS [ID], [Tipo Ord] AS [Tipo], [N Ord] AS [Numero], [Data Ord] AS [Data], [Ragione Sociale], [Indirizzo], [TotImp] AS [IMPORTO TOTALE], [TotIva] AS [IMPORTO IVA] FROM [Ordini] WHERE [Id Ord] LIKE '$id' OR [Tipo Ord] LIKE '$tipo' OR [Data Ord] BETWEEN '$data1' AND '$data2'"; 
} else { 
    $sql="SELECT [Id Ord] AS [ID], [Tipo Ord] AS [Tipo], [N Ord] AS [Numero], [Data Ord] AS [Data], [Ragione Sociale], [Indirizzo], [TotImp] AS [IMPORTO TOTALE], [TotIva] AS [IMPORTO IVA] FROM [Ordini] WHERE [Indirizzo] LIKE '%$input%' OR [Ragione Sociale] LIKE '%$input%' OR [Id Ord] LIKE '$id' OR [Tipo Ord] LIKE '$tipo'" OR [Data Ord] BETWEEN '$data1' AND '$data2'"; 
} 

行43:

$rs = $con->execute($sql); 

フォーム:(計算しません1〜100の数字)
enter image description here

答えて

1

まず、あなたのコードは、SQLインジェクションに開いて招待状です。パラメータ化されたクエリを使用する必要があります。

その後、DBはMSアクセスで、[Data Ord]はあなたが#なく'であなたの日付を囲み、さらに次のようにそれらを適切にフォーマットする必要がありますSQLで、日付タイプの場合:MM/DD/YYYY

何かのように。

$input=$_POST['input']; 
$id=$_POST['id']; 
$tipo=$_POST['tipo']; 
$numero1=$_POST['numero1']; 
$numero2=$_POST['numero2']; 
$data1=date('m/d/Y', strtotime($_POST['from']));; 
$data2=date('m/d/Y', strtotime($_POST['to']));; 

if (empty($input)) { 
    $sql="SELECT [Id Ord] AS [ID], [Tipo Ord] AS [Tipo], [N Ord] AS [Numero], [Data Ord] AS [Data], [Ragione Sociale], [Indirizzo], [TotImp] AS [IMPORTO TOTALE], [TotIva] AS [IMPORTO IVA] FROM [Ordini] WHERE [Id Ord] LIKE '$id' OR [Tipo Ord] LIKE '$tipo' OR [Data Ord] BETWEEN #$data1# AND #$data2#"; 
} else { 
    $sql="SELECT [Id Ord] AS [ID], [Tipo Ord] AS [Tipo], [N Ord] AS [Numero], [Data Ord] AS [Data], [Ragione Sociale], [Indirizzo], [TotImp] AS [IMPORTO TOTALE], [TotIva] AS [IMPORTO IVA] FROM [Ordini] WHERE [Indirizzo] LIKE '%$input%' OR [Ragione Sociale] LIKE '%$input%' OR [Id Ord] LIKE '$id' OR [Tipo Ord] LIKE '$tipo'" OR [Data Ord] BETWEEN #$data1# AND #$data2#"; 
} 

は、私はあなたが私が日付

+0

おかげでフォーマットされた方法を変更する必要がある場合がありますので、あなたのPOSTデータがフォーマットされているか分かりません!正しいですが、私の日付形式はDD/MM/YYYYなので、 '$ data1 = date( 'd/m/Y'、strtotime($ _ POST ['from']));; そして、2つの数字の間を操作するには、number1とnumber1を数値形式に変換する必要がありますか?だから: '$ numero2 = int($ _ POST ['numero2']);'? :) –

関連する問題