如何在foreach

时间:2015-12-19 22:04:11

标签: php arrays json

我想将一个数组传递到一个数据库中,但是我收到了通知,并且echo无法打印出我想要的字符串。

  

注意:第7行的数组到字符串转换(echo $ item;)

如何捕获发送到数据库的数据?

数组由作者及其书籍发送。 e.g。

  

[{&#34;名称&#34;:&#34;第一册&#34;&#34;书籍&#34;:[&#34; Book1.1&#34;]},{&#34 ;名称&#34;:&#34;第二册&#34;&#34;书籍&#34;:[&#34; Book2.1&#34;&#34; Book2.2&#34;]}] < / p>

这是next.php,其中数据正在传递而未被回显。

<?php
var_dump($_POST);

$data = json_decode(stripslashes($_POST['arr']), true);

foreach($data as $item){
   echo $item;
   // insert to db
}

?>

警报给我发送sendToServer函数中next.php的返回数据(参见摘录)。

success: function(data) {
    alert(data);
}

摘录中的完整代码:

&#13;
&#13;
<!DOCTYPE html>
<html>

<head>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
  <style type="text/css">
    <!-- #main {
      max-width: 800px;
      margin: 0 auto;
    }
    -->
  </style>
</head>

    <body>
    <div id="main">
        <h1>Add or Remove text boxes with jQuery</h1>
        <div class="my-form">
<!--            <form action="next.php" method="post">-->
                <button onclick="addAuthor()">Add Author</button>
                <br>
                <br>
                <div id="addAuth"></div>
                <br>
                <br>
                <button onclick="submit()">Submit</button>
<!--            </form>-->
        </div>

        <div id="result"></div>
    </div>

    <script type="text/javascript">
        var authors = 0;

        function addAuthor() {
        authors++;
            var str = '<br/>' + '<div id="auth' + authors + '">' + '<input type="text" name="author" id="author' + authors + '" placeholder="Author Name:"/>' + '<br/>' + '<button onclick="addMore(\'auth' + authors + '\')" >Add Book</button>' + '</div>';
            $("#addAuth").append(str);
        }

        var count = 0;

        function addMore(id) {
            count++;
            var str = 
            '<div id="bookDiv' + count + '">' 
                + '<input class="' + id + '" type="text" name="book' + id + '" placeholder="Book Name"/>' 
                + '<span onclick="removeDiv(\'bookDiv' + count + '\')">Remove</span>'
            + '</div>';
            $("#" + id).append(str);
        }
        
        function removeDiv(id) {
            $("#" + id).slideUp(function() {
                $("#" + id).remove();
            });
        }
        function submit() {
            var arr = [];
            for (i = 1; i <= authors; i++) {
                var obj = {};
                obj.name = $("#author" + i).val();
                obj.books = [];
                $(".auth" + i).each(function() {
                var data = $(this).val();
                    obj.books.push(data);
                });
                arr.push(obj);
            }
            sendToServer(arr);
            //$("#result").html(JSON.stringify(arr));
        }

        function sendToServer(data) {
            $.ajax({
                type: "POST",
                data: {
                    arr: JSON.stringify(data)
                },
                url: "next.php",
                success: function(data) {
                        alert(data);
                }
            });
            
        }
    </script>
</body>

</html>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:2)

这就是你的表格:

join_buffer_size

要使用foreach读取数据,您需要执行以下操作:

    [
        {
            "name":"Book1",
            "books": [
                "Book1.1"
            ]
        },{
            "name":"Book2",
            "books": [
                "Book2.1",
                "Book2.2"
            ]
        }
    ]

通过这个foreach,您可以操作数据并构建INSERT语句以将数据输入到数据库。

答案 1 :(得分:2)

你得到注意:第7行的数组到字符串转换(echo $ item;),因为你打算打印数组。 你不能打印数组,而你可以做一个字符串。 要做那样的事情。

<?php
var_dump($_POST);

$data = json_decode(stripslashes($_POST['arr']), true);

for ($i=0;$i<count($data);$i++){
    echo "Name: ".$data[$i]['name']. "<br/>";
    echo "Books: ";
    foreach($data[$i]['books'] as $book){
        echo $book . " ";
    }
    echo "...............<br/>";    

    // insert to db example
    $sql="INSERT INTO author(id, name) VALUES (NULL, '".$data[$i]['name']."')";
    //execute query and get last insert id
    //$author_id=last insert id
    foreach($data[$i]['books'] as $book){
        $sql="INSERT INTO author_books(id, author_id, book_name) VALUES (NULL,'$author_id', '$book')";
        //execute query
    }

}

?>