我希望能得到一些帮助或推动正确的方向,我是php新手,还在学习。
目前我正在尝试开发一个可以添加,编辑,删除和搜索我的MYSQL数据库的网站。添加,编辑,删除部分我感到非常自信,不应该有问题。我只是遇到搜索功能问题。我可以手动搜索我的数据库并显示该表中的所有内容,但现在我正在尝试创建它以便我可以输入名字或姓氏,并且将显示表格中有关查询的所有数据。
目前我有2个php文件(search.php):带有“输入类型:文本框”和提交按钮(所以我可以输入名字并点击搜索),我也有一个(searchresult.php):我想搜索我输入的第一个名字,并显示cust_id,名字,姓氏和电子邮件(在我的数据库中的customers表中填充)。
目前我收到的错误是:“警告mysql_fetch_array()期望参数1是资源,布尔给定”,iv一直在阅读有关该问题,但仍不确定该怎么做,并希望得到一些帮助用我的代码,也许是对错误的更好(愚蠢的)解释。
下面显示我的两个页面的代码:
下面是我的“search.php”代码:只是一个简单/基本的html
<!DOCTYPE HTML>
<html>
<head>
<title>Conxbiz - Search Customer</title>
<link rel="stylesheet" type="text/css" href="../conxbiz/css/main.css">
</head>
<body>
<form name="form" action="searchresult.php" method="get">
<input name="firstname" type="text">
<input type="submit" name="search" value="Search">
</form>
<?php
?>
</body>
</html>
以下是我的“searchresult.php”代码:
<!DOCTYPE HTML>
<html>
<head>
<title>Conxbiz - Home</title>
<link rel="stylesheet" type="text/css" href="../conxbiz/css/main.css">
</head>
<body>
<?php
$firstname = $_GET['firstname'];
echo "<table>";
echo "<tr>";
echo "<th>cust_id</th>";
echo "<th>First Name</th>";
echo "<th>Last Name</th>";
echo "<th>Email</th>";
echo "</tr>";
mysql_connect("localhost", "root", "") or die("Could not connect: " . mysql_error());
mysql_select_db("conxbiz");
$query = mysql_query("SELECT * FROM customers WHERE firstname '$firstname'");
while ($row = mysql_fetch_array($query, MYSQL_ASSOC))
{
$cust_id = $row['cust_id'];
$firstname = $row['firstname'];
$lastname = $row['lastname'];
$email = $row['email'];
echo "<tr>";
echo "<td>" . $row['cust_id'] . "</td>";
echo "<td>" . $row['firstname'] . "</td>";
echo "<td>" . $row['lastname'] . "</td>";
echo "<td>" . $row['email'] . "</td>";
echo "</tr>";
}
echo "</table>";
?>
</body>
</html>
所以重新上限,我的目标是我想在文本框中输入说“adam”,点击搜索并将php代码拉出“cust_id,firstname,lastname和email”并将其显示在屏幕上我在数据库中拥有的所有广告。
是否属于:
id喜欢我的编码帮助,但我希望我也能得到错误的解释以供将来参考!
我的编码不是最好的,但就像我说我还在学习,现在只是试图让基本功能起作用......宝贝步骤,哈哈......
我猜我的编码是完全错误的:(但希望有人可以帮助我
提前感谢您的任何帮助/指导!
答案 0 :(得分:3)
这是无效的语法:
SELECT * FROM customers WHERE firstname '$firstname'
您需要一个运营商,例如=
:
SELECT * FROM customers WHERE firstname = '$firstname'
请注意,即使进行此更改,您的代码也容易受到SQL注入攻击。事实上,如果它可行,我建议完全放弃mysql_*
函数(它们已被弃用)并转移到PDO,这样可以更容易地编写不易受攻击的代码SQL注入。
答案 1 :(得分:0)
在行中:
$query = mysql_query("SELECT * FROM customers WHERE firstname '$firstname'");
在这个名字之后加上一个等号
$query = mysql_query("SELECT * FROM customers WHERE firstname = '$firstname'");
此外,使用前缀为mysql
的数据库对象和方法(如mysql_query
)已经过时且不安全。我建议更新前缀为mysqli
的方法,或者如果您想保护自己的应用程序,请使用PDO
。
答案 2 :(得分:0)
每当您传递给mysql_query的查询的查询出现错误时,都会收到此错误。这意味着您的查询有问题。您需要检查的第一件事是您编写的查询。
在这种情况下,您忘记放置&#34; =&#34;在姓氏&$ 39; $ firstname&#39;&#34;&#34;。
之间签名因此尝试
$ query = mysql_query(&#34; SELECT * FROM customers WHERE firstname =&#39; $ firstname&#39;&#34;);
或者因为它是一个字符串(char或varchar类型),所以尝试使用like运算符。
$ query = mysql_query(&#34; SELECT * FROM customers WHERE firstname like&#39; $ firstname&#39;&#34;);