PHP使用日期范围显示数据

PHP使用日期范围显示数据,php,mysql,Php,Mysql,给你,我知道答案了 我只是将track_reports.php更改为: if (isset($_POST['chkOtdate'])) { $date_from = $_POST['date_from']; $date_to = $_POST['date_to']; if (empty($bagianWhere))

给你,我知道答案了

我只是将track_reports.php更改为:

if (isset($_POST['chkOtdate']))
                    {
                        $date_from = $_POST['date_from'];
                        $date_to = $_POST['date_to'];
                        if (empty($bagianWhere))
                        {
                            $bagianWhere .= "ot_date between '$date_from' and '$date_to'";
                        }
                        else
                        {
                            $bagianWhere .= " AND ot_date between '$date_from' and '$date_to'";
                        }
                    }
现在没有问题了,代码可以顺利运行了。 谢谢你的帮助,朋友们。 感谢您的建议和评论

我的以下代码有问题:

view_report.php 我们可以根据徽章id、员工姓名和加班日期查看报告,范围为。 数据显示,当我尝试使用徽章id和员工姓名查找时没有问题。但当我尝试使用日期范围查找时,发现了错误。错误是::mysql_fetch_数组期望参数1是资源,布尔值在联机警告C:\xampp\htdocs\siix_dev\超时\track_reports.php327中给出

track_reports.php

有人能帮我吗?
感谢您的帮助。

确保ot\U日期的数据类型是否为datetime?也许您在上面的评论中使用了varchar,您声明存储日期的ot_date列的类型为varchar。因此,MySQL根本不会将其内容识别为日期,而是将其视为一系列毫无意义的字符,如单词

您可以做的最好的事情是更改数据库,以便以MySQL识别为日期的格式存储这些日期,如日期数据类型。要在不丢失现有数据的情况下执行此操作,请执行以下操作:

重命名现有列并在其位置添加新列:

ALTER TABLE t_submissions
  CHANGE ot_date ot_date_old VARCHAR(size),
  ADD    ot_date DATE [NOT NULL] AFTER ot_date_old;
将旧列的内容复制到新列中,日期为:

UPDATE t_submissions SET ot_date = STR_TO_DATE(ot_date_old, '%d-%b-%Y');
验证新列是否包含预期数据:

SELECT ot_date, ot_date_old FROM t_submissions;
删除旧列(可选):

ALTER TABLE t_submissions DROP ot_date_old;
接下来,为了让您的查询正常工作,MySQL需要知道如何将提交的日期转换为日期,而不是将其视为字符串:

SELECT badge_id, employee_name FROM t_submissions
WHERE ot_date BETWEEN STR_TO_DATE('%d-%b-%Y', ?) AND STR_TO_DATE('%d-%b-%Y', ?)
注意我用过吗?代替日期变量是因为,正如我在上面的评论中所提到的,您的代码当前要接受SQL注入,并且您真的应该将这些变量作为参数传递给MySQL到一个准备好的语句中,因此它们不会得到SQL的评估。阅读更多信息

还要注意,当前表单要求用户以指定格式在文本框中输入日期,否则查询将失败。您最好要求用户从下拉列表或某种形式的日历控件中选择日期部分和/或执行验证,以确保提交的日期格式正确


最后,在尝试读取一个可能不存在的记录集之前,您应该测试查询结果,看看它是否成功。在本例中,记录集可能不存在。

让我们了解错误本身。您的代码容易受到SQL注入的攻击。您确实应该使用准备好的语句,将变量作为参数传递到语句中,而这些参数不会对SQL进行求值。如果您不知道我在说什么,或者不知道如何修复它,请阅读的故事。这是一个错误sir::mysql\u fetch\u数组希望参数1是resource,boolean在联机警告C:\xampp\htdocs\siix\u dev\加班费\track\u reports.php327中以什么格式输入日期?作为其值用作与数据库字段直接比较的文本框,如果列的类型为DATE,则其格式应与该字段的格式相同,然后MySQL要求通过“yyyy-mm-dd”将此类文本转换为。若要捕获错误,在调用mysql\u fetch\u数组之前,您应该测试$hasil以查看查询是否成功。我只是把track_reports.php改为:if-isset$_POST['chkOtdate']{$date_from=$_POST['date_from'];$date_to=$_POST['date_to'];if-empty$bagianWhere{$bagianWhere.=ot_date介于'$date_from'和'$date_to'.}之间,否则{$bagianWhere.=和ot_date介于“$date_from”和“$date_to”;}}}之间,现在没有任何问题,代码可以顺利运行。感谢您的朋友的帮助。感谢您的建议和评论。
ALTER TABLE t_submissions DROP ot_date_old;
SELECT badge_id, employee_name FROM t_submissions
WHERE ot_date BETWEEN STR_TO_DATE('%d-%b-%Y', ?) AND STR_TO_DATE('%d-%b-%Y', ?)