У меня есть форма с двумя DatePicker (дд / мм / гггг).
Код:
<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. Но есть ошибка.
Неустранимая ошибка: необработанное исключение com_exception с сообщением
‘Источник: Поставщик Microsoft OLE DB для ODBC
Драйверы
Описание: [Microsoft] [Драйвер ODBC Microsoft
Доступ] Типичные условия, не являющиеся критериями выражения. в
C: \ Program Files
(x86) \ EasyPHP-Devserver-16.1 \ eds-www \ DinamicoWeb \ index.php: 43 стека
трассировка: # 0 C: \ Program Files
(X86) \ EasyPHP-Devserver-16,1 \ ред-WWW \ DinamicoWeb \ index.php (43):
com-> execute (‘SELECT [Id Ord] …’) # 1 {main}, выброшенный в C: \ Program
Файлы (x86) \ EasyPHP-Devserver-16.1 \ eds-www \ DinamicoWeb \ index.php в
линия 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);
Во-первых, ваш код является открытым приглашением для внедрения SQL. Вы должны использовать параметризованные запросы.
Затем, если БД MS Access, и [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#";
}
Я понятия не имею, как форматируются ваши данные POST, поэтому вам, возможно, придется изменить способ форматирования дат.
Других решений пока нет …