【问题标题】:jquery serialization and getting values with phpjquery序列化并使用php获取值
【发布时间】:2013-05-01 17:58:03
【问题描述】:

这可能是一个简单的问题,但我没有处理好。这是我的复选框,如下所示:

<input name="msg_id[]" type="checkbox" id="msg3" value="3" />
<input name="msg_id[]" type="checkbox" id="msg2" value="2" />
<input name="msg_id[]" type="checkbox" id="msg1" value="1" />
<input name="msg_id[]" type="checkbox" id="msg15" value="15" />
<input name="msg_id[]" type="checkbox" id="msg14" value="14" />

我正在使用这样的 $.post 方法发布值:

$('body').on('click', '#not_read', function () {
    var inputs = $("input[name='msg_id[]']").serialize();
    $.post("user.php", {"not_read":1,"message_ids":inputs}, function(z) {$("#result").html(z)});
});

我想将检查的值发送到 user.php 并使用 foreach 循环我想更新检查消息的阅读状态。如下图..

  if (isset($_POST['not_read'])):
    if (intval($_POST['not_read']) == 0 || empty($_POST['not_read'])):
    redirect("index.php");
  endif;     

    /* I don't know what I must write here.
    $values = $_POST['message_ids'];
    foreach($values as $row):
    mysql_query("UPDATE messages SET read='0'WHERE id='".$row["id"]."'");
    endforeach;

    # Sure, it is not working...

 */
  endif;

亲切的问候...

【问题讨论】:

  • print_r($_POST); 给你什么? (1:如果您勾选某些选项 2:如果您不勾选?)
  • 当我写 print_r($_POSt) 时,它给了我 Array ( [not_read] => 1 [message_ids] => msg_id%5B%5D=4&msg_id%5B%5D=3&msg_id%5B%5D =2)。
  • 所以在 jquery 中使用 serializeArray() 和在 php 中 $values=json_decode($_POST['message_ids']);
  • 很好,你能写 foreach 循环吗?我不明白。

标签: php jquery serialization


【解决方案1】:

如果有更多的复选框,最好用类名分隔它们。

<input name="msg_id[]" type="checkbox" id="msg3" value="3" CLASS="msg_ids" />
<input name="msg_id[]" type="checkbox" id="msg2" value="2" CLASS="msg_ids" />
<input name="msg_id[]" type="checkbox" id="msg1" value="1" CLASS="msg_ids" />
<input name="msg_id[]" type="checkbox" id="msg15" value="15" CLASS="msg_ids" />
<input name="msg_id[]" type="checkbox" id="msg14" value="14" CLASS="msg_ids" />

如果你设置了数据,你不需要序列化它。尤其是当您发送一些数据而不进行序列化时。

$('body').on('click', '#not_read', function () {
    var inputs = [];
    $(".msg_ids").filter(':checked').each(function(){
        inputs.push($(this).val()); //creates array of selected boxes values
    });
    $.post("user.php", {"not_read":1,"message_ids":inputs}, function(z) {$("#result").html(z)});
});

在 php 中,由于您的 id 是整数,因此请确保它们用于 sql。 Allso mysql_* 函数已被弃用。您应该使用 mysqli* 函数。

$values = $_POST['message_ids'];
    foreach($values as $row):
    mysql_query("UPDATE messages SET read='0'WHERE id='".intval($row)."'");
    endforeach;

或者你也可以这样做:

$values = $_POST['message_ids'];
if (is_array($values)) {
function make_safe(&$item, $key)
{
    $item = intval($item);
}
array_walk($values, 'make_safe');
if (count($values)>0) mysql_query("UPDATE messages SET read='0'WHERE id IN (".implode(', ',$values).")" );
else echo 'empty array';
}
else echo 'was not an array';

【讨论】:

  • 非常感谢。当我从 $row 中删除 ["id"] 表达式时,它运行良好。
  • @AivarLuist,如果 Habip 的评论属实,您能否更正您的答案?
  • @Stephane Rolland,是的,删除了它。抱歉,仅在代码中说是因为我从问题代码中复制了它:-D
猜你喜欢
  • 2013-10-05
  • 2011-09-05
  • 2015-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-08
  • 2014-05-29
  • 1970-01-01
相关资源
最近更新 更多