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 用であることを確認してください。また、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 に答える