0

検索結果を新しいウィンドウにエコーする方法を見つけようとしています。

基本的に、ユーザーは検索バーの場所、名前などを入力すると、その結果に対して何人のユーザーが存在するかを示す 5 つのユーザー結果が表​​示されます。これは、スペースの使用を制限するためです。次に、ユーザーは [さらに結果を表示] をクリックすると、別のページに移動し、そこでクエリが実行され、検索でクエリに一致するユーザーのみがエコーアウトされます。つまり、「ロンドン」のユーザーです。

しかし、現時点ではすべてのユーザーが表示されており、その理由がわかりません。誰かが私が間違っているところを教えてください。ありがとう。

検索結果を 5 つに制限する私の search.php ページは次のとおりです。

<?php
//PHP CODE STARTS HERE

if(isset($_GET['submit'])){

// Change the fields below as per the requirements
$db_host="localhost";
$db_username="root";
$db_password="";
$db_name="";
$db_tb_atr_name="display_name";

//Now we are going to write a script that will do search task
// leave the below fields as it is except while loop, which will display results on screen

mysql_connect("$db_host","$db_username","$db_password");
mysql_select_db("$db_name");

$query=mysql_real_escape_string($_GET['query']);


$query_for_result=mysql_query("SELECT *
                        FROM ptb_stats
                        WHERE display_name like '%".$query."%' OR location LIKE '%".$query."%' OR age LIKE '%".$query."%' OR nationality LIKE '%".$query."%' OR ethnicity LIKE '%".$query."%' OR hobbies LIKE '%".$query."%' OR local_station LIKE '%".$query."%' LIMIT 5");
echo "<div class=\"search-results\">";
while($data_fetch=mysql_fetch_array($query_for_result))

{

    echo "<div class=\"text\"><a href=\"profile.php?id={$data_fetch['user_id']}\" class=\"search\">";
    echo "<div class=\"spacing\"><img width=35px height= 30px src=\"data/photos/{$data_fetch['user_id']}/_default.jpg\" class=\"boxgridsearch\"/> "; 
     echo substr($data_fetch[$db_tb_atr_name], 0,160);
    echo "</a></div></div>";

}
echo "<div class=\"morebutton-search\"><a href=\"search_results.php?to=%$query%\" target=\"_blank\" \">+ view more results</a></div>";


mysql_close();
}

?>

そして、クエリに一致するすべての結果を表示する私の more_search_results.php ページは次のとおりです。

<?php
$db_host="localhost";
$db_username="root";
$db_password="";
$db_name="";
$db_tb_atr_name="display_name";

//Now we are going to write a script that will do search task
// leave the below fields as it is except while loop, which will display results on screen

mysql_connect("$db_host","$db_username","$db_password");
mysql_select_db("$db_name");

$query=mysql_real_escape_string($_GET['query']);


$query_for_result=mysql_query("SELECT *
                        FROM ptb_stats
                        WHERE display_name like '%".$query."%' OR location LIKE '%".$query."%' OR age LIKE '%".$query."%' OR nationality LIKE '%".$query."%' OR ethnicity LIKE '%".$query."%' OR hobbies LIKE '%".$query."%' OR local_station LIKE '%".$query."%'");
echo "<div class=\"search-results\">";
while($data_fetch=mysql_fetch_array($query_for_result))

{

    echo "<div class=\"boxgrid caption\"><a href=\"profile.php?id={$data_fetch['user_id']}\"><img width=140px height=180px src=\"data/photos/{$data_fetch['user_id']}/_default.jpg\"><div class=\"cover boxcaption\">"; ?>
    <h58><? echo substr($data_fetch[$db_tb_atr_name], 0,160);?></a></h58> 
    </div>
    </div>
<? } ?>
4

1 に答える 1

0

実際にリンクqueryを渡したときに呼び出される変数を取得しようとしています。toクエリが をテストしているため、すべてのレコードが取得されLIKE '%%'ます。これはすべてに一致します。

この行は間違っています...

echo "<div class=\"morebutton-search\"><a href=\"search_results.php?to=%$query%\" target=\"_blank\" \">+ view more results</a></div>";

そのはず...

echo "<div class=\"morebutton-search\"><a href=\"search_results.php?query=$query\" target=\"_blank\" \">+ view more results</a></div>";

%また、ワイルドカードを既に適用していることに注意してください。したがって、パラメーターでmore_search_results.php余分な s を送信する必要はありません。%

注意:mysql_関数ファミリーの使用は控えてください。それらは推奨されておらず、安全ではありません。それらを使用すると、SQL インジェクションにつながる可能性があります。MySQLi または PDO でパラメータ化されたクエリを使用する必要があります。

于 2013-02-03T01:35:15.547 に答える