Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过ajax提交表单输入数组并使用mysql/php保存_Php_Jquery_Ajax_Forms_Serialization - Fatal编程技术网

通过ajax提交表单输入数组并使用mysql/php保存

通过ajax提交表单输入数组并使用mysql/php保存,php,jquery,ajax,forms,serialization,Php,Jquery,Ajax,Forms,Serialization,我在下面有一些代码,对于一个输入字段来说,它们工作得很好。但是,如果单击名为addForm的div,并且输入的名称为name=itemName[],我有一些代码可以在表单中附加额外的字段 <script> $(document).ready(function() { $('body').on('click', '.save', function(e) { var string = $(this).serialize();

我在下面有一些代码,对于一个输入字段来说,它们工作得很好。但是,如果单击名为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>
正如您所看到的,我已经获得了大部分代码,但是我对serialize感到困惑,我不确定应该如何在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.";
    }
?>
你调用一个或一组表单字段,我猜不是一个按钮 如果按钮在表单中,请尝试

var string = $(this).closest('form').serialize();
如果没有表单,只需选择所需的所有输入

var string = $('#input1,#nextone,#somefield').serialize();
$\u POST['itemName']将成为一个数组。您需要这样对待它,即不要尝试在其上执行真正的_escape _字符串

您还需要在数组中循环执行单独的插入查询,或者构建一个插入所有值的查询

从javascript的角度来看,我想您需要序列化表单,而不是单击按钮。我刚刚注意到@Musa在这上面贴了一个答案,所以按照这个说明去做。

从我的角度来看

var string = $(this).serialize();
在上面的上下文中,这很可能是具有类名save的DOM元素的引用,它可能是用于提交表单的按钮

但是,调用序列化的正确元素应该是表单元素

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

$_POST['itemName']
我建议,您可以先看看$\u POST对象,然后找出如何从中提取所需的数据

希望它有助于形成

<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>
PHP


我认为将print\r$\u POST['itemName']放在PHP中的某个地方会对您有所帮助。您可能会发现jQuery表单插件很有帮助:添加print\r确实有帮助。我可以看到,现在我的表单正在以数组的形式提交信息。我只需要找到一种方法将它们剥离并分别插入到相同的父id中。我得到的回报是:插入信息的id是数组[0]=>sdsd[1]=>sdsd[2]=>ASDASDSD Hey mate,第二个选项的问题是没有预定义的数量,用户将添加所需的输入字段,因此需要自动输入。做第一个选择似乎打破了系统,尽管我认为这是我的错。php被杀死了。有什么建议吗?@AndyHolmes将所有输入设为一个类,然后按其类选择它们。$'。没关系,我错过了php脚本中的[]。它现在正在打印一个数组,如-插入信息的id为array[0]=>sdsd[1]=>sdsd[2]=>ASDASDSD。只需将这些文件拆分并分别添加到数据库中。我需要使用非序列化吗?@而且它是一个数组,所以你只需要通过它们的索引引用它们。[0]能给你一个例子吗?目前还没有完全100%的了解整个阵列
$(document).on("submit",".save",function(e){
e.preventDefault();
$.post($(this).attr("action"),$(this).serialize(),function(r){
//result
alert(r);
});
});
$item = $_POST['itemName']

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