在oracledbbyphp中按日期搜索


search by date in oracle db by php

我的任务是为我的网站的用户创造机会,让他们更改间隔日期,以便从Oracle数据库中查看所需的信息,但问题是,当我在Oracle中更改SQL select查询时出错了,你能给我一些指导吗。我不知道我必须改变什么;;这是代码

<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>

错误;注意:未定义的变量:第18行的Date_1;注意:未定义的变量:第18行的Date_2

因此,php代码和sql似乎需要在单独的文件中。看起来,包含表单的同一个页面也试图在实际具有$Date_1和$Date_2的值之前建立sql连接。如果您查看发送到Oracle的查询,那么对于导致错误的变量,该查询可能为空:

从某处选择*,其中name_date介于"answers"之间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);
?>    

发生这种情况是因为变量是在使用它们的点之后定义的。

如果你在代码的顶部定义了一个变量,所有部分都可以访问它(当然,如果它有值的话),但如果你在底部定义它并在定义之前使用它(这就是你正在做的事情),那么这个变量还不存在,记住: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代码的顶部。