我正在尝试根据日期用户输入从我的数据库查询表。 这是我的代码:
<input type="date" name="date" value="<?php echo date('Y-m-d'); ?>">
<input type="submit" value=">" onclick="showDate(this.value)">
用于用户输入(默认为当前日期)
这是我的PHP脚本
$q = $_GET['date'];
$sql="SELECT * FROM mathtest WHERE testdate = '$q'";
$result = mysqli_query($con,$sql);
这是我的ajax脚本:
<script>
function showDate(str) {
if (str == "") {
document.getElementById("mathtestHere").innerHTML = "";
return;
} else {
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 (this.readyState == 4 && this.status == 200) {
document.getElementById("mathtestHere").innerHTML =
this.responseText;
}
};
xmlhttp.open("GET","getmathdate.php?q="+str,true);
xmlhttp.send();
}
}
</script>
和我的php echo函数:
echo "<table>
<tr>
<th>ID</th>
<th>First name</th>
<th>Last name</th>
<th>Level</th>
<th>Time</th>
<th>Score</th>
<th>Date</th>
<th>Added by</th>
</tr>";
while($row = mysqli_fetch_array($result)) {
echo "<tr>";
echo "<td>" . $row['id'] . "</td>";
echo "<td>" . $row['firstname'] . "</td>";
echo "<td>" . $row['lastname'] . "</td>";
echo "<td>" . $row['testlevel'] . "</td>";
echo "<td>" . $row['testtime'] . "</td>";
echo "<td>" . $row['testscore'] . "</td>";
echo "<td>" . $row['testdate'] . "</td>";
echo "<td>" . $row['addedBy'] . "</td>";
echo "</tr>";
}
echo "</table>";
mysqli_close($con);
然后回显到php表。我正在使用AJAX onclick函数将表格渲染到我的身体中。
出于某种原因,它不会显示在该日期进行的测试。 谢谢!
答案 0 :(得分:0)
如果您的数据库中testdate
列的数据类型为date
,则问题是日期格式。你应该试试这样的PHP。
$q = $_GET['date'];
$sql="SELECT * FROM mathtest WHERE testdate = STR_TO_DATE('$q','%Y-%m-%d')";
$result = mysqli_query($con,$sql);
答案 1 :(得分:0)
首先是按钮上的onclick
属性,其值为>
:
<input type="submit" value=">" onclick="showDate(this.value)">
这里会发生的是它会传递按钮的值而不是日期字段的值。只需删除按钮的value
属性以及this.value
功能的showDate
参数:
<input type="submit" onclick="showDate()">
为您的日期字段指定id
属性:
<input type="date" name="date" id="date" value="<?php echo date('Y-m-d'); ?>">
然后在你的脚本上,我们必须得到日期的值:
function showDate() {
var str = document.getElementById("date").value; /* GET THE VALUE OF DATE FIELD */
if (str == "") {
document.getElementById("mathtestHere").innerHTML = "";
return;
} else {
/** CONTINUATION OF YOUR SCRIPT HERE **/
请确保您的div
元素的id
属性为mathtestHere
:
<div id="mathtestHere"></div> <!-- RESULT WILL BE PUT HERE -->
让我们转到您的getmathdate.php
文件。让我们使用prepared statement来保护要在脚本中绑定的变量:
/** INCLUDE HERE YOUR DATABASE CONNECTION **/
$q = !empty($_GET['q'])?$_GET['q']:'';
$a = '<table>
<tr>
<th>ID</th>
<th>First name</th>
<th>Last name</th>
<th>Level</th>
<th>Time</th>
<th>Score</th>
<th>Date</th>
<th>Added by</th>
</tr>';
$stmt = $con->prepare("SELECT id, firstname, lastname, testlevel, testtime, testscore, testdate, addedBy FROM mathtest WHERE testdate = ?");
$stmt->bind_param("s", $q);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($id, $firstname, $lastname, $testlevel, $testtime, $testscore, $testdate, $addedby);
while($stmt->fetch()){
$a .= '<tr>
<td>'.$id.'</td>
<td>'.$firstname.'</td>
<td>'.$lastname.'</td>
<td>'.$testlevel.'</td>
<td>'.$testtime.'</td>
<td>'.$testscore.'</td>
<td>'.$testdate.'</td>
<td>'.$addedby.'</td>
</tr>';
}
$stmt->close();
$a .= '</table>';
echo (!empty($q))?$a:'No results found.';
同时检查控制台日志中的错误。您通常可以通过在浏览器上点击F12来找到它。
答案 2 :(得分:0)
你最关键的错误之一是
<input type="submit" value=">" onclick="showDate(this.value)">
由于输入是this
,而.value
在这种情况下是>
而不是日期。
要解决此问题,我将您的HTML代码更改为:
<input type="date" name="date" id="date-selector" value="<?php echo date('Y-m-d'); ?>">
<input type="submit" value=">" onclick="showDate()">
和javascript:
function showDate() {
var str = document.getElementById("date-selector").value;
if (str == "") {
document.getElementById("mathtestHere").innerHTML = "";
return;
} else {
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 (this.readyState == 4 && this.status == 200) {
document.getElementById("mathtestHere").innerHTML =
this.responseText;
}
};
xmlhttp.open("GET","getmathdate.php?q="+str,true);
xmlhttp.send();
}
}