我可以动态添加/删除输入字段但是我将输入值插入数据库时遇到问题,因为存在重复值。
输入字段的JQuery
<script type="text/javascript">
jQuery(document).ready(function($){
var counter = 1;
var max_fields = 10;
$('.my-form .add-box').click(function(e){
e.preventDefault();
if (counter < max_fields){
counter++;
$('#container').append(
'<div><strong>Link #' + counter + '</strong><br />'
+ '<input id="field_' + counter + '" name="fields[]' + '" type="text" placeholder = "From" /><a href = "#" class = "remove-box"><img src = "Remove Button.png" height = "35" width = "35" align = "middle"/></a><br />'
+ '<input id="field_' + counter + '" name="fields[]' + '" type="text" placeholder = "To" /><a href = "#" class = "remove-box"><img src = "Remove Button.png" height = "35" width = "35" align = "middle"/></div></a>');
}
});
//code to remove fields
数据插入
foreach ( $_POST['fields'] as $key=>$value ) {
//Insert into transport table
$sql_transport1 = sprintf("INSERT INTO tbl_transport (Origin,Destination) VALUES ('%s','%s')",
mysql_real_escape_string($value),
mysql_real_escape_string($value));
$result_transport1 = $db->query($sql_transport1);
$inserted_transport_id1 = $db->last_insert_id();
}
输入的值:
起源#1→在这里,目的地#1:那里
来源#2→房子,目的地#2:机场
输出:
我的看法是它与此函数mysql_real_escape_string()
有关,但是不是必须阻止SQL注入吗?任何帮助深表感谢。感谢。
答案 0 :(得分:1)
您的问题是您正在使用$value
两次
$sql_transport1 = sprintf("INSERT INTO tbl_transport (Origin,Destination) VALUES ('%s','%s')",
mysql_real_escape_string($value),
mysql_real_escape_string($value));
尝试将$key
用于其中一个值
$sql_transport1 = sprintf("INSERT INTO tbl_transport (Origin,Destination) VALUES ('%s','%s')",
mysql_real_escape_string($key),
mysql_real_escape_string($value));
答案 1 :(得分:0)
您的输入表格对我来说似乎很奇怪。
如果您的表单要求2个来源和目的地,您的POST输入将是:
"fields" => array("origin1", "destination1", "origin2", "destination2");
这当然可以工作,但不适用于你的循环当前的工作方式。在使用$key,$value
的此示例中,您将输入0,origin1
1,destination1
2,origin2
3,destination2
。这不是你想要的,你想要的是:origin1,destination
和origin2,destination2
。
有一个更好的解决方案。
而不是命名字段fields
给它们实际的名称:
+ '<input id="field_' + counter + '" name="origins[]' + '" type="text" placeholder = "From" /><a href = "#" class = "remove-box"><img src = "Remove Button.png" height = "35" width = "35" align = "middle"/></a><br />'
+ '<input id="field_' + counter + '" name="destinations[]' + '" type="text" placeholder = "To" /><a href = "#" class = "remove-box"><img src = "Remove Button.png" height = "35" width = "35" align = "middle"/></div></a>');
现在用PHP:
foreach ($_POST["origins"] as $index => $origin) {
$destination = $_POST["destinations"][$index];
$sql_transport1 = sprintf("INSERT INTO tbl_transport (Origin,Destination) VALUES ('%s','%s')",
mysql_real_escape_string($origin),
mysql_real_escape_string($destination));
// run query etc.
}
您需要添加一些检查以查看是否所有索引都存在等等。