4

我有一个 php-ajax 页面,用户在其中写入搜索字符串 search.php列表在 getsearch.php 中回显getsearch.php的结果显示在 search.php 中使用 ajax但每一行都有复选框。

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.'>';
    }
}

您可以在以下代码中看到,每次更改(onkeyup)都会触发此 sql。我保留了一个复选框来获取一系列选定的爱好。这些被选择的值被传递给 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 中使用了两个 ajax 函数,一个 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 回答