2012-07-02 2 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

_ * cringe * _ Следите за SQL-инъекцией. По крайней мере, используйте '' mysql_real_escape_string() '] (http://php.net/mysql_real_escape_string) вокруг' $ fname' и '$ lname'. Но еще лучше использовать подготовленный оператор с [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), который, в свою очередь, очень похож на [ваш вопрос до этого, 27 июня] (http://stackoverflow.com/questions/11227038/search-function-not-working-in-php)? – halfer

ответ

2

Пожалуйста, обратите внимание, что при использовании старых mysql_ расширения в настоящее время не рекомендуется ... увидеть уведомление на top of the mysql_query doc

Использование этого расширения не рекомендуется. Вместо этого следует использовать расширение MySQLi или PDO_MySQL. См. Также MySQL: choosing an API guide и related 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-кода.Удалите теги <?php и ?> внутри else{ }.

Я не понимаю, что такое $rows, для этого есть декларация.

+0

Спасибо, я тоже думал, что – bleach64