在我的名为searchproduct1.html的HTML页面上,我有以下表单代码:
<form action="search1.php" method="post">
<input type="text" name="keyword">
<input type="submit" name="search" value="Search">
</form>
对于我的名为search1.php的php页面,我有:
$username = "user";
$password = "pass";
$host = "xyz";
$db = $username;
$connection = mysqli_connect($host, $username, $password, $db);
if (mysqli_connect_error()){
echo "Failed to connect to MySQL: " . mysqli_connect_error();
if (!$connection) {
die ("Please reload page. Database connection failed: " . mysqli_error());
}
if (isset($_POST['keyword'])) {
$keyword = trim ($_POST['keyword']);
$search = "SELECT * FROM ProductManagement WHERE cause_name LIKE '%$keyword%'";
$result = mysqli_query($search) or die('query did not work');
}
while($result_arr = mysqli_fetch_array( $result ))
{
echo $result_arr['cause_name'];
echo " ";
echo "<br>";
echo "<br>";
}
$anymatches=mysqli_num_rows($result);
if ($anymatches == 0)
{
echo "Nothing was found that matched your query.<br><br>";
}
}
?>
SQL数据库工作正常,用于通过HTML向数据库添加记录。当我在html页面上输入一个值时,它表示无法显示search1.php页面。有人能指出我正确的方向吗?我是PHP和SQL的新手。
编辑:已更改为mysqli
EDIT2:删除了页面底部的'}'并删除了exit命令。 PHP页面加载,但是空白
答案 0 :(得分:2)
此答案基于其原始帖子https://stackoverflow.com/revisions/33845874/1
您正在使用与mysql_
混合的很多mysqli_
个函数。
那些不同的API不会混用。为所有i
个功能添加mysql_*
。
例如,这个
mysql_error()
需要读作mysqli_error($connection)
然后$result = mysql_query($search)
需要读作$result = mysqli_query($connection,$search);
然后
mysql_fetch_array
为mysqli_fetch_array
您的代码也可以进行SQL注入。使用准备好的声明。
根据你的编辑
$result = mysqli_query($search)
在看到你的编辑之前我已经在上面写了它。它需要DB连接作为第一个参数。
阅读手册:
并且如另一个答案所示,你有一个exit();
,它不应该属于那个并且会做到这一点;出口/停止/暂停。
此or die('query did not work');
无法帮助您查找错误。
or die(mysqli_error($connection));
另外,如果这是您表单的确切代码,则会缺少结束</form>
标记。
将error reporting添加到文件的顶部,这有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
旁注:只应在暂存时进行显示错误,而不是生产。
N.B。:
如果你遇到错误,那么你需要逃避你的输入;无论如何你应该做的事情。
现在,在将代码放入我的编辑器之后,这个条件语句:
if (mysqli_connect_error()){
及其匹配的右括号错位。
你应该这样做:
if (mysqli_connect_error()){
echo "Failed to connect to MySQL: " . mysqli_connect_error();
} // added
并在PHP结束时删除其中一个大括号}
。
修改强>
这是我的最终修改。并重写。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
$username = "user";
$password = "pass";
$host = "xyz";
$db = "your_DB"; // and NOT $username if "user" isn't your database's name
$connection = mysqli_connect($host, $username, $password, $db);
if (!$connection) {
die ("Please reload page. Database connection failed: " . mysqli_error($connection));
}
if (!empty($_POST['keyword'])) {
$keyword = trim($_POST['keyword']);
$search = "SELECT * FROM ProductManagement WHERE cause_name LIKE '%$keyword%'";
$result = mysqli_query($connection, $search) or die(mysqli_error($connection));
}
while($result_arr = mysqli_fetch_array( $result ))
{
echo $result_arr['cause_name'];
echo " ";
echo "<br>";
echo "<br>";
}
$anymatches=mysqli_num_rows($result);
if ($anymatches == 0)
{
echo "Nothing was found that matched your query.<br><br>";
}
?>
答案 1 :(得分:1)
这取决于你得到的“无法显示”错误 - 我的预感是这是一个500错误,因为你的代码中有很多'看起来像'的错误:
1 /您正在使用mysqli_connect进行连接,但之后尝试在代码中使用mysql_ *不推荐使用的函数 - 当您没有mysql连接时 - 确保您只是在整个过程中使用mysqli_ *函数。
2 /获得$ result后,你的代码中有一个exit()语句,这意味着你永远不会真正处理结果的结果:
if (isset($_POST['keyword'])) {
$keyword = trim ($_POST['keyword']);
$search = "SELECT * FROM ProductManagement WHERE cause_name LIKE '%$keyword%'";
$result = mysql_query($search) or die('query did not work');
exit(); //This shouldn't be here...
}
3 / if(!connection){将始终返回true - 应该是if(!$ connection){,但这本身不会导致500。