0

我在下面有一些代码,它在一个输入字段中运行良好。但是,如果您单击名为#addForm 的 div,我有一些代码会将额外的字段附加到表单中,并且输入的名称为 name="itemName[]"。

<script>
    $(document).ready(function() {
        $('body').on('click', '.save', function(e) {
            var string = $(this).serialize();
            $.ajax({
                type: "POST",
                url: "add_room.php",
                data: string,
                cache: false,
                success: function(data){
                    $('#message').text('The id of the inserted information is ' + data);
                }
            });
        });
    });
    $(document).ready(function(){
        $('#addForm').on('click', function(){
            $('<label for="itemName[]">Item</label><input class="itemName" type="text" name="itemName[]"><label for="itemCondition">Condition</label><input class="itemCondition" type="text" name="itemCondition"><div class="save">Save Item</div>').fadeIn(500).appendTo('#mainForm');
        });
    });
    </script>

正如你所看到的,我有大部分代码,但我对序列化感到困惑,我不确定我应该如何在 php 端处理这个问题。

到目前为止,这是我的 php 脚本:

<?PHP

    include('dbConfig.php');

    $item = $db->real_escape_string($_POST['itemName']);

    if ($stmt = $db->prepare("INSERT test (test_title) VALUES (?)"))
    {
        // Use an s per variable passed to the string, example - "ss", $firstname, $lastname
        $stmt->bind_param("s", $item);
        $stmt->execute();
        $stmt->close();

        echo $db->insert_id;
        //echo "success";
    }
    // show an error if the query has an error
    else
    {
        echo "ERROR: Could not prepare SQL statement.";
    }
?>
4

4 回答 4

1

您调用serialize一个<form>或一组表单字段而不是按钮(我猜)
如果按钮在表单中,那么尝试,

var string = $(this).closest('form').serialize();

如果您没有表格,只需选择您需要的所有输入

var string = $('#input1,#nextone,#somefield').serialize();
于 2013-07-03T22:58:46.327 回答
0

在我看来,我的观点是

var string = $(this).serialize();

this在上面的上下文中最有可能是具有类名的 DOM 元素的引用save,它可能是提交表单的按钮。

但是,调用 serialize() 的正确元素应该是表单元素。

我认为这就是为什么你不能从服务器端得到任何东西,

$_POST['itemName']

我建议,你可以先看看$_POST对象,然后弄清楚如何从中提取你需要的数据。

希望能帮助到你

于 2013-07-03T23:10:20.510 回答
0

形式

<form method="POST" class="save" action="add_room.php">
<input type="text" name="itemName[]"/>
<input type="text" name="itemName[]"/>
<button type="submit">Save</button>
</form>

jQuery

$(document).on("submit",".save",function(e){
e.preventDefault();
$.post($(this).attr("action"),$(this).serialize(),function(r){
//result
alert(r);
});
});

jsFiddle

PHP

$item = $_POST['itemName']

foreach( $item as $key => $val ) {
  //iterate itemName values
}

PhpFiddle

于 2013-07-03T23:15:26.437 回答
0

$_POST['itemName']将是一个数组。您需要这样对待它(即不要尝试对其执行real_escape_string())。

您还需要遍历数组执行单独的插入查询,或者构建一个插入所有值的查询。

从 javascript 的角度来看,我猜您需要序列化表单而不是单击的按钮。我刚刚注意到@Musa 对此发布了答案,因此请按照该说明进行操作。

于 2013-07-03T22:59:02.787 回答