2012-07-02 100 views
-1

可能重複:
PHP, MySQL validation malfunction and search doesn't work?PHP和MySQL搜索不起作用?

我創建了一個表格,每一件事工作正常,除了搜索。例如,每當用戶輸入搜索框中的任何值,它會顯示從員工和等的數據庫,例如名稱,結果...... 請參閱我下面的編碼...

<html> 
<head> 
<?php 
//require_once('student_form.php'); 
if(isset($_POST['search'])){ 
$id=$_REQUEST['id']; 
$fname=$_POST['fname']; 
    //connect to the database 
include('connection.php'); 
//-query the database table 
$sql=mysql_query("SELECT * FROM members WHERE (FirstName LIKE '". $fname ."%' OR LastName LIKE '". $lname ."%'"); 
    //-run the query against the mysql query function 
    $result=mysql_query($sql); 

    if($row=mysql_fetch_array($result)){ 
       $fname=$row['FirstName']; 
       $lname=$row['LastName']; 
       /*$email=$row['Email']; 
       $age =$row['Age']; 
       $gender=$row['Gender']; 
       $course = $row['Course'];*/ 
    } 
    //-display the result of the array 
    else 
    { 
    <?php echo $rows['FirstName']; ?> 
    <?php echo $rows['LastName']; ?> 
    } 
} 
?> 
</head> 
<body> 
<form action="search.php" method="post"> 
<table> 
    <tr> 
    <td><strong>search box</strong></td> 
    <td><strong>:</strong></td> 
    <td><input type="text" name="search" value=""size="30"/><input type="submit" name="s1" value="Search"/></td> 

</table> 
</form> 
</body> 
</html> 
+0

我建議不要在搜索中使用'LIKE'語句。這是爲什麼; http://stackoverflow.com/questions/478472/sql-full-text-search-vs-like – aacanakin

+1

_ *注意* _注意SQL注入。至少,在'$ fname'和'$ lname'周圍使用['mysql_real_escape_string()'](http://php.net/mysql_real_escape_string)。但更好的是,使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/mysqli)的準備語句,而不是使用舊的mysql擴展。 – Wiseguy

+1

[你的問題一個小時前]的一個副本(http://stackoverflow.com/questions/11293712/php-mysql-validation-malfunction-and-search-doesnt-work)這反過來又非常類似[你的問題在此之前,在6月27日](http://stackoverflow.com/questions/11227038/search-function-not-working-in-php)? – halfer

回答

2

請注意,使用舊mysql_擴展即將過時......看到通知在top of the mysql_query doc

不推薦使用此擴展名。應該使用MySQLiPDO_MySQL擴展名。另請參閱MySQL:choosing an API guiderelated FAQ以獲取更多信息。替代該功能包括:

  • mysqli_query()
  • PDO ::查詢()

但給你看的是什麼問題,替換此行:

$sql=mysql_query("SELECT * FROM members WHERE (FirstName LIKE '". $fname ."%' OR LastName LIKE '". $lname ."%'"); 
//-run the query against the mysql query function 
$result=mysql_query($sql); 

與此:

$result=mysql_query("SELECT * FROM members WHERE (FirstName LIKE '". $fname ."%' OR LastName LIKE '". $lname ."%'"); 
if (!$result) { 
    die('Could not query:' . mysql_error()); 
} 

你只需要執行一次mysql_query,這將現在輸出的錯誤與您的查詢......作爲mysql_query如果查詢失敗,返回boolean false ... see the docs here

還有,請花一些時間來閱讀SQL Injection

注意this answer將解決您的問題 - 但只是固定它不會幫助你在未來....

0

你有要卸下支架附近的這個FirstName

$sql=mysql_query("SELECT * FROM members WHERE FirstName LIKE '". $fname ."%' OR LastName LIKE '". $lname ."%'"); 
1

你必須完全重寫代碼。

首先,從查詢FirstName之前卸下支架:

"SELECT * FROM members WHERE FirstName LIKE '". $fname ."%' OR LastName LIKE '". $lname ."%'" 

現在,要注意:如果$sql是功能mysql_query,則$result運行查詢(mysql_query(mysql_query("...")))的查詢。

相反,使用$result = mysql_query("...")並刪除該變量$sql

這裏的第三個問題是,你有你的PHP代碼內<?php標籤。刪除else{ }中的<?php?>標籤。

我不明白什麼是$rows,現在有這個聲明。

+0

謝謝我也在想 – bleach64