使用 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 查询的表的主要内容,如果未能解决你的问题,请参考以下文章
使用 jQuery ajax 函数将 php 值发送到 php 函数