php - 如何修复 Web 应用程序搜索栏中的 php 查询并显示结果
问题描述
我的 Web 应用程序的导航栏中有一个搜索框,它出现在每个网页上。我有一个查询应该根据用户在搜索框中输入的文本从我的数据库中提取结果,但目前它没有显示任何结果。
我的 Web 应用程序本质上是一个用于事件的公告板,因此我希望用户能够搜索事件,然后将该事件显示在表格中或将其带到事件本身的页面中,以更容易者为准。我使用 Netbeans 作为我的 IDE,我的数据库是 XAMPP 中的 MariaDB。我的 Web 应用程序现在只是在本地托管。我目前有一个应该搜索数据库的查询,但我认为查询的输出或结果是错误的。我不擅长 PHP,但只需要这样做,因为它在 Web 应用程序的每个页面中都是如此。
每页搜索栏代码:
<form action="search.php" method="post">
<input type="text" name="search" placeholder="Search for an event..">
<input type="submit" value="Search">
</form>
然后 search.php 文件如下所示:
<?php
$search = filter_input(INPUT_POST, 'search');
$companyname = filter_input(INPUT_POST, 'companyname');
$eventname = filter_input(INPUT_POST, 'eventname');
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "fyp";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
$sql = "SELECT eventname FROM event WHERE eventname LIKE '%$search%'";
if ($conn->query($sql) === TRUE) {
echo "Result Found";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
?>
目前,它只是出现“连接成功错误:从事件 WHERE 事件名称 LIKE '%Golf%' 中选择事件名称”。我在数据库中有一个名为“SHARE Golf Classic”的活动,这就是我目前正在测试的活动。我想导航到一个名为 Event.php 的页面并在表格中显示结果,或者用事件的详细信息填充标签或文本框。事件表由 eventid、eventname、eventtype、charityid、contactdetails、位置和日期组成。
解决方案
确定对象的错误(Mysqli)可能很困难,这就是为什么你应该使用try-catch
方法来代替。您的代码可能如下所示:
<?php
$search = filter_input(INPUT_POST, 'search');
$companyname = filter_input(INPUT_POST, 'companyname');
$eventname = filter_input(INPUT_POST, 'eventname');
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "fyp";
try {
$conn = new mysqli($servername, $username, $password, $dbname);
$sql = "SELECT eventname FROM event WHERE eventname LIKE '%$search%'";
if (($result = $conn->query($sql)) === true) {
var_dump($result)
}
} catch (mysqli_sql_exception $e) {
var_dump($e)
} finally {
$conn->close();
}
请记住,POST
在这样的查询中使用请求中的参数可能很危险。我建议为 PHP ( PDO ) 研究一个不同的 MySQL 客户端,并改用准备好的语句。
上面的代码示例也是使用finally
PHP 5.5 中添加的,请确保您的版本是这个或更高版本(当前支持的 PHP 版本是 7.2 和 7.3 - 您应该始终是最新的)。
推荐阅读
- mongodb - MongoDB 日期字段和时区处理
- arduino - 如何创建一个简单的 Arduino 脚本,允许我远程打开和关闭 LEDBuitIn?
- swift - 一种方法调用自身的坏习惯?
- android - Finish() 没有关闭我的第二个 Activity,OnBackPressed() 破坏了应用程序
- r - 脚本生成 Y 轴,但不生成 X 轴
- dependency-injection - .NET Core 是否支持服务定位器模式?
- sql - SQL。计算每组列的变化
- node.js - 我在尝试将 babel 安装到我的 node.js 项目中时遇到问题
- c# - LINQ交叉连接列表列表?未知数量列表的笛卡尔积
- matlab - MIJ:在 Matlab 中执行 imageJ(斐济)宏直到结束