从html select更新mysqli查询

yws3nbqq  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(337)

我有一个tests.php网页,它使用在线服务器上mysql数据库的数据成功地创建和填充了一个html表。接下来,我想通过添加html select来限制sql查询返回的行数,从而使web页面具有交互性。我已经添加了html选择代码,并修改了sql查询以使用变量作为限制。我遇到的问题是如何在select下拉列表更改时运行查询。我假设需要调用某种页面刷新,但不确定如何进行。例如,我是否需要将html作为from括起来,并有一个submit按钮来实现这一点?这不是我想要的,理想情况下,用户按下html select,然后页面刷新或重新运行sql数据库查询。
这是我写的第一个php代码。
我的选择代码

<select name="limit" id="limit">
    <option value="10">10</option>
    <option value="25">25</option>
    <option value="50">50</option>
    <option value="100">100</option>
</select>

php代码

</body>
</html>
<?php
$limit = 10;
if(isset($_POST["limit"])) $limit = $_POST["limit"];

$con=mysqli_connect("localhost","user","password","database");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$result = mysqli_query($con,"SELECT * FROM TableName WHERE Region='Home' ORDER BY TeamName ASC LIMIT $limit");

echo "<table class='sample' style='width:50%'>
<tr>
<th>Team Name</th>
<th># Players</th>
<th>Venue</th>
<th>Date</th>
<th>Score</th>
</tr>";

while($row = mysqli_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['TeamName'] . "</td>";
echo "<td>" . $row['NumPlayers'] . "</td>";
echo "<td>" . $row['Venue'] . "</td>";
echo "<td>" . $row['Date'] . "</td>";
echo "<td>" . $row['Score'] . "</td>";
echo "</tr>";
}
echo "</table>";

mysqli_close($con);
?>

更新
我想我可能有一个更简单的解决方案使用javascit,虽然它不能正常工作。
使用javascript函数:

window.location.reload(true);

并更改我的html选择

<select onchange="refresh.call()">

但是,当页面重新加载时,它使用的是键入的$limit值

$limit =10;

而不是选择值。
页面刷新正在工作,但是有没有办法注入html select值呢?

7nbnzgx9

7nbnzgx91#

消毒输入

首先,您需要清理limit变量,因为允许直接输入sql是不安全的。
请参见:
用php清除用户输入的最佳方法是什么?和
https://www.shift8web.ca/2015/06/securing-your-mysql-queries-from-sql-injection-in-php/

单页应用程序方法

其次,您需要决定是否使用javascript重新编写html注解(在这种情况下,您将发出ajax/jquery请求)。然后您将使用一些框架或javascript(innerhtml='')或编辑dom树来重写html。
请参阅:发布和获取的ajax教程

https://stackoverflow.com/a/19527642/1688441

重新加载页面

如果您决定不想使用javascript重写dom树,那么唯一的解决方案是使用带有limit参数的get或post刷新整个页面。
因此,您将使用onchange侦听器,并使用limit参数再次调用页面。
请参阅:用户单击组合框后重新加载页面(使用一些规则)

相关问题