2012-04-18 4 views
2

私はかなりphpに新しいですし、私は検索バーでウェブサイトを開発しています。データベース検索クエリとして表示するリンク

私はデータベースから製品を検索するための検索クエリを実装するためにいくつかのコードを使用しています。検索クエリは、罰金を処理し、表示する必要があるすべての必要な製品を表示します。

ただし、商品の詳細ページにリンクすると、特定の商品に関する詳細情報が表示されます。しかし、私はあなたがhtmlを使ってこのリンクをどのように表現するかという手がかりを持っていません。次のように

マイサーチコードは次のとおりです。

<?php 

error_reporting(E_ALL); 
ini_set('display_errors', '1'); 
$search_output = ""; 
if(isset($_POST['searchquery']) && $_POST['searchquery'] != ""){ 
    $searchquery = preg_replace('#[^a-z 0-9?]#i', '', $_POST['searchquery']); 
    if($_POST['filter1'] == "Food"){ 
     $sqlCommand = "SELECT * FROM tbl_product WHERE pd_name LIKE '%$searchquery%'"; 
    } 
    include_once("config.php"); 


    //Database connections below 


    mysql_connect($dbHost, $dbUser, $dbPass) or die(mysql_error()); 
mysql_select_db($dbName) or die(mysql_error()); 

    $query = mysql_query($sqlCommand) or die(mysql_error()); 
    $count = mysql_num_rows($query); 
    if($count >= 1){ 
     $search_output .= "<hr />$count results for <strong>$searchquery</strong><hr />"; 
     while($row = mysql_fetch_array($query)) 
     { 
      $pd_name = $row["pd_name"]; 
     $search_output .= "$pd_name<br />"; 
     } // close while 
    } else { 
     $search_output = "<hr />0 results for <strong>$searchquery</strong><hr />"; 
    } 
} 
?> 
<html> 
<head> 
</head> 
<body> 
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
Search for dishes : 
    <input name="searchquery" type="text" size="30" maxlength="100"> 
In: 
<select name="filter1"> 
<option value="Food">Food</option> 

</select> 
<input name="myBtn" type="submit" value="Search"> 

<br /> 
</form> 
<div> 
<?php echo $search_output; ?> 
</div> 
</body> 
</html> 

私はそれが参照するリンクがある:この参照を追加するとき

<a href="" . $_SERVER['PHP_SELF'] . "?c=$catId&p=$pd_id" . "">$pd_name</a> 

しかし、動作するようには思えません。どんな助けもありがとう。前もって感謝します。これにより

$pd_name = $row["pd_name"]; 
$search_output .= "$pd_name<br />"; 

答えて

1

は、この切り替えてみてくださいちなみに

$pd_name = $row["pd_name"]; 
$pd_id = $row["pd_id"]; 
$search_output .= '<a href="' . $_SERVER['PHP_SELF'] . '"?c=$catId&p=' . $pd_id . '">' . $pd_name . '</a><br>'; 

をあなたにそれを渡す前に、ユーザーの入力データをエスケープする必要があるとして、あなたは、SQLインジェクションをよく読んでする必要がありますデータベース。少なくとも、これを変更します。これに

$sqlCommand = "SELECT * FROM tbl_product WHERE pd_name LIKE '%$searchquery%'"; 

$sqlCommand = "SELECT * FROM tbl_product WHERE pd_name LIKE '%".mysql_real_escape_string($searchquery)."%'"; 
+0

彼のクエリすでに安全で、私は彼の 'にpreg_replace()を推測する –

+0

かかわらを'それをカバーします。しかし、私は情報をエスケープすることは、とにかく確かに自動であると思うだろう。いいえ? –

+0

逃げることは安全とは関係がありません。どんな "情報"でもなく、文字列をエスケープする必要があります。どんな "注入"でもなく、SQL構文規則のために。文字列はすでにフォーマットされているため、再度フォーマットする必要はありません。実際に自動化されていて、実際のエスケープを隠している何らかのプレースホルダーを使用している場合 - はい、実行する必要があります。しかし、エスケープのためだけに逃げることは、迷信です。 –

関連する問題