gpt4 book ai didi

php - 当使用 jQuery/AJAX 和 PHP 选中多个复选框时,如何对多个选项进行排序

转载 作者:行者123 更新时间:2023-11-29 07:08:31 25 4
gpt4 key购买 nike

快速总结:我在用户个人资料上有一个类似 facebook 的事件墙。有多个“排序”选项可供选择。因此,如果他们只想查看自己的事件,则可以单击“您的事件”。那部分工作得很好。我正在为这个拼图添加一个新部分,他们还可以在其中对某些类型的事件进行分类,例如:帖子、评论、投票等。

我想要做的是,如果他们已经选择了他们的事件,然后他们选中了帖子和回复复选框,它应该只显示他们的帖子和回复。

我正在使用复选框,因此他们可以随意选中/取消选中某些内容,并使用 jquery ajax/php 来调用它。以下是复选框:

<div class="activitySelector">
<a href="" id="stalk" class="selectOrder">Following Activity</a> &bull; <a href="" id="user" class="selectOrder">Your Activity</a>
</div>
<input type="checkbox" class="sortOption" id="post" /><label for="post">Posts</label>
<input type="checkbox" class="sortOption" id="response" /><label for="response">Responses</label>

这里是 jQuery/ajax:

$('input[type=checkbox]').live("click", function(){

$('input:checked').each(function(){
var ID = $('.activitySelector .selected').attr("id");
var optionID = $(this).attr("id");

if (optionID) {
$('ul.streamActivity').html('<img src="/images/ajax-loader.gif" class="loader" alt="" />');

$.ajax({
type: "POST",
url: "/profile/sort_activity.php",
data: "sort="+ID+"&option="+optionID+"&user=<?php echo $user; ?>",
cache: false,
success: function(html){
$("ul.streamActivity").html(html);
}
});
}
});
});

最后是 PHP(我只展示了与我正在谈论的内容相关的代码......我不需要展示完整的查询,因为它工作得很好,我只希望你能够解决头疼的问题 :P): sort_activity.php

if ($sort == "user") {
$checkActivity .= " WHERE a.name = '$user'";
$activityNum .= " WHERE a.name = '$user'";

if ($option == "post") {
if ($option == "response") {
$checkActivity .= " AND a.type = 'Post' AND (a.type = 'Comment' OR a.type = 'Advice')";
$activityNum .= " AND a.type = 'Post' AND (a.type = 'Comment' OR a.type = 'Advice')";
} else {
$checkActivity .= " AND a.type = 'Post'";
$activityNum .= " AND a.type = 'Post'";
}
} elseif ($option == "response") {
if ($option == "post") {
$checkActivity .= " AND a.type = 'Post' AND (a.type = 'Comment' OR a.type = 'Advice')";
$activityNum .= " AND a.type = 'Post' AND (a.type = 'Comment' OR a.type = 'Advice')";
} else {
$checkActivity .= " AND (a.type = 'Comment' OR a.type = 'Advice')";
$activityNum .= " AND (a.type = 'Comment' OR a.type = 'Advice')";
}
}
}

因此,本质上,这需要做的是意识到“您的事件”(用户)已经被选中,然后如果之后选择了“帖子”和“回复”,则仅显示您的帖子和回复。现在,它只显示一个或另一个(如果同时选择了“帖子”和“回复”,它似乎只显示你的回复。这是中途大声笑。)

我想过可能设置 cookie 或类似的东西,以便它记住他们检查过的内容,但如果可能的话,我想远离它。

任何帮助将不胜感激,因为我正在尝试使用这些很酷的新功能重新启动 :)

更新:这是我添加的 foreach 语句。 echo 在那里,看看它是否正确地调用它,它是。选中和关闭复选框会显示帖子/回复/投票 - 它只是不显示任何结果:/

我想我需要做一些事情,比如,如果有超过 1 个选项,然后将 AND 更改为 OR 以便它选择所有选项......也许吧?似乎无法让它正常工作。

if (isset($options)) {
foreach ($options as $option) {
echo $option .'<br />';
if ($option['post']) {
$checkActivity .= " AND a.type = 'Post'";
$activityNum .= " AND a.type = 'Post'";
}

if ($option['response']) {
$checkActivity .= " AND (a.type = 'Comment' OR a.type = 'Advice')";
$activityNum .= " AND (a.type = 'Comment' OR a.type = 'Advice')";
}

if ($option['vote']) {
$checkActivity .= " AND a.type = 'Vote'";
$activityNum .= " AND a.type = 'Vote'";
}
}
}

最佳答案

发生了什么,你没有将所有检查的值发送到服务器。只需将您的点击绑定(bind)更改为此:

$('input[type=checkbox]').live("click", function(){
var options = []; //We'll send an array of options instead only one
var ID = $('.activitySelector .selected').attr("id");
$('input:checked').each(function(){
var optionID = $(this).attr("id");
options.push("options[]="+optionID);
});
if (options.length) {
$('ul.streamActivity').html('<img src="/images/ajax-loader.gif" class="loader" alt="" />');

$.ajax({
type: "POST",
url: "/profile/sort_activity.php",
data: "sort="+ID+"&options="+options.join("&")+"&user=<?php echo $user; ?>", //Here we're sending 'options'
cache: false,
success: function(html){
$("ul.streamActivity").html(html);
}
});
}
});

如您所见,我们将发送所有已检查的 ID(选项)而不仅仅是一个

服务器端:

<?php
$options = $_POST['options'];
//Now $options is an array with all checked IDs
foreach($options as $option)... //Do your stuff with $options. Everything else remains the same
?>

希望这对您有所帮助。干杯

关于php - 当使用 jQuery/AJAX 和 PHP 选中多个复选框时,如何对多个选项进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5924255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com