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