使用 Select 表单过滤使用 PHP 从 MySQL 查询的表

Posted

技术标签:

【中文标题】使用 Select 表单过滤使用 PHP 从 MySQL 查询的表【英文标题】:Using Select form to filter table queried from MySQL using PHP 【发布时间】:2018-12-05 11:26:58 【问题描述】:

我正在编写一些 php 来从我在 WAMP 服务器上设置的 mysql 数据库进行查询。我也在学习 PHP 和 html javascript,所以这两种语言的语法对我来说还是有点陌生​​。

编辑:语法错误已解决,但是我现在收到一个

未定义索引:家庭

编译时出错。我正在通过我的服务器运行两个文件,front.php 和 back.php。 Front 包含一个选择器表单,用户可以在其中选择一个过滤器以应用于 MySQL 的 php 查询。 back.php 使用 $_REQUEST 接收选择并在 SELECT 查询中使用它。我已经在下面的 front.php 中发布了与选择器表单相关的代码。

<form method="POST">
<select name="family" onchange="showUser (this.value)">
<option value="empty">Select a Family:</option>
<option value="capacitor">capacitor</option>
<option value="resistor">resistor</option>
<option value="ferrite bead">ferrite bead</option>
</select>
</form>

这是 back.php 中的 $_REQUEST 调用

$sql="SELECT * FROM testv2 WHERE family='".$_REQUEST['family']."'";
$result = mysqli_query($con,$sql);

【问题讨论】:

问题来自$sql="SELECT * FROM testv2 WHERE family ='$_REQUEST['family']'";仔细观察 旁注,这也是受sql注入的影响。 @AkintundeOlawale 我添加了包含 .$_REQUEST['family'] 的句点。如果这就是您的意思,请仔细查看,但会出现相同的语法错误。 谢谢,想通了。但是我现在收到未定义的索引错误:family 在同一行 【参考方案1】:

您应该将第 24 行更改为:

$sql="SELECT * FROM testv2 WHERE family ='$_REQUEST['family']'";

收件人:

$sql="SELECT * FROM testv2 WHERE family ='" . $_REQUEST['family'] . "'";

因为这应该可以修复语法错误,但仍然使用上面的代码是个坏主意,因为代码存在 SQL 注入漏洞。

如果您正在学习,我建议您使用 PDO 准备好的语句。 http://php.net/manual/en/pdo.prepared-statements.php

【讨论】:

【参考方案2】:

你正在治疗

$sql="SELECT * FROM testv2 WHERE family ='$_REQUEST['family']'";

作为一个整数,把它当作一个字符串,这样做:

$sql="SELECT * FROM testv2 WHERE family ='".$_REQUEST['family']."'";

另一个建议是使用 LIKE

注意:LIKE 会增加数据库中给定的结果,所以如果你有很多数据,请注意它

编辑:根据 REQUEST,直接使用 $_POST 而不是 $_REQUEST,请查看Among $_REQUEST, $_GET and $_POST

【讨论】:

以上是关于使用 Select 表单过滤使用 PHP 从 MySQL 查询的表的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP 过滤器(Filter)进行严格表单验证

php 从db获取默认值到select表单

Ninja 表单使用 SQL/PHP 填充 Select

使用 jQuery ajax 函数将 php 值发送到 php 函数

PHP:如何使用 array_filter() 过滤数组键?

PHP过滤器,如何过滤输入数组