gpt4 book ai didi

php - 使用 PHP 和 MYSQL 进行过滤

转载 作者:行者123 更新时间:2023-11-29 18:22:02 25 4
gpt4 key购买 nike

我是一名编程爱好者,正在从事我的一个小项目,但是当我想为我的 mysql 输出创建过滤器时,我陷入了困境。

当我填写所有搜索输入字段并提交时,一切正常,会出现正确的过滤结果。但是,当我保留一个字段时,使用 AND 条件时不会显示任何内容(仅显示 else 命令)。如果我使用 OR 并将其留空,它将显示所有结果,而不关心必填字段中已填写的内容。

即使其中一个字段为空,是否有任何方法可以显示结果?我尝试使用 stackoverflow 中不同帖子中的代码,但还没有运气,因为我经验不足,无法弄清楚如何在我的代码中使用它。

if(isset($_POST["profilename"]) && $_POST["profilename"] != "") 
$sql .= " AND profilename = '". $_POST["profilename"] ."'";

下面是我的代码,如果您可以查看并建议我可以编辑哪些内容,以便过滤正常工作。

<select class="form-control" id="Select1" name="departure">
<select class="form-control" id="Select2" name="destination">
<select class="form-control" id="Select3" name="layover">

...

<?php
include_once("connect.php");

if (isset($_GET['submit'])) {
$departure = mysqli_real_escape_string($connection, $_GET['departure']);
$destination = mysqli_real_escape_string($connection, $_GET['destination']);
$layover = mysqli_real_escape_string($connection, $_GET['layover']);



$result = mysqli_query($connection, "SELECT * FROM crud
WHERE departure LIKE '$departure%'
AND kam LIKE '$kam'
AND layover LIKE '$layover'
ORDER BY id DESC");



if($make = mysqli_num_rows($result) > 0){
while($r = mysqli_fetch_assoc($result)){
echo '<div style="display:block;"'.$r['departure'].'</div>';
echo '<div style="display:block;"'.$r['kam'].'</div>';
echo '<div style="display:block;"'.$r['layover'].'</div>';
//following code..
}
}else{
echo'<h4>No match found!</h4>';

print ($make);
}
mysqli_free_result($result);
mysqli_close($connection);
}

?>

例如:使用 Destination 过滤 Departure 并将 Layover 留空 -> 应返回所需的Departure 和 Destination< 的结果 与任何中转。或第二个示例:用 Layover 填充 Destination,但将 Departure 留空,将导致所需的 Destination and Layover 搜索任何出发

请告诉我我的代码是否可行以及如何实现。非常感谢你们!!

最佳答案

您可以在每个不同的 AND 条件中对照 OR 条件中的空字符串检查每个输入。

"SELECT * FROM crud
WHERE ('$departure' = '' OR departure LIKE '$departure%')
AND ('$kam' = '' OR kam LIKE '$kam')
AND ('$layover' = '' OR layover LIKE '$layover')
ORDER BY id DESC"

这样,如果未给出某个输入参数,则条件的相应部分将被解释为,例如 ('' = '' OR Departure LIKE '$departure%') 将对每一行计算为 true,因为无论 LIKE 比较如何,'' 始终等于 ''

一些注意事项 - 首先,没有任何通配符,您的 LIKE 比较基本上像 = 一样工作,(例如 kam LIKE '$kam' 将匹配相同的行如kam = '$kam')。因此,要么只使用=,要么添加一些通配符以使它们有用。

其次,考虑使用准备好的语句,而不是像这样将值连接到 SQL 中。连接方法使您的代码容易受到 SQL 注入(inject)和各种恼人错误的影响(即使您转义了字符串)。

关于php - 使用 PHP 和 MYSQL 进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46496673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com