2014-04-26 109 views
-1

我希望能夠在正確的方向上得到一點幫助或推動,我是PHP的新手,仍在學習。警告mysql_fetch_array()期望參數1是資源,給定的布爾值

目前我正試圖開發一個網站,可以添加,編輯,刪除和搜索我的MYSQL數據庫。與添加,編輯,刪除部分,我覺得很有信心,應該沒有問題。我只是遇到搜索功能的麻煩。我可以手動搜索我的數據庫並在該表中顯示所有內容,但現在我正在嘗試使其可以輸入名字或姓氏,並且將顯示有關查詢的所有數據。 (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> 

所以要重新蓋,我的目標是,我想進入說:「亞當」到一個文本框,點擊搜索,並有PHP代碼拉起「CUST_ID,名字,姓氏和電子郵件」,並顯示這到了所有的屏幕我在數據庫中有大壩。

是它的一個案例:

  1. 它不讀我從文本框傳遞什麼,所以它的失敗。
  2. 它的閱讀什麼即時通過,但我的SQL是錯誤的,所以它的失敗
  3. 它是通過說一個數字而不是文本,所以它不期望它。
  4. 其返回true/false並且不顯示數據?
  5. 我的代碼是完全錯誤的,我應該放棄:(笑

ID喜歡與我的編碼的幫助,但我希望我也能得到錯誤的解釋,以供將來參考!

我的編碼是不是最好的,但就像我說我還在學習,現在只是試圖讓基本功能工作....嬰兒的步驟,哈哈...

我猜我的編碼是完全錯誤:(但希望有人能幫助我

提前感謝您的任何幫助/指導!

+0

「我是PHP新手,仍在學習」。停止學習已棄用的功能。使用PDO或mysqli。 – Mike

回答

3

這是無效的語法:

SELECT * FROM customers WHERE firstname '$firstname' 

你需要一個運營商,像=

SELECT * FROM customers WHERE firstname = '$firstname' 

請注意,即使有這樣的改變,你的代碼很容易受到SQL注入。實際上,如果可行的話,我建議完全不使用mysql_*函數(它們已被棄用),並且轉向PDO,這樣可以更容易編寫不受SQL注入攻擊的代碼。

+0

omg哇!謝謝 !!!不能相信我忘記了一個「=」號,iv一直在看我的代碼2天:(我會再看看PDO :)再次謝謝你! – user3577164

0

在行:

$query = mysql_query("SELECT * FROM customers WHERE firstname '$firstname'"); 

把一個等號姓名後這樣

$query = mysql_query("SELECT * FROM customers WHERE firstname = '$firstname'"); 

而且,使用與mysqlmysql_query前綴數據庫對象和方法是相當落伍了,不安全。我建議更新以mysqli爲前綴的方法,或者如果您想保護您的應用程序,請使用PDO

+1

謝謝!一個簡單的「=」符號:(大聲笑我會看着PDO!認爲id一直在看着這個代碼開啓和關閉2天耙我的大腦:(大聲笑 – user3577164

0

無論何時將查詢傳遞給查詢到mysql_query的查詢都有一些錯誤,您都會收到此錯誤。這意味着您的查詢有問題。首先你需要檢查你寫的查詢。

在這種情況下,你已經忘記放在 「=」 號在中間名字 '$名字'。 「

因此嘗試

$查詢=請求mysql_query(」 SELECT * FROM客戶WHERE姓= '$名字' 「);

或因爲它是一個字符串(char類型或varchar)使用像運營商嘗試

$查詢=請求mysql_query(」 SELECT * FROM客戶WHERE姓,如 '$名字' 「);

+0

只是一個快速點 - 沒有意義使用'LIKE'$ firstname''。如果沒有任何通配符,它​​的功能與'='$ firstname''' – andrewsi

+0

相同哦...感謝您糾正我! – Aragorn

相關問題