为了账号安全,请及时绑定邮箱和手机立即绑定

如何根据当前时间从数据库中选择

如何根据当前时间从数据库中选择

PHP
牛魔王的故事 2022-07-16 15:59:20
我正在制作一个学校门户系统,现在我正在制作页面供学生查看作业。我希望他们的作业以红色突出显示,或者如果当前日期超过了截止日期,则根本不显示。我怎样才能做到这一点?我的页面代码<?php//including the database connection fileinclude_once("connection.php");    $id= $_GET['id'];//fetching data in descending order (lastest entry first)$result = mysqli_query($conn, "SELECT * FROM homework where class_id= '$id'"); ?><html><head>        <title>View IS</title></head><body>    <table width='80%' border=0>        <tr bgcolor='#CCCCCC'>            <td>Task</td>            <td>Date Set </td>            <td>Date Due </td>        </tr>        <?php         //while($res = mysql_fetch_array($result))         while($res = mysqli_fetch_array($result)) {                     echo "<tr>";            echo "<td>".$res['description']."</td>";            echo "<td>".$res['dateset']."</td>";            echo "<td>".$res['datedue']."</td>";        }        ?>    </table></body>数据库:
查看完整描述

3 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

而不是 a query,使用 aprepared statement更bind_param安全。然后只需比较日期以检查是否$res['datedue']通过。应该是这样的:


<?php

    include_once("connection.php"); //including the database connection file

    date_default_timezone_set('America/Los_Angeles');    //set the default time zone to your time zone (this is just an example)

    $result = $conn->prepare("SELECT * FROM homework WHERE class_id=?");

    $result->bind_param("i", (int)$_GET['id']);

    $result->execute();

    $result2 = $result->get_result();

?>

<html>

<head>    

    <title>View IS</title>

</head>

<body>

    <table width='80%' border=0>

        <tr bgcolor='#CCCCCC'>

            <td>Task</td>

            <td>Date Set </td>

            <td>Date Due </td>

        </tr>

        <?php

            while($res = $result2->fetch_array(MYSQLI_ASSOC)) {   

                if (date("Y-m-d") > $res['datedue']) {

                    echo "<tr style=\"color: red;\">";

                        echo "<td>".$res['description']."</td>";

                        echo "<td>".$res['dateset']."</td>";

                        echo "<td>".$res['datedue']."</td>";

                    echo "</tr>";

                } else {

                    echo "<tr>";

                        echo "<td>".$res['description']."</td>";

                        echo "<td>".$res['dateset']."</td>";

                        echo "<td>".$res['datedue']."</td>";

                    echo "</tr>";

                }

            }

        ?>

    </table>

</body>

您也可以使用$time = new DateTime;and then$time->format("Y-m-d")代替date("Y-m-d").


查看完整回答
反对 回复 2022-07-16
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

您应该使用参数化的准备好的语句,而不是手动构建查询。


如果日期更大,我已经使用日期函数来比较日期,那么我已经放置了一些样式,而在其他情况下则没有样式。我已经给了你这个想法,现在你可以进行相应的修改。


    <table width='80%' border=0>

            <tr bgcolor='#CCCCCC'>

                <td>Task</td>

                <td>Date Set </td>

                <td>Date Due </td>

            </tr>

            <?php 

            //while($res = mysql_fetch_array($result)) 

    $current_date=date("Y-m-d");

            while($res = mysqli_fetch_array($result)) { 



            if($current_date > $res['datedue'] ){


?>

<tr style='color:red;'>;

<?php


    }else {

    <tr>

    }


                echo "<td>".$res['description']."</td>";

                echo "<td>".$res['dateset']."</td>";

                echo "<td>".$res['datedue']."</td>";

    </tr>

            }

            ?>

        </table>


查看完整回答
反对 回复 2022-07-16
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

不要使用连接的原始 SQL。

使用变量绑定来防止 SQL 注入。


<?php

$stmt = $mysqli->prepare("SELECT * FROM homework where class_id= ?");

$stmt->bind_param('i', (int)$_GET['id']); // bind vairable and cast it to integer (it is a good practice when you get data from outside)

$stmt->execute();

$result = $stmt->get_result();

while($res = $result->fetch()){

  // Your code here

  var_dump($res);

}

我会建议使用PDO而不是mysqli. 您可以在此处阅读有关 SQL 注入的更多信息:如何防止 PHP 中的 SQL 注入?


不要使用select * (通配符)

SELECT description, dateset, datedue, datedue < NOW() AS is_expired FROM homework where class_id= ?

检查值is_expired以查看您将标记为红色的结果


我还没有尝试过代码,但我想它会按预期工作


查看完整回答
反对 回复 2022-07-16
  • 3 回答
  • 0 关注
  • 121 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信