2017-01-26 17 views
0

データベースからユーザーの名前を取得する非常に基本的な検索フォームを作成しました。空の検索ボックスにEnterキーを押すたびに、エラーメッセージを表示する代わりにデータベース全体が表示されるか、Google検索ボックスのように何もしないと、2つの問題が発生します。第2に、検索結果がドロップダウンに表示され、次にユーザーがより多くの検索結果を必要とするたびにボタンが表示されるようにする。高度な検索フォームPHP

これらの変更を行う際にお手伝いください。任意のヘルプは間違いなく感謝されます。

<h2>Users:</h2><br> 
    <?php 
    $username=""; 
    $output = ''; 
    if (isset($_POST['search'])){ 
    $search_query = $_POST['search']; 
    $search_q = $_POST['search']; 
    $search_query = preg_replace("#[^0-9a-z]#i","", $search_query); 
    $search_q = preg_replace("#[^0-9a-z]#i","", $search_q); 
    $query = mysql_query("SELECT * FROM users WHERE username LIKE '%$search_query%' OR last_name LIKE '%$search_query%'") or die ("Could not search"); 
    $count = mysql_num_rows($query); 
    if($count == 0 ||) { 
     $output = 'No Results Found.'; 
    } 
    else{ 
    while($row = mysql_fetch_array($query)){ 
     $fname = $row['first_name']; 
     $lname = $row['last_name']; 
     $id = $row['id']; 
    $output .= "<div><a href='profile.php?u=$row[username]'>$fname $lname</a></div>"; 
    } 
    } 
    } 

    ?> 
    <?php echo("$output");?> 

     <form method="post" action="search.php" id="search"> 
     <input type="text" name="search" placeholder="Search.."> 
+0

[**してください、ドン:あなたは10件の結果に制限したい場合は

if (empty($POST['search'])) { // do nothing or give error response } 

とにかく、あなたは検索文字列は、データベースをチェックする前に空であるかどうかを確認する必要があります新しいコードでmysql_ * '関数を使用する**](http://stackoverflow.com/q/12859942)。 mysql_ *関数はPHP 5.5以降で廃止されています(** PHP 7では完全に**削除されています)。 mysqli_ *やPDO のように、[prepared statements](http://stackoverflow.com/q/60174/)(これは本当に*変数を扱うべきです)を使うことを可能にする別のAPIを選ぶべきです - [APIの選択](http://php.net/manual/en/mysqlinfo.api.choosing.php)を参照してください。 – Qirel

+0

空であればクエリを実行しないでください。クライアント側では、入力側に 'required'属性を追加することができます。サーバ側では' if(!empty($ _ POST ['search'])){'検索する任意の値。 – Qirel

答えて

0

あなたはmysql_query()mysql_num_rows()、およびmysql_fetch_array()は、すべてのPHP 5.5.0で非推奨となり、PHP 7.0.0で削除されていることに注意する必要があります。 $_POST['search']は、潜在的なSQLインジェクションやその他の悪意のあるコードをフィルタリングしていません。

"SELECT * FROM users WHERE username LIKE '%$search_query%' OR last_name LIKE '%$search_query%' LIMIT 10" 
+0

最初の10をドロップダウンに入れ、残りのページに残りたい(ユーザーが望む場合)。 –

関連する問題