SQL查询中的PHP AJAX日期时间范围问题
我有一个很大的问题,我希望我会在这里找到解决方案。 经过4天的无用搜索,我来到这里寻求解决方案。
这是我的问题。 我使用SQL Server数据库和php作为AJAX的服务器端语言将参数发送到php服务器。
如果用户输入某个日期范围,我的网络应用程序必须显示一些数据的列表。
在这里我的HTML表单代码:
<form method="post" action="">
<input type="text" placeholder="Start date : dd/mm/yyyy" id="date1" name="date1">
<input type="text" placeholder="Date de fin : dd/mm/yyy" id="date2" name="date2">
<input type="BUTTON" class="my-button" value="Show Data" onClick="LoadData()">
</form>
这里是我的javascript函数LoadData()
<script>
function LoadData(){
var url = "json.php";
var date1=document.getElementById('date1');
var date2=document.getElementById('date2');
var xmlhttp = new XMLHttpRequest();
var params= 'date1=' + date1 + '&date2=' + date2 ;
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
myFunction(xmlhttp.responseText);
}
}
xmlhttp.open("POST", url, true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send(params);
function myFunction(response) {
var arr = JSON.parse(response);
var i;
var sum = 0;
var out = "";
for(i = 0; i < arr.length; i++)
out += '<li><div class="news_desc"><table width="100%" border="1"><tr><td width="70%"><h4><a>' +
arr[i].Name +
'</h4></td><td width="30%">' +
arr[i].Price +
'</td></tr><tr><td><p>' +
arr[i].Date +
'</p></td><td> </td></tr></table></div><div class="clear"> </div></li>' ;
}
out += ''
document.getElementById("id01").innerHTML = out;
}
}
</script>
这是我的PHP脚本
if(isset($_POST['date1']) && isset($_POST['date2']) )
{
$date1 = $_POST["date1"];
$date2 = $_POST["date2"];
$db_name = "DATABASE";
$hostname = 'IO-SD-L1';
$username = '';
$password = '';
// connect to the database
$dbh = new PDO( "sqlsrv:Server= $hostname ; Database = $db_name ", $username, $password);
$sql = "SELECT name, CAST( DateReg AS DATE ) AS dateIn, price FROM TBL_USERS
WHERE CAST( DateReg AS DATE )BETWEEN '".$date1."'AND '".$date2."'";
// the DateReg is datetime type
$stmt = $dbh->prepare( $sql );
$stmt->execute();
$result = $stmt->fetchAll( PDO::FETCH_ASSOC );
foreach ($result as $row){
$return[]=array('Name'=>$row['name'],
'Date'=>$row['dateIn'],
'Price'=>$row['price']);
}
$dbh = null;
echo json_encode($return); }
如果我将日期范围直接放在代码中,如date1="12/12/2011" ; date2="11/12/2014"
date1="12/12/2011" ; date2="11/12/2014"
它可以很好地工作,但如果我在两个日期文本框中通过用户输入选择日期范围并单击显示数据按钮,我什么都没有。
所以你在说,当你输入一个日期(硬编码)时,它是完美的; 但是当你通过文本框控件输入相同的日期时, 它不起作用? 如果是这样,我会这样做: console.log(params)
获得输入数据后。 你会发现它与你想象的不一样; 我猜测。
如果你想使用jQuery来代替(因为它简化了xmlhttp处理程序......请试试这样:
var formData = "name=johndoe&age=24"; // name value pair
// or...
var formData = { name : "johndoe", age : "24" }; // object
$.ajax({
url : "/your/url/goes/here.php",
type: "POST",
data : formData,
// if you wish to send the object as JSON, you will need to do this instead of the above...
// data: JSON.stringify(formData),
// you will also need to uncomment the next line
// contentType: "application/json; charset=utf-8",
success: function(data, textStatus, jqXHR)
{
console.log(data);
},
error: function (jqXHR, textStatus, errorThrown)
{
console.log(errorThrown);
}
});
参考。 AJAX请求中的内容类型和数据类型是什么?
我认为你的功能没有调用按钮点击。
检查它只是添加
alert('check');
我首先在函数体中行。
另外托盘更改onClick =“LoadData()”onClick =“LoadData”
如果您的DATE包含TIME信息,例如11/12/2014 13:30
。 这将在BETWEEN 10/12/2014 AND 11/12/2014
的条款中失败(使用英国dd / mm / yyyy格式)。 您必须去除BETWEEN的TIME部分,才能以您需要的方式工作