2

私はphpにかなり慣れておらず、検索バーを備えたWebサイトを開発しています。

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

ただし、その特定の商品に関する詳細情報を表示する商品の詳細ページへのリンクをアイテムに含める必要があります。ただし、これを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>

ただし、この参照を追加すると、機能しないようです。どんな助けでもいただければ幸いです。前もって感謝します。

4

1 に答える 1

1

これを切り替えてみてください:

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

これとともに:

$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)."%'";
于 2012-04-18T13:43:16.347 に答える