从具有多个输入类型的表单中更新每个字段的数据库



我有一个列出项目的动态表单 - 每行多列。 到目前为止,当管理员单击提交按钮时,我对整个表单和 AJAX 帖子进行了serialize(),然后 PHP 查找了数据库和表单数据之间的差异。由于这似乎不是"最先进的",我决定使用 jQuery 重新编码一个函数,以仅更新更改的字段。表单中使用的输入类型大多是text类型,但也select
但是,到目前为止的代码似乎有效。但我只想显示更改的对象,而不是整个表单及其所有字段。使用下面的代码,就是这样发生的。一旦我更改input text字段,整个表单及其所有列都会被 POST 。我还尝试为每个项目添加onchange="test()",但这似乎也没有解决问题。任何人?

jQuery

function test() {
var y = $(this).serialize();
console.log(y);
$.post("change.php", y, function(data) {
$("#demo").text(data);
});
}

.HTML

<table>
<tr>
<th>Category</th>
<th>Description</th>
</tr>
<tr>
<td>
<select multiple name="00001[category][]">
<option value="1">Cat1</option>
<option value="2" selected>Cat2</option>
<option value="3">Cat3</option>
<option value="4">Cat4</option>
</select>
</td>
<td>
<input type="text" name="00001[description]" value="Descr1">
</td>
</tr>
<tr>
<td>
<select multiple name="00002[category][]">
<option value="1">Cat1</option>
<option value="2">Cat2</option>
<option value="3">Cat3</option>
<option value="4" selected>Cat4</option>
</select>
</td>
<td>
<input type="text" name="00002[description]" value="Descr2">
</td>
</tr>
</table>
</form>
<pre><p id="demo"></p></pre>

改变.php

<?php print_r($_POST); ?>

如果你想去掉提交按钮,你可以向每个输入添加事件侦听器,然后在它们更改时发布输入名称和值,而不是使用序列化。如果要保留提交按钮,可以让事件侦听器向输入(或选择,文本区域等)添加类或属性,然后在发布之前基于该类或属性进行选择。

我稍微解决了一下,并根据评论和答案得出了这个解决方案。

function test(sel) {
var x = {};
var name = $(sel).attr("name");
var value = $(sel).val();
x[name] = value;
console.log($.param(x));
$.post("change.php", $.param(x), function(data) {
$("#demo").text(data);
});
}

这在 PHP 中给出了所需的关联 POST 数组输出。

最新更新