【发布时间】:2020-05-19 07:48:30
【问题描述】:
我有一个代码,它有一个输入表面积的表格。 db_connect.php 连接数据库。我正在尝试填充一个下拉列表,条件是表面积大于输入到文本字段中的值的所有值都将显示在文本字段中。但是当我尝试运行代码时,我得到了所有的值。我该如何解决这个问题?提前谢谢!
<html>
<head>
<title>hi</title>
</head>
<body>
<form>
<p> surface area : <input name = "sa" type = "text"> </p>
<br>
</form>
<select name="areas">
<?php
$sa = $_POST['sa'];
include "db_connect.php";
$displayArea = "SELECT area FROM details where area > '".$sa."'" ;
$sql = mysqli_query($link, $displayArea);
echo "<option> Select </option>";
while ($row = mysqli_fetch_assoc($sql))
{
echo "<option value=\"areas\">" . $row['area'] . "</option>";
}
?>
</select>
</body>
</html>
【问题讨论】:
-
当
sa输入被填写后,您将需要使用ajax 来填充select列表。 -
警告:当使用
mysqli时,您应该使用parameterized queries 和bind_param将任何数据添加到您的查询中。 请勿使用字符串插值或连接来完成此操作,因为您创建了严重的SQL injection bug。 切勿将$_POST、$_GET或任何类型的数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。 -
注意:object-oriented interface to
mysqli明显不那么冗长,使代码更易于阅读和审核,并且不容易与过时的mysql_query接口混淆,因为缺少单个i会导致麻烦。示例:$db = new mysqli(…)和$db->prepare("…")程序接口是 PHP 4 时代的产物,不应在新代码中使用。 -
此 PHP 代码在服务器呈现 HTML 时立即运行。
$_POST['sa']不存在,直到有内容发布到此页面。正如GluePear所说,使用AJAX解决这个问题,在渲染初始页面后进行二次请求,每次更改sa时,发出新请求。