首页 文章

PHP日期变量的MySQL查询

提问于
浏览
0

我正在尝试根据日期用户输入从我的数据库查询表 . 这是我的代码:

<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 "<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函数将表格渲染到我的身体中 .

出于某种原因,它不会显示在该日期进行的测试 . 谢谢!

3 回答

  • 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();
        }
    }
    
  • 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);
    
  • 0

    首先是按钮上的 onclick 属性,其值为 >

    <input type="submit" value=">" onclick="showDate(this.value)">
    

    这里会发生什么,它将传递按钮的值而不是日期字段的值 . 只需删除按钮的 value 属性和 showDate 函数的 this.value 参数:

    <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在哪里?

    只需确保您的 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来找到它 .

相关问题