我如何根据下拉列表 selection 查询 select 某个 table?

How can I have a PHP query select a certain table based on a drop down list selection?

我有一个 Web 程序,其目标是绘制用户已 select 编辑的某个 Kiln 的数据点。我的问题是,当用户想要 select 一个新的 Kiln 时,我如何才能将所有单独的 JSON 页面更新到从新 table 中提取数据的位置,他们 select编辑?

这是我的下拉列表创建程序代码。

<p class="navleft">
Kiln Number:<br>
<select name="kilns" id="kilns">
<?php
$sql = "SHOW TABLES FROM history";
$result = mysqli_query($con,$sql);

while($table = mysqli_fetch_array($result)) { // go through each row that was returned in $result
 echo ("<option value='". $table[0] . "'>" . $table[0] . "</option>");
}
?>
</select>
</p>

这是 php 页面之一,其中我 select 来自 table 值的所有数据,并将其转换为 JSON 文件。

<?php
$con = mysqli_connect("localhost","KilnAdmin","KilnAdmin","history");

// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

mysqli_select_db($con,"history") or die ("no database");   

//Fetch Data
$query = "SELECT * FROM k1_history LIMIT 1000";
$result = mysqli_query($con,$query);

if ($result) {
 $data = array();
 while($row = mysqli_fetch_assoc($result)) {
  //$data[] = $row;
        $data[] = array(
    "date" => $row[ 'Timestamp' ],
    "value" => $row[ 'DryBulbFront' ]
  );
    }
 echo json_encode($data);
}
else {
 echo "Error";
}
?> 

哪里说 k1_history,我怎样才能在其他页面的保管箱菜单中将其作为用户的 selection?

如果我没看错你想要什么,那么你需要的就是Ajax。

您必须像现在一样填充 select,并且在每个 select 上,对 .php 进行 Ajax 调用,您将在其中处理用户的内容已选择。在您的情况下,此 .php 文件将采用用户选择的 table 名称、运行 查询和 return 一些返回 html 的结果。出于演示目的,我将举例说明。

假设在你的 .html 中你有一个 select 这样的:

Select Value: 
    <select name="kilns" id="kilns">
        <option value="1">Option 1</option>
        <option value="2">Option 2</option>
        <option value="3">Option 3</option>
    </select>

选项的值 属性 中定义的是您要传递给我提到的 .php 文件的内容。为此,您使用 Ajax,因此在一些 script 标签内您有:

$('#kilns').on('change', function(e) {
    var data = {'kilns': this.value};
    $.ajax({
        type: 'POST',
        url: 'submit.php',
        data: data,
        dataType: 'json'
    }).done(function(msg) {
        alert(msg);
    });
});

这样做的是,每次用户 select 从 select 中获取内容时,都会调用此函数,其中 select 的值(var data = {'kilns': this.value};) 正在通过 POST 发送到名为 submit.php 的文件。 submit.php 可能如下所示:

if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
    $kilns_error = 0;

    if (isset($_POST['kilns']) && !empty($_POST['kilns'])) {
        $kilns = $_POST['kilns'];
    } else {
        $kilns = null;
        $kilns_error = 1;
    }

    if ($kilns_error != 1) {
        echo json_encode($kilns);
    }
}

这里发生的是在我们检查我们确实有一个 POST REQUEST 之后,我们检查该值是未定义的还是空的。在这个简单的检查之后,我们继续 echo json_encode($kilns);,在那里我们 return 我们最初发送给 .php 脚本的值,实际上是用户 selected 的值.

在你的情况下,你必须做些什么才能在 .php 脚本中实际做一些事情,而不仅仅是 return 你调用它的值。此外,确保通过白名单传递您获取的值,以确保用户 select 是一个实际的 table 并且不会试图为您的数据库制造问题,因为这真的很容易在实际 selecting 之前更改他要 select 的值。看看 mysqli 和 PDO 的准备好的语句。

在这种情况下你必须强烈注意避免SQL注入。使用 Konstantinos Vytiniotis 提到的白名单方法并查看 How can I prevent SQL injection in PHP?