0

在庫商品を含むデータベースと、データベースから商品タイプまたは特定の商品番号を検索できる Web ページがあります。結果が返され、検索フォームの下のテーブルに表示されます。

現在、これを行うには、mysql クエリの結果を配列に保存し、配列の結果をテーブルに出力します。

結果を選択可能にして、選択したアイテムのみに基づいてデータベースから情報を取得できる「追加」などのボタンを表示するにはどうすればよいですか。

編集 -

<?php
require("header.php");
if(isset($_REQUEST['searching'])){ //check if form has been submitted
connect('final');//connect to DB
//set the values from search form
$field = $_POST['field'];
$query = $_POST['query']; 

    $query = htmlspecialchars($query); // stop HTML characters
    $query = mysql_real_escape_string($query); //stop SQL injection

     $data = mysql_query("SELECT *
     FROM stock 
     WHERE stock.Part_Number IN (SELECT stock.Part_Number
     FROM stock
     WHERE upper(stock.$field) LIKE'%$query%')") ;//query the DB with search field in colleumn selected//

     //$data = mysql_query("SELECT * FROM customer INNER JOIN address ON customer.ID = address.Customer_ID LEFT OUTER JOIN sites ON address.ID = sites.address_ID WHERE upper(customer.$field) LIKE'%$query%'") ;

    if($data === FALSE) {
    $error = 'Query error:'.mysql_error();
    echo $error;
    }
    else
    {

    $test = array();
    $colNames = array();
    while($results = mysql_fetch_assoc($data)){// puts data from database into array, loops until no more

    $test[] = $results;

        }
    $colNames = array_keys(reset($test));


        $anymatches=mysql_num_rows($data); //checks if the querys returned any results
            if ($anymatches == 0) 
                    { 
                        echo "Sorry, but we can not find an entry to match your query<br><br>"; 
                    } 

    } 

次に、HTMLフォームの下にテーブルを作成し、

<?php
   //print the header
   foreach($colNames as $colName)
   {
      echo "<th>$colName</th>";
   }
?>

<?php
   //print the rows
   foreach($test as $results)
   {
      echo "<tr>";
      foreach($colNames as $colName)
      {
         echo "<td>".$results[$colName]."</td>";
      }
      echo "</tr>";
   }
?>    

どこから始めればよいかよくわかりませんでしたが、チェックボックスの方法を試してみます。

4

1 に答える 1

0

ユーザーの好みに合わせて検索を調整する方法はたくさんあります。

php と html のみを必要とする最も基本的なソリューションは、フィルターとして使用するセルにチェックボックスを配置することです。

次に、and 接続を使用して古い mysql-command に新しい部分を追加できます。たとえば、次の検索でチェックされた名前のエントリのみが表示される「名前」列のチェックボックス。

<input type="checkbox" name="names[]" id="chWalter" value="Walter" /> <label for="chWalter">chWalter</label>

投稿すると、チェックボックス配列をループで実行し、次のようなものを追加できます

" and name like '".$_GET['names'][$i]."'".

チェックボックスでグループを使用すると、アクティブ化されたすべての要素の値の配列が得られることに注意してください。

もちろん、チェックされたチェックボックスが以前のリクエストを変更する方法を変更できます...フィルターを削除するには、リクエスト文字列で正規表現を使用できます。

より良い解決策は、javascript を使用することです。たとえば、表のセルをクリックしてチェックする非表示のチェックボックスを使用できます。

または、JavaScript を使用して要素をフィルタリングすることもできます。クラスと

document.getElementsByClassName['class']

サーバーのトラフィックを軽減し、リクエストを高速化します。そのために、各行 (row1、row2 など) と各列 (name、id など) に 1 つのクラスを使用することをお勧めします。次に、フィールドをクリックすると、同じ列クラスのすべての要素が取得され、それらがループされます。

コンテンツが一致しない場合は、行クラスを調べて、「display:none」などの css 属性を設定します... テーブル レイアウトを使用する場合は、行クラスの使用を次のようなものに置き換えることができます

this.parentNode.style.display="none"

行を無効にするには ( <tr>-tag )。

それ以外の場合は、css を再度削除して表示します。

これの欠点は、縮小された結果がユーザーにのみ表示されることですが、縮小されたバージョンをサーバー サイトで再度使用するには、結果をチェックボックスまたは非表示フィールドに再度マップして、再度送信する必要があります。

于 2013-04-25T13:14:43.917 に答える