如何将从表单检索的数组保存到数据库中

时间:2017-07-20 17:39:07

标签: php database laravel-5.4

我有一个带有输入表的表单,将这些数据保存到数据库表的最佳方法是什么? 表格是这样的:

<form action="/test" method="post">
{{ csrf_field() }}
<table>
    <tr>
        <td><input type="text" name="name[]"></td>
        <td><input type="text" name="lastname[]"></td>
    </tr>
    ....
    <tr>
        <td><input type="text" name="name[]"></td>
        <td><input type="text" name="lastname[]"></td>
    </tr>
    <tr>
        <td colspan="2">
            <button type="submit">Save</button>
        </td>
    </tr>
</table>

来自request() - &gt; input()的检索数据如下:

{"_token": "0cDahM09i0f6KPV7l2jsRHIYrSg0TwRccJc8YHuH",
"name": [
    "name1",
    "name2",
    "name3",
    "name4"
],
"lastname": [
    "lastname1",
    "lastname2",
    "lastname3",
    "lastname4"
]}

1 个答案:

答案 0 :(得分:1)

通常对于数据库表,您希望数组的格式如下:

   // Create database connection and prepare the parameterized query
    $pdo = Database::connect() ; 
    $query = "INSERT INTO myTable (name, lastname) VALUES (:name, :lastname)"
    $pdo->prepare($query) ;

    //foreach "row" in your array, execute the query
    foreach($valueArray as $row){
        $pdo->execute($row) ;
    }

   //disconnect from database
   Database::disconnect() ;

(不确定你使用的是#token,因而被排除在外)。

将数据格式化为&#34;行&#34;对于你的数据库,每一行组成一个数组,然后你可以用PDO(或mysqli)插入一个这样的函数:

$newArray = array();
$length = count($nameArray);   //this assumes $nameArray is the same length as $lastnameArray
for($i = 0, $i < $length, $i++){
    array_push($newArray, $nameArray[$i], $lastnameArray[$i])
}

请注意,在第一个代码块的数据数组中,我已经改变了#34; name&#34;和&#34;姓氏&#34;参数&#34;:name&#34;和&#34;:姓氏&#34; (注意冒号之前),它允许我们使用预准备语句 - 这可以防止从客户端注入sql。确切的prepare()和execute()函数根据您使用的数据库连接类型而有所不同,有些需要中间的bindParam()调用,但是有很多关于在其他地方使用预准备语句的指导,所以我赢了# 39;进入它。

要从现有的数组结构转到上面的数组结构,你可能会有这样一个(公认的凌乱)函数:

{{1}}

根据您提供的结构判断,您可以使用$ parentArray [0]和$ parentArray [1]替换$ nameArray和$ lastnameArray。