2016-11-07 10 views
1


두 개의 datepicker (dd/mm/yyyy)가있는 양식이 있습니다.
코드 :Query - 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와 데이터의 범위를 선택하려고합니다. 하지만 오류가 있습니다.

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

양식 :이 (안을 계산 (43)

$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'"; 
} 

라인 :

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 파일 (완벽 날짜없이 일)입니다 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'])) ;; 그리고 두 숫자 사이에서 작동하려면 number1과 number1을 숫자 형식으로 변환해야합니까? 그래서 :'$ numero2 = int ($ _ POST [ 'numero2']);'? :) –