我有以下代码:
<form id="sendObj">
<table class="no-border hover list">
<tbody class="no-border-y">';
while($pendingTransfers = mysql_fetch_assoc($getPending)){
$id = $pendingTransfers['id'];
echo '
<tr class="items">
<td style="width: 10%;"><span class="label label-primary">'.$counter++.'</span></td>
<td class="text-left"><p>'.$pendingTransfers['NumarInventar'].'</p></td>
<td class="text-left"><p><strong>'.$pendingTransfers['DenumireArticol'].'</strong></p></td>
<input type="hidden" name="id" value="'.$pendingTransfers['id'].'" />
<td class="text-center"><input type="hidden" name="depID" class="getDep" data-placeholder="Selecteaza destinatie" /> <i style="color:red" title="Sterge din lista" onclick="deleteLista('.$pendingTransfers['id'].');" class="text-right fa fa-times-circle fa-lg"></i></td>
</tr>';}
echo '
</tbody>
</table>
</form>
<div class="text-center"><button id="BtnSendObj" type="submit" class="btn btn-primary btn-success"><i class="fa fa-check color-inverse fa-lg"></i> Finish transfers</button></div>
上面的代码为每个记录和上表中的每一行带来了一个select id选项,用户可以从中选择一些值。当用户完成时,他将按下按钮&#34;完成转移&#34;并且所有输入都必须序列化。问题是我有多个具有相同名称的输入,我无法将它们全部分组,因为我稍后可以在PHP中使用它们。例如,我可以在每个输入的每一行上有5行。因此结果将 id = 1 DepId = 3456,id = 2 DepId = 5432 等等。
$('#BtnSendObj').on('click', function(event) {
event.preventDefault();
var data;
var a = $('#sendObj').serializeArray();
$.each(a, function () {
var depID = $('input[name=depDestinatie]').serializeArray();
var id = $('input[name=id]').serializeArray();
data =[{"id":id, "depID":depID}];
});
//The above will output something like :
// [Object]0: Object
//depId: Array[4]0: Object1: Object2: Object3: Object...
// id: Array[4]0: Object1: Object2: Object3: Object
// Like this i cannot handle them togerther in PHP.
// I think it should look like an array of objects so like this i would //be able to acces them easly , i think that both id's should be in same object //, but this is were i dont know how to proceed.
$.ajax({
url: 'subpages/data/transferObjects.php',
data: {data: data},
type: 'POST',
success:function(data, textStatus, jqXHR){
console.log('AJAX SUCCESS');
console.log(data);
},
complete : function(data, textStatus, jqXHR){
}
});
});
我在这里处理ajax帖子。
我想要实现的目的是将数据发送到php文件,我将使用表单中的值更新数据库。
php文件如下所示:
//some connection
if(isset($_POST['data']))
{
$updateObjects = mysql_query("UPDATE transactions SET IDDepartamentDestinatie = '$_POST['depID'] WHERE id = '{$_POST['id']}'");
}
但是这样它只会更新表单中的最后一条记录,因为我不会遍历所有输入。
如果某人有某种想法我怎么能这样做,我已经尝试了所有关于serializeArray或序列化的例子,但对我没有用。
答案 0 :(得分:4)
对于这样的情况,还有另一种可能性 - 将名称附加[]
的输入命名为:
<input type="hidden" name="id[]" value="'.$pendingTransfers['id'].'" />
<input type="hidden" name="depID[]" class="getDep" data-placeholder="Selecteaza destinatie" />
然后在$_POST['id']
和$_POST['depId']
中,您将自动拥有数组。所以没有额外的喧嚣,你只需将它作为数据放在你的ajax函数中:
data: $.param($('#sendObj').serializeArray())
在PHP中,您可以利用两个数组中的键对应的值对相同的事实:
if(isset($_POST['depID'])){
foreach($_POST['depID']) as $k => $v){
mysql_query("UPDATE transactions SET IDDepartamentDestinatie = '$v' WHERE id = '{$_POST['id'][$k]}'");
}
}
另外请记住,$ _POST值应该使用mysql_real_escape_string进行清理,更好的是,使用PDO进行mysql处理。
答案 1 :(得分:0)
$(..).serializeArray()
将返回类似
[
{
"name": "..",
"value": "..",
},{
"name": "..",
"value": "..",
},{
"name": "..",
"value": "..",
},...
]
但是你想把两个输入分组在一起。为此,您可以使用每个步骤后递增2的for
循环。
var data = [],
serialized = $('#sendObj').serializeArray(),
i;
for (i=0; i<serialized.length; i+=2) {
var tmpObj = {};
tmpObj[ serialized[i].name ] = serialized[i].value;
tmpObj[ serialized[i+1].name ] = serialized[i+1].value;
data.push(tmpObj);
}
这应该向您的PHP发送一个数组,您需要循环
if (isSet($_POST['data'])) {
foreach ($_POST['data'] as $obj) {
//use $obj['id'] and $obj['depID']
}
}
虽然这应该有用,n-dru's answer提供了一种更清洁的方式来做你想做的事。
答案 2 :(得分:0)
$(..)。serializeArray()将返回类似
的内容[
{
"name": "..",
"value": "..",
},{
"name": "..",
"value": "..",
},{
"name": "..",
"value": "..",
},...
]
因此在PHP端使用此功能,将其格式化为正常 $ _POST结构。
$aPostRequest = serializedFormDatajQuery2Array(unserialize($_POST));
function serializedFormDatajQuery2Array($serializedArr){
$aFormData = array();
foreach($serializedArr as $aRow){
if(isset($aFormData[$aRow['name']]) && !is_array($aFormData[$aRow['name']])){
$sValue = $aFormData[$aRow['name']];
$aFormData[$aRow['name']] = array();
$aFormData[$aRow['name']][] = $sValue;
$aFormData[$aRow['name']][] = $aRow['value'];
continue;
}
if(is_array($aFormData[$aRow['name']])){
$aFormData[$aRow['name']][] = $sValue;
continue;
}
$aFormData[$aRow['name']] = $aRow['value'];
}
return $aFormData;
}