2

我有一个 HTML 表,它显示了来自 sql 表的一堆报告数据。现在查询默认为当前日期,但我正在寻找最有效的方法来更改开始/结束日期变量并刷新页面。我的查询现在看起来像这样:

$sts = date('Y-m-d');
$ets = date('Y-m-d', time()+86400);
$q = "SELECT *  FROM data WHERE `ts` BETWEEN '$sts' AND '$ets'";

然后,我创建了基本的 HTML 选择来选择新的日期范围,并在提交表单时将所有这些信息存储在 POST 中。更改 $sts 和 $ets 变量以反映帖子信息的最简单方法是什么?我有点猜测这将是使表单动作'index.php',并使用AJAX 处理变量更改。但是我不确定。

感谢您的帮助!

4

4 回答 4

1

好的对不起,我误解了这个问题。您可以通过获取变量来做到这一点:

http://website.com/index.php?sts=2013-02-03&ets=2013-02-05

$sts = strtotime(mysqli_real_escape_string($_GET['sts']));
$ets = strtotime(mysqli_real_escape_string($_GET['ets']));
$q = "SELECT *  FROM data WHERE `ts` BETWEEN '$sts' AND '$ets'";

然后使用 ajax 调用来更改表中的内容。

于 2013-06-08T18:03:59.517 回答
1

尝试

$sts="";
$ets="";
if (!isset($_POST['start_date']))
    $sts = date('Y-m-d');
else
    $sts = $_POST['start_date'];
if (!isset($_POST['end_date']))
    $ets = date('Y-m-d', time()+86400);
else
    $ets = $_POST['end_date'];

$q = "SELECT *  FROM data WHERE `ts` BETWEEN '$sts' AND '$ets'";`

并附上更改日期的表格。

这样,当表单首次加载时,没有发布数据,它将加载默认日期范围。当用户更改表单中的日期范围并提交时,它将加载新的范围。

在使用从 http get 或 post 获得的信息之前,您应该执行

mysqli_real_escape_string 即

$q = "SELECT *  FROM data WHERE `ts` BETWEEN 'mysqli_real_escape_string($sqlconn,$sts)' AND 'mysqli_real_escape_string($sqlconn,$ets)'";`
于 2013-06-08T18:04:21.597 回答
1

如果您尝试根据用户输入调整范围,您可能希望合并来自$_GET$_POST取决于您如何激活它的参数。通常$_GET更容易处理。

如果您使用日期范围,则可以发送一个UNIX 时间戳编号并使用它来计算偏移量。

然后您的查询将如下所示:

$start_t = date('%Y-%m-%d', $_GET['from']);
$end_t = date('%Y-%m-%d', $_GET['from'] + 86400);

$sth = $db->prepare("SELECT * FROM DATA WHERE `ts` BETWEEN :start_t AND :end_t");
$sth->bind(array('start_t' => $start_t, 'end_t' => $end_t));
于 2013-06-08T18:04:58.450 回答
1

首先,您需要考虑使用 PDO 或 mysqli(假设使用 MySQL)为您的查询使用准备好的语句。

接下来,只需要重新运行您已经拥有的查询,而不是将值硬编码到变量中,而是将它们从 $_POST 中提取出来

示例(如果需要,您可以用 $_GET 代替):

$sts = isset($_POST['sts']) ? htmlspecialchars($_POST['sts'],ENT_QUOTES) : date('Y-m-d');
$ets = isset($_POST['ets']) ? htmlspecialchars($_POST['ets'],ENT_QUOTES) : date('Y-m-d', time()+86400);
$q = "SELECT *  FROM data WHERE `ts` BETWEEN ? AND ?";
$stmt = $db->prepare($q);
$stmt->execute(array($sts,$ets);

对于初学者,请参阅http://www.php.net/manual/en/pdo.prepare.phphttp://www.php.net/manual/en/pdostatement.execute.php

于 2013-06-08T18:07:19.597 回答