4

ユーザーがsearch.php に検索文字列を書き込む php-ajax ページがあり、リストは getsearch.php にエコーされます。getsearch.phpの結果は ajax を使用して search.php に表示されますが、すべての行にチェック ボックスがあります。

getsearch.php 

$q = $_GET["q"];

$sql = "select hobbyid,hobby from hobbies where hobby LIKE '%".$q."%' ";

if($result=mysql_query($sql))
{
    while($row=mysql_fetch_assoc($result))
    { 
         $v = $row['hobbyid'];
         echo $row['hobby'] . '<input type="checkbox" name="hobby[]" value='.$v.'>';
    }
}

そして、次のコードでわかるように、この SQL はすべての変更 (onkeyup) に対して起動されます。選択した趣味の配列を取得するためのチェックボックスを保持しています。これらは選択された値で、updatehobby.php に渡されます。

search.php

echo '<form action="updatehobby.php" method="POST">
echo 'Search:<input type="text"  onkeyup="showSearch(this.value)" />
<div id="txtSearch" >HERE THE RESULTS FROM getsearch.php are shown</div>
<input type="submit></form>';

そのため、ユーザーが新しい検索文字列を書き込むと、リストが変更され、以前のチェック ボックスが選択解除されます。では、検索が変更された場合でも、以前のチェック ボックスを保持して表示するにはどうすればよいでしょうか。

最終的に1日試した後、私はこの方法で成功しました!

ユーザーが search.php に検索文字列を入力すると、クエリが getsearch.php に渡され、そこから結果がエコーされ、この結果が search.php に表示されます。

チェックボックスを使用する代わりに、ボタンを挿入しました。そのため、すべての行にチェックボックスの代わりにボタンがあります。

<button type="button" onClick="submitform(<?php echo $row['hobbyid']; ?     >);">Add hobby</button>

search.php で、ボタンの onclick 呼び出しを処理する別の ajax 関数 (submitform) を再度使用しました。趣味追加ボタンを押すと、ajax関数submitformが呼び出され、趣味が挿入されます。

したがって、基本的には search.php で 2 つの ajax 関数を使用しました。

4

1 に答える 1

2

(1)検索リクエストでチェックボックスの状態を送信し、PHPコードでチェック済み/未チェックを設定し、それをデータベースへのリクエストに含めると、次のようになります

"select hobbyid,hobby from hobbies where hobby LIKE '%".$q."%' or hobbyid in(list_of_hobbies_received_in_request) "

それよりも、HTML をレンダリングするループ内で、id が受信した id の配列にあるかどうかを確認し、必要な趣味にチェック済みの状態を設定します。

(2) または、javascript でリクエストを送信する前と応答が来た後のチェックボックスの状態を覚えておくことができます。選択したチェックボックスを削除せず、重複がないことを確認してください。しかし、それは検索結果を得る方法に大きな苦痛を与えるようです. したがって、(1)が必要だと思います。

于 2012-08-31T15:23:48.213 に答える