-1

私はダミーのオンラインストアを作成して、実際の機能を説明しています。そのうちの1つは、Webサイトでアイテムを検索することです。

このシナリオに対処するために PHP コードを作成しましたが、正しく動作しません。結果と結果の数は一致しますが、もちろん表示されません。

GOOGLE で回答を探していましたが、対応する解決策や問題のヒントが見つかりませんでした。

ここに私が使用しているコードをリストします:

PHP コード (search.php):

<?php 

    session_start();

    include('connect_mysql.php');

    $product_name = 'product_name';
    $product_qua = 'product_qua';
    $product_price = 'product_price';
    $product_image = 'product_image';
    $product_des = 'product_des';


    if (isset($_POST['keyword'])) 
    {
        $search = $_POST['keyword'];

        if (!empty($search))
        {
            $query = "SELECT product_name FROM products WHERE product_name='$search'";
            $query_search = mysql_query($query);

            echo mysql_num_rows($query_search);

            if (mysql_num_rows($query_search) >=1)
            {
                echo 'Results found: <br>';

                while ($query_row = mysql_fetch_row($query_search)) 
                {
                    echo $query_row['product_name'];

                }
                while($rows = mysql_fetch_array($query_search))
                { ?>
                    <table id='display'>
                    <tr><td><?php echo "<img src=$rows[$product_image] class='grow'>" ?></td></tr>

                    <tr>
                        <th></th>
                        <th><strong>Avalible</strong></th>
                        <th><strong>Price</strong></th>
                        <th><strong>Description</strong></th>
                    </tr>

                    <tr>
                    <td width='290px'><?php echo "$rows[$product_name]" ?></td>
                    <td width='290px'><?php echo "$rows[$product_qua]" ?></td>
                    <td width='290px'><?php echo "£ $rows[$product_price]" ?></td>
                    <td width='290px'><?php echo "$rows[$product_des]" ?></td>
                    </tr>
                    <tr>
                    <td><p>Please Login To purchase this item </p><br /><a href="login.php">Login</a></td>
                    </tr>
                    </table>

                <?php
                }

            } else {
              echo 'NO results found.';

            }

        }
    }

?>

HTML コード (index.php):

<form action="search.php" method="post">

        <input type="text" name="keyword" size="20" placeholder="Search for products...."/>
        <input type="submit" value="Search >>" />

</form>

現在の結果の印刷画面:

ここに画像の説明を入力

お気づきのように、3 つの結果が見つかったと表示されています。これは、私の製品の一般名である検索を行ったことを考えると正しいですが、2 つのテーブルしか表示されず、それらは空です。

ウェブサイトの URL: http://studentnet.kingston.ac.uk/~k1024026/index.php

最後に、私の製品テーブルは以下で構成されています: product_id product_name product_qua product_price product_image product_des product_type 属性/列

誰でも私がこれで間違っているかもしれない場所を見つけることができます....?

4

3 に答える 3

0
  1. mysql_fetch_row( $query_search)連想配列ではなくプレーン配列を返しますが、キーを使用してその値にアクセスしようとしています - $query_row [ 'product_name' ]。むしろ使う_fetch_array

  2. 構文エラーが多い。関数名とパラメーターのリストの間にはスペースがあります。

  3. 使用しないでくださいmysql_。それらは非推奨です(読み取り:死んでいます)。代わりに PDO を使用してください。

于 2013-03-12T02:08:17.247 に答える
0

まずはこれを外してみる

while ($query_row = mysql_fetch_row($query_search)) 
                {
                    echo $query_row['product_name'];

                }

また、コードにいくつかの悪いタイプミスがあることに気付きました:

  • table id="display" id は一意である必要があります。それを反復してもIDにしたい場合は、代わりにdisplay-nを入れてください。たとえば、nは製品の一意のIDです。(または、id の代わりに class="display" を使用)

  • SQL インジェクションとそれらを無効にする方法を確認する必要があります。

于 2013-03-12T01:52:11.930 に答える
0

私はむしろこれを行うかもしれません:

$query = "SELECT product_name FROM products WHERE product_name LIKE %" . $search . "%";

それが役立つことを願っています。次に、 foreach ループを使用して、次のように結果を実行します。

foreach ($search as $key => $result){
      echo $result . '<br />';
}
于 2013-03-12T01:54:11.663 に答える