0

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

<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;

亲切的问候...

4

1 回答 1

2

如果会有更多的复选框,最好将它们与类名分开。

<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';
于 2013-05-01T20:30:52.327 回答