html — поиск по дате в oracle db по переполнению стека

Моя задача состоит в том, чтобы предоставить пользователям моего сайта возможность изменять интервальные даты для просмотра нужной информации из базы данных Oracle, но проблема в том, что когда я что-то изменяю в SQL-запросе выборки в oracle идет не так, вы можете дать мне какое-то направление. я не знаю, что я должен изменить ;; вот код

<html>
<head>
</head>
<body>
<form>
From:<input name="Date_1" type="Date" value="<%=Date_1%>" size="15" />
To:<input name="Date_2" type="Date" value="<%=Date_2%>" size="15" />
<input name="Submit" type="submit" />
</form>
<?php
$conn = oci_connect('scott', 'tiger', '(DESCRIPTION= (ADDRESS= (PROTOCOL=) (HOST=) (PORT=)) (CONNECT_DATA= (SERVICE_NAME=)))');
if (!$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
//----------------------------------------------------------------------------------
$sql = "SELECT * from somewhere WHERE name_date between '{$Date_1}' AND '{$Date_2}'";
if (empty($_GET['name_date']))
$sql = "SELECT * FROM name_date WHERE 1 = 2 ";
$res = mysql_query($sql);
?>
</body>
</html>

ошибки;
Примечание: неопределенная переменная: Date_1 в строке 18;
Примечание: неопределенная переменная: Date_2 в строке 18

0

Решение

Похоже, ваш php-код и sql должны быть в отдельных файлах. Похоже, что та же страница, содержащая форму, также пытается установить соединение SQL, прежде чем на самом деле получит значения для $ Date_1 и $ Date_2. Если вы посмотрели на запрос, отправляемый в Oracle, он, вероятно, пуст для тех переменных, которые вызывают ошибку:

ВЫБЕРИТЕ * откуда-то, ГДЕ name_date между » И »
группа по TRUNC (a.CTS, ‘DD’)
заказ по TRUNC (a.CTS, ‘DD’)
Вместо этого вы можете попробовать два файла, как это:

Part1.php:

<html>
<head>
</head>
<body>
<form action="part2.php" method="post">
From:<input name="Date_1" type="Date" size="15" />
To:<input name="Date_2" type="Date"size="15" />
<input name="Submit" type="submit" />
</form>
</body>
</html>

Part2.php

<?php
$Date_1 = $_POST['Date_1'];
$Date_2 = $_POST['Date_2'];
$conn = oci_connect('scott', 'tiger', '(DESCRIPTION= (ADDRESS= (PROTOCOL=) (HOST=) (PORT=))    (CONNECT_DATA= (SERVICE_NAME=)))');
if (!$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
//----------------------------------------------------------------------------------
$sql = "SELECT * from somewhere WHERE name_date between '{$Date_1}' AND '{$Date_2}'
group by TRUNC(a.CTS,'DD')
order by TRUNC(a.CTS,'DD')";
if (empty($_GET['name_date']))
$sql = "SELECT * FROM name_date WHERE 1 = 2 ";
$res = mysql_query($sql);
?>
0

Другие решения

Ну, это происходит потому, что ваши переменные определены после того места, где вы их используете.

Если вы определите переменную в верхней части вашего кода, она будет доступна для всех частей (если она имеет значение, конечно), но если вы определите ее в нижней части и будете использовать ее до определения (что-то вроде того, что вы вы делаете), тогда переменная еще не существует, помните: PHP работает построчно при выполнении.

Чтобы решить эту проблему, вырежьте и вставьте весь код PHP:

<?php
$conn = oci_connect('scott', 'tiger', '(DESCRIPTION= (ADDRESS= (PROTOCOL=) (HOST=) (PORT=))      (CONNECT_DATA= (SERVICE_NAME=)))');
if (!$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
//----------------------------------------------------------------------------------
$sql = "SELECT * from somewhere WHERE name_date between '{$Date_1}' AND '{$Date_2}'";
if (empty($_GET['name_date']))
$sql = "SELECT * FROM name_date WHERE 1 = 2 ";
$res = mysql_query($sql);
?>

Прямо поверх вашего HTML-кода.

0

По вопросам рекламы [email protected]