-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

この拡張機能の使用はお勧めできません。代わりに、MySQLiまたはPDO_MySQL拡張機能を使用する必要があります。詳細については、MySQL: API ガイドの選択および関連する 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、これにより、クエリでエラーが出力されます...クエリが失敗した場合は a をmysql_query返します...こちらのドキュメントを参照してください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

ここでの 3 番目の問題は<?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 に答える