在我的页面上,我总共有18个表单,这些表单是从数据库生成的,每个表单都是一个类别,允许用户更新任何类别的价格。所有表单具有相同的ID,我假设然后我将能够通过单击处理所有表单,但是如果单击提交按钮1它将只更新表单1,任何其他按钮只是重新加载页面,是否有这样做的方法是给每个表单一个数字id,然后在我的提交函数上使用一个大量的if语句?
我的表格代码:
<?php
$shopid = $_GET['user'];
$db = new PDO('mysql:host=localhost;dbname=servershop', 'user', '****');
$stmt = $db->prepare("SELECT DISTINCT group_ID FROM `items` Order By group_id");
$stmt->execute();
$gpID = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($gpID as $igroup)
{
$groupID = $igroup['group_ID'];
$db = new PDO('mysql:host=localhost;dbname=servershop', 'shop', '1butter22');
$stmt = $db->prepare("SELECT name FROM groups WHERE id = '$groupID'");
$stmt->execute();
$groupname = $stmt->fetchColumn();
?>
<details>
<summary><?php echo $groupname;?></summary>
<div class="ccontainer">
<div class="ccontent">
<form id="savechanges">
<input type="hidden" value="prices" id="tag" name="tag">
<input type="hidden" value="<?php echo $shopid;?>" id="shopid" name="shopid">
<input type="submit" value="Save" id="submit">
<?php
$stmt = $db->prepare("SELECT * FROM `items` WHERE group_id = '$groupID'");
$stmt->execute();
$arr = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo '<table class="itemTable">';
echo '<tr><td>Name & Quantity</td><td>Image</td><td>Price</td></tr>';
foreach ($arr as $item)
{
echo '<tr><td>' . $item['name'] . '('. $item['quantity'] .')</td>';
echo '<td><img src="images/items/' . $item['image'] . '" /></td>';
echo '<input type="hidden" value=' . $item['id'] .' name="itemid[]">';
$stmt = $db->prepare("SELECT price FROM prices WHERE shop_id = :shop AND item_id = :item");
$stmt->bindParam(':shop', $shopid);
$stmt->bindParam(':item', $item['id']);
$stmt->execute();
$barr = $stmt->fetchColumn();
if(!empty($barr))
{
echo '<td><input type="text" name="price[]" value="'. $barr .'" /></td></tr>';
}
else
{
echo '<td><input type="text" name="price[]" value="0.0" /></td></tr>';
}
}
?>
</table>
</form>
</summary>
</details>
<?php } ?>
和我的处理代码:(取自更大的脚本)
document.getElementById('savechanges').onsubmit=function (e)
{
e.preventDefault();
var f = $("#savechanges");
request = $.ajax(
{
url: "processing/db.php",
type: "POST",
data: f.serialize(),
cache: false
}
);
编辑:
在接受的答案中使用这个想法,诀窍就是创建一个表单并将所有输入序列化为表单类,理论上,这应该可以使用id以及类,处理的执行时间所有120个奇数项目从平均60分钟上升到105毫秒,这不是一个不可接受的增长!
答案 0 :(得分:0)
id属性是唯一的。尝试为所有表单而不是id提供一个公共类,然后使用公共类提交序列化所有这些表单。
如果您在包含多个表单的页面上运行$('form').serialize()
,它会将所有表单正确序列化为一个字符串。
要包含具有某些特定类的表单,请使用$('.myforms').serialize();
答案 1 :(得分:0)
我可以给你一个想法。 只需将每个元素中的表单id设置为数据属性即可。 喜欢
<input name='test' data-formId='yourformId' class='changed' />
并且在类别更改时,将一个类添加到已更改的名称(如上所述)。
现在,在发布数据时,获取所有表单ID并使用jquery从更改了类的元素更改值。现在,您可以使用您想要的数据。
使用此功能,您只能从已更改数据的表单中选择数据。
如果这有助于你不要忘记接受答案。