我如何根据下拉列表 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?
我有一个 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?