我创建了一个网页,我的客户可以在其中输入所有商品的详细信息,然后返回我的商店。我创建的方式是,1个客户可以输入一次他的个人详细信息,但可以添加他返回的任意数量的项目。我创建了一个“添加更多”按钮来完成这项工作。但是当我测试我的网站时,数据库只是输入最后一项,而不是存储以前的项目。
<script> $(function () {
$('input.more').on('click', function () {
var $table = $('#input_fields');
var $tr = $table.find('tr').eq(0).clone();
$tr.appendTo($table).find('input').val('');
});
});
</script>
<tr>
<td width="33%"><label class="description" for="element_20">Manufacturer, Model, Serial # </label>
</td>
<td width="33%"><label class="description" for="element_10">Tag Number (If Any) </label>
</td>
<td width="33%"><label class="description" for="element_4">Item Description </label>
</td>
</tr>
</table>
<table id="input_fields" width="100%" border="0" cellpadding="4">
<tr>
<td width="33%"><input id="element_20" name="model" class="element text large" type="text" maxlength="255" value="<?php if($action != "add") echo $row["model"]; ?>"/></td>
<td width="33%"><input id="element_10" name="tag" class="element text large" type="text" maxlength="255" value="<?php if($action != "add") echo $row["tag"]; ?>"/></td>
<td width="33%"><input name="itemdesc" type="text" class="element text large" id="element_4" value="<?php if($action != "add") echo $row["itemdesc"]; ?>" /></td>
</tr>
</table>
<input class="more" type="button" value="Add more" name="addmore"/>
<ul>
<li class="buttons">
<input id="saveForm" class="button_text" type="submit" name="Submit" value="Submit" />
在此,当客户输入项目详细信息,然后单击添加更多项并输入其他项目详细信息时。仅存储最后输入的项目详细信息。但我希望所有项目都存储并显示在DB上。
答案 0 :(得分:0)
您最终只向服务器发布单个模型/标记/文本,因为每个输入元素副本都具有相同的name
属性。当PHP尝试将发布的数据映射到$_POST
时,它只会映射到$_POST
中的单个模型/标记/ itemdesc键,因为输入名称相同。
解决此问题的最简单方法是在输入名称中使用数组访问表示法,例如model[]
,tag[]
,itemdesc[]
。这将允许PHP为$_POST
中的每个model / tag / itemdesc键组装一个值数组。
试试这个。在更改HTML代码之前,请在脚本开头添加var_dump($_POST)
。运行多项测试用例并查看转储值。
然后更改为在HTML中使用数组访问表示法,并查看var_dump()
给出的差异。