【发布时间】:2017-10-16 11:34:28
【问题描述】:
我正在尝试根据用户输入的日期从我的数据库中查询一个表。 这是我的代码:
<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 函数将表格呈现到我的正文中。
由于某种原因,它不会显示在该日期进行的测试。 谢谢!
【问题讨论】:
-
testdate 列的
datatype是什么? -
您对SQL Injections 持开放态度,应该真正使用Prepared Statements 而不是连接您的查询。特别是因为您根本没有逃避用户输入!
-
我知道这与问题无关,但请记住转义您的参数
-
你如何回应结果?您还刚刚添加了调用一些 JS 的提交按钮。这里有很多未知数。您需要向我们展示所有相关代码(来自输入字段 => 提交按钮 => js 函数 => 查询 => 结果的回显)。
-
您不应剥离或转义数据。您应该使用准备好的语句,这样更安全。我还建议您从一开始就这样做,而不是尝试在您将要更改的代码中修复此类错误。