jquery序列化和使用php获取值

jquery序列化和使用php获取值

问题描述:

May be it would be an easy question but I did not manage it. Here is my checkboxes like this:

<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" />

And I am posting values with $.post method like this:

$('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)});
});

I want to send checked values to the user.php and with foreach loop I want to update reading status which checked messages. Like below..

  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;

Kind regards...

这可能是一个简单的问题,但我没有管理它。 这是我的复选框: p>

 &lt; input name =“msg_id []”type =“checkbox”id =“msg3”value =“3”/&gt; \  n&lt; input name =“msg_id []”type =“checkbox”id =“msg2”value =“2”/&gt; 
&lt; input name =“msg_id []”type =“checkbox”id =“msg1”value  =“1”/&gt; 
&lt; input name =“msg_id []”type =“checkbox”id =“msg15”value =“15”/&gt; 
&lt; input name =“msg_id []”type =“ 复选框“id =”msg14“value =”14“/&gt; 
  code>  pre> 
 
 

我用$ .post方法发布值如下: p> \ n

  $('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)}  ); 
}); 
  code>  pre> 
 
 

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

  if(isset($ _ POST ['not_read'])):
 if(intval($ _ POST ['not_read'])== 0 |  | empty($ _ POST ['not_read'])):
 redirect(“index.php”); 
 endif;  
 
 / *我不知道我必须在这里写什么。
 $ values = $ _POST ['message_ids']; 
 foreach($ values as $ row):
 mysql_query(“UPDATE messages SET read  ='0'WHERE id ='“。$ row [”id“]。”'“); 
 endforeach; 
 
#当然,它不起作用... 
 
 * / 
 endif  ; 
  code>  pre> 
 
 

亲切的问候...... p> div>

If there will be more checkboxes it would be better to separate them with class names.

<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" />

if you set up data, you do not need to serialize it. Especially when you send some data without serializing.

$('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)});
});

In php, as your id's are integers, make sure they are for sql. Allso mysql_* functions are deprecated. You should use mysqli* functions.

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

or you could allso do:

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