php - 如何对 mysql 数据库进行多部分 PHP 查询

标签 php mysql checkbox html-table display

我已经阅读了这里和其他网站上的数百篇帖子。我不太熟悉 PHP 和 mysql,但已经在 mysql 中构建了我的表,使用单个 list 调用它们并根据日期和时间过滤它们。但是,在多复选框领域,我似乎无法确定我在数组代码和自定义结果表中做错了什么。这是基本的 html:

<html> <body> <form method="POST" action="php/minute_feedback.php">
Date: <input type="text" name="from_date" id="from_date" value="2016-04-07">
<input type="checkbox" name="check_list[]" value="gate" id="gate">
<input type="checkbox" name="check_list[]" value="pressure" id="pressure">
<input type="checkbox" name="check_list[]" value="flow" id="flow">
<input type="submit" name="submit" value="submit">

这是基本的 PHP(我将只包括日期参数与日期和时间以使其更短,因为包含的内容是相同的):

<?php
$servername = "myhostaddress.com";
$username = "myusername";
$password = "mypassword";
$dbname = "mydatabasename";
$conn=new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);}
if($_POST['submit'] == "submit") {
$from_date = ($_POST['from_date']);
$to_date = ($_POST['from_date']);}
if(isset($_POST['submit'])) {

现在...我知道这里应该有某种数组代码,例如:

$checklist[] = $_POST[check_list];

但是 - 我不确定正确的语法/代码是什么。 下一个问题是关于我的查询。我见过大多数查询使用 WHERE + IN 组合和“*”表示 SELECT。但是,我需要更接近于:

$sql = "SELECT Fdate, Ftime, (list of variable columns from the checked options such as 'gate', 'pressure', 'flow' --> but only if they've been checked) FROM minute_db WHERE Fdate BETWEEN '$from_date' AND '$to_date'";

$result = $conn->query($sql);}
if ($result->num_rows > 0) {

现在 - 至于我的表格标题,如果我要查找单个值,我可以使用以下代码:

echo "<table><tr><th>Date</th><th>Time</th><th>Level (ft)</th></tr>";}

但是,我需要用检查项目的结果(根据需要 1、2、3 或更多变量)以及日期和时间记录动态填充标题。

echo "<table>";}
else {
echo "0 results";}
$conn->close();
?>

我的最终结果是用户可以输入日期和时间范围并选择要显示的数据,例如,如果他们只想知道 2016 年 4 月 7 日的门设置和压力,他们会输入那个日期并选中这两个框,这样他们就会得到一个表格(下面没有格式 - 只是试图表示),例如:

Date       |     Time |   Gate Setting  |  Pressure 
----------------------------------------------------
2016-04-07 |    11:00 |      21         |      50 

我最终会有一个表,其中包含数万行数据可供选择(并且将包括对可提取数据量的限制),以及最多 56 列变量可供选择。我没有使用任何特殊/花哨的数学函数来对时间段等进行分组 - 我已经手动将其全部分离并上传,因此它已准备就绪。我尝试了很多来自互联网的不同解决方案,但最终都失败了。 SELECT 的 * 选项看起来不像我的那样,IN 选项也不像 - 但我不确定(只是推测因为两者都没有用)。我在一个 netfirms mysql 平台上,所以它已经很更新了(我将把所有东西都改成 mysqli 以避免因不使用它而产生的任何问题——所以任何提前的反馈都会很棒!!我很感激任何想法你有!

最佳答案

感谢上面的 Deep 解决方案 - 它可以按原样完美运行!惊人的。至于表格数组的使用,我很挣扎,因为我可以填充表格,但得到了日期和时间的副本(如我在上面的回复中所述)。但是-我只是将脚本稍微移动了一下就可以了。现在,用户将返回包含日期、时间的列,然后是他们正在寻找的其他变量,并排在页面上,作为比较值(注意 - 我还没有达到 mysqli 或 pdo 的程度,所以如果这是旧的,请根据需要更新)。希望这会有所帮助 - 再次感谢!所以 - 从上面 Deep 帖子的 sql 行(完全填写)来看,这是表格 -->

$sql = "SELECT Fdate, {$wantedFields} Ftime FROM minute_db WHERE Fdate BETWEEN '$from_date' AND '$to_date' AND Ftime BETWEEN '$from_time' AND '$to_time'";

$result = $conn->query($sql);
}
if ($result->num_rows > 0) {
//header fields
echo "<table><tr><th>Date</th><th>Time</th>";       
        foreach($tableDynFields as $c) {
        echo "<th>$c</th>";
    }
    echo "</tr>";
//results
while ($row = $result->fetch_assoc()) {                         
            echo "<tr><td>".$row["Fdate"]."</td><td>".$row["Ftime"]."  </td>";
        foreach($tableDynFields as $c) {
            echo "<td>".$row[$c]."</td>";
        }
        echo "</tr>";
    }
    echo "</table>"; 
//result set free
  $result->free(); 
    } else {
        echo "query failed.<hr/>";
    }
$conn->close();
?>

我唯一要补充的是,如果您必须像我一样过滤和排序尽可能多的数据——最好在选择语句的末尾放置一个强制限制器,或者类似的东西!

关于php - 如何对 mysql 数据库进行多部分 PHP 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37604305/

相关文章:

mySQL - 连胜纪录

java - 如何将值与 ListView 中的每个复选框关联起来?

javascript - 如何根据条件动态设置 Aurelia 中复选框的选中属性

php - 在没有 Composer 的情况下使用 Google Ads API PHP 客户端?

php - Bash one liner - 测试一个文件是否存在,如果它有其他错误退出

mysql - 使用 "ec2-modify-snapshot-attribute"自动将快照复制到另一个帐户

java - MySQL x Java - 引发异常

javascript - 如何根据选中或未选中的复选框添加/删除项目?

php - laravel 5.4 中更新数据时 $request->get() 未获取表单值

php - 如何在 FuelPHP 中的关系查询中添加条件?