首页 > 解决方案 > 基于 mySQL 表名填充的下拉列表,并添加了按钮

问题描述

我想要一个下拉列表,它根据表名(而不是行)填充,并带有一个提交按钮,该按钮检索该表的行内容并显示它。

有一个在 Raspberry Pi 上运行的 Python 脚本,它每隔一段时间读取温度传感器,根据设备的主机名(如果它不存在的话)在 MySQL 模式中创建一个表,然后将温度tempreading以及时间和日期存储在datetime行。

连接到数据库的 PHP 脚本id, tempreading and datatime从由其主机名定义的表中选择。

PHP 脚本:getTemp.php

<?php

$host="localhost";  
$username="root";
$password="mysql";
$database="tempmonitor";
$device = gethostname(); 

$conn = new mysqli($host, $username, $password, $database);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";

echo "<br>";

$sql = "SELECT id, tempreading, datetime FROM ".$device."";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo "ID: " . $row["id"]. " - Temp: " . $row["tempreading"]. " " . $row["datetime"]. "<br>";
    }
} else {
    echo "0 results";
}
$conn->close();

?>

的HTML

<html>
<head>
<script>

function showTemp(str) {
    if (str == "") {
        document.getElementById("txtHint").innerHTML = "";
        return;
    } else { 
        if (window.XMLHttpRequest) {
            // code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp = new XMLHttpRequest();
        } else {
            // code for IE6, IE5
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200) {
                document.getElementById("Hint").innerHTML = this.responseText;
            }
        };
        xmlhttp.open("GET","getTemp.php?q="+str,true);
        xmlhttp.send();
    }
}
</script>
</head>
<body>


<select name="locations"> 
  <option value="0">Select a location:</option>
  <option value="1">Table 1</option>
  <option value="2">Table 2</option>
  <option value="3">Table 3</option>
  <option value="4">Table 4</option>
  <br>
  <br>
  <input type="submit" value="View" onclick="showTemp()">
  </select>
  <br>
  <br>
  <div id="Hint"><b>Temperatures will be listed here...</b></div>

<br>


</body>
</html>

</body>
</html>

如果我“硬编码”它,我可以让每行显示的行数据,所以我认为它大部分都在那里。这是下拉列表与数据库表和我坚持的按钮的链接。这是我对任何编码的第一次尝试,因此它主要是根据教程和在 w3schools 上阅读的大量时间构建的。

04/08/2019 好的,所以更新了。我现在可以列出表格并将它们打印到屏幕上,如下所示:

$showtables= "SHOW TABLES FROM ".$database."";
$result = $conn->query($showtables);

 while($table = mysqli_fetch_array($result)) { 
  echo($table[0] . "<br>");  
 }

我将如何改变:

echo($table[0] . "<br>");

而是填充下拉列表?我用选项值代码尝试了各种方法,但还没有成功。

标签: phpmysqlmysqli

解决方案


那么您可以使用“SHOW TABLES”sql 查询。它返回数据库中所有表的列表。您可以在选择框中显示此查询的结果


推荐阅读