插入数据库的重复值

时间:2015-04-17 00:40:55

标签: php jquery mysql

我可以动态添加/删除输入字段但是我将输入值插入数据库时​​遇到问题,因为存在重复值。

输入字段的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注入吗?任何帮助深表感谢。感谢。

2 个答案:

答案 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,destinationorigin2,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.
}

您需要添加一些检查以查看是否所有索引都存在等等。