-1

可能重复:
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>
4

3 回答 3

2

请注意,不推荐使用旧扩展...请参阅文档顶部的mysql_通知mysql_query

不鼓励使用此扩展程序。相反,应该使用MySQLiPDO_MySQL扩展。另请参阅 MySQL:选择 API 指南相关的常见问题解答以获取更多信息。此功能的替代方案包括:

  • 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返回 a ...请参阅此处的文档boolean false

请花点时间阅读一下SQL 注入

请注意 ,此答案将解决您的问题-但仅解决它对您将来没有帮助....

于 2012-07-02T13:40:31.800 回答
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,现在有这个声明。

于 2012-07-02T13:52:08.910 回答
0

你必须移除这个附近的支架FirstName

$sql=mysql_query("SELECT  * FROM members WHERE FirstName LIKE '". $fname ."%' OR LastName LIKE '". $lname ."%'");
于 2012-07-02T13:37:25.257 回答