我一直在寻找解决方案,为什么我添加的字段没有正确存储在数据库中并得出结论jquery没有正确添加html字段,这就是为什么它没有提交给渲染php程序来添加字段数据在数据库中。
如需正确演示,请查看代码
我的HTML表单代码写为
<table id="additional_item_numbers">
<thead>
<tr>
<th>Item</th>
<th> Delete</th>
</tr>
</thead>
<tbody>
<tr><td><input type="text" class="form-control form-inps" size="50" name="additional_item_numbers[]" value="123" /></td><td>
<a class="delete_item_number" href="javascript:void(0);">Delete</a>
</td><tr>
</tbody>
</table>
和jquery函数定义为在 ENTER 键按
中的表单中添加新字段<script type="text/javascript" language="javascript">
$("#additional_item_numbers").keyup(function(event){
if(event.keyCode == 13){
$("#additional_item_numbers tbody").append('<tr><td><input type="text" class="form-control form-inps" size="40" name="additional_item_numbers[]" value="" /></td><td> </td></tr>');
//document.getElementById("form-inps").focus();
$("#additional_item_numbers").find("input[type='text']").last().focus();
}
});
</script>
此函数在html表单中完美地添加了一个新字段,但在提交此表单后,字段将随机添加到数据库中。
有时不会向数据库添加单个值,并且会添加一些时间随机值,并且在提交时会添加所有值。
如果在使用jquery函数添加新字段后检查页面的源代码。它不会在源代码中显示那些新添加的字段。
我认为这是由于客户端功能,但它应该在提交后将所有值添加到数据库中。但事实并非如此。如果我去编辑一个项目并添加一些额外的项目编号,那么调用相同的save()
php函数,它不会错过先前项目编号的提交表单的单个值,但附加的项目编号行为与上述相同。
经过大量搜索并深入挖掘PHP代码后,我认为jquery没有正确设置新添加字段的名称,因此那些名称设置正确的字段数据将提交给php函数并存储将数据存入数据库但名称未正确设置的数据不会转到php程序,因此它们不会出现在数据库中。
为了更好地理解,我也包括了php函数代码。
我的PHP函数将数据添加到数据库中。
function save($item_id, $additional_item_numbers)
{
$this->db->trans_start();
$this->db->delete('additional_item_numbers', array('item_id' => $item_id));
foreach($additional_item_numbers as $item_number)
{
if ($item_number!='')
{
$this->db->insert('additional_item_numbers', array('item_id' => $item_id, 'item_number' => $item_number));
}
}
$this->db->trans_complete();
return TRUE;
}
非常感谢任何帮助。
答案 0 :(得分:0)
您使用的是谷歌浏览器吗?点击F12以启动开发人员工具。您可以检查JavaScript添加到页面的内容。
Internet Explorer和Firefox也可以通过点击F12来提取开发人员工具。
我建议不要在name属性的值中使用[],因为它有点令人困惑。有些人可能会认为这是一个数组或数组的值而不是字符串。
答案 1 :(得分:0)
我对此很新,但我想你可以使用Debugger和Element Inspection来查看你的javascript和html元素。浏览器之间的概念是相同的。
铬:
https://developer.chrome.com/devtools/docs/dom-and-styles https://developer.chrome.com/devtools/docs/javascript-debugging
火狐:
https://developer.mozilla.org/en-US/docs/Tools/Page_Inspector/How_to/Examine_and_edit_HTML https://developer.mozilla.org/en-US/docs/Tools/Debugger
我希望这会有所帮助。
答案 2 :(得分:0)
让我们从基础知识开始:
我没有看到<form action="script.php">
在提交表单之前在FireFox中。右键单击页面上的任意位置并选择“检查元素”
在FireFox检查器窗口中,转到“网络”选项卡,然后单击“重新加载”按钮
提交表格
在FireFox检查器窗口中,单击文件列中的页面
选择页面时出现的框中选择“参数”。 (通常是右侧)
应列出提交的数据。
它将以key:value格式显示:
additional_item_numbers[]:"value submitted is here"
蓝色的键(字段名称)和橙色的值
答案 3 :(得分:0)
在哪里定义了additional_item_numbers?如果要像变量一样使用它,则需要将此行更改为:
$("#additional_item_numbers tbody").append('<tr><td><input type="text" class="form-control form-inps" size="40" name="' + additional_item_numbers[0] + '" value="" /></td><td> </td></tr>');
答案 4 :(得分:0)
花了很多时间后我得到了问题的根点,这是一个数据库错误,因为数据库表被定义为不存储重复值,每次,我放置一个重复值,它没有存储在数据库,这是程序随机行为的原因。当我提供唯一值时,它正在正确地更新数据库,并且每当值中出现重复时,则在复制值之后,它不会将更多值存储到数据库中。要使其工作,只需更改数据库的结构或
在我的情况下:我的要求是,没有重复,但除了重复值之外的所有值都应该存储在数据库中,我通过更改
来实现这一点$this->db->insert('additional_item_numbers', array('item_id' => $item_id, 'item_number' => $item_number));
到
$this->db->query("INSERT IGNORE INTO additional_item_numbers (item_id, item_number) VALUES ('".$item_id."', '".$item_number."')");
感谢大家的回答。竖起大拇指:)