我从w3schools关注此示例,以从mysql数据库中获取数据并在页面上显示结果。
这是我更新的代码:
HTML:
<html>
<head>
<script>
function showresult(str) {
if (str=="") {
document.getElementById("txtHint").innerHTML="";
return;
}
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
} else { // code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","getquery.php?q="+str,true);
xmlhttp.send();
}
</script>
</head>
<body>
<form>
<select name="Reg Date" onchange="showresult(this.value)">
<option value="">Select Date:</option>
<option value="1">30/07/2014</option>
<option value="2">29/07/2014</option>
<option value="3">28/07/2014</option>
</select>
</form>
<br>
<div id="txtHint"><b>Result here.</b></div>
</body>
</html>
PHP:
<?php
$q = intval($_GET['q']);
$con = mysqli_connect('localhost','root','password','mydb');
if (!$con) {
die('Could not connect: ' . mysqli_error($con));
}
mysqli_select_db($con,"ajax_demo");
$sql="SELECT * FROM customers WHERE reg_date = '".$q."'";
$result = mysqli_query($con,$sql);
echo "<table border='1'>
<tr>
<th>Client Name</th>
<th>Registration Date</th>
</tr>";
while($row = mysqli_fetch_array($result)) {
echo "<tr>";
echo "<td>" . $row['client_name'] . "</td>";
echo "<td>" . $row['reg_date'] . "</td>";
echo "</tr>";
}
echo "</table>";
mysqli_close($con);
?>
当我选择任何日期时,在我将选择语句 reg_date = 更改为 reg_date&gt; = (具有大于号码)之前没有任何反应&gt;)但是这也会显示超过所选日期的日期结果。
如何使用日期选择器,以便选择任何日期。
我还注意到,当我随机选择任何日期时,在显示结果之前会有轻微的延迟或小时玻璃显示。我相信这是由于我在数据库中记录的数量(查看超过20K条目)。
我很高兴有人能帮助或指出我正确的方向,因为我对这段编码不熟悉。
答案 0 :(得分:1)
您应该尝试使用STR_TO_DATE(字符串,格式)函数将常量转换为日期。例如,我的MYSQL实例没有正确地将字符串变量转换为日期。我认为它可以与位置设置相关联。
$sql="SELECT * FROM customers WHERE reg_date = STR_TO_DATE('".$q."','%d/%m/%Y')";
答案 1 :(得分:1)
假设“reg_date”字段为“2014-07-30”格式。
HTML:
......
<select name="Reg Date" onchange="showresult(this.value)">
<option value="">Select Date:</option>
<!-- your date format is err. No wonder I was wrong the wrong -->
<option value="07/03/2014">07/03/2014</option>
<option value="07/09/2014">07/09/2014</option>
<option value="07/28/2014">07/28/2014</option>
</select>
.....
PHP:
<?php
//you can var_dump $q ,$q value like 2014-07-30
$q = date('Y-m-d',strtotime($_GET['q']));
//Desired result sql “SELECT * FROM customers WHERE reg_date = '2014-07-30'”
......
你必须学习var_dump变量。 对不起,我的英语不好。
答案 2 :(得分:0)
您确定下拉的值(&#34; 1&#34;,&#34; 2&#34;和#34; 3&#34;)与您的格式相比格式正确在&#34; reg_date&#34;数据库中的列?
如果列中有&#34; date&#34;格式化数据库中的日期格式为&#34; YYYY-MM-DD&#34;,在您的情况下&#34; 2014-07-30&#34;,&#34; 2014-07-29&#34 ;和&#34; 2014-07-28&#34;。
尝试将其用作下拉列表中的值,并将行intval($ _ GET [&#39; q&#39;])更改为类似的内容,以此格式清理数据库输入:
if (preg_match("/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/",$_GET['q']))
{
$q = $_GET['q']
}
有关mysql日期和日期时间的更多信息: http://dev.mysql.com/doc/refman/5.0/en/datetime.html