【问题标题】:how to save array retrieved from form to a database [closed]如何将从表单检索到的数组保存到数据库[关闭]
【发布时间】:2017-07-20 17:39:07
【问题描述】:

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

<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()->input() 中检索到的数据如下:

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

【问题讨论】:

  • 您的标题为:“将数组从表单检索到数据库的最佳方法是什么” - 但您的问题是:“什么是最好的将这些数据保存到数据库表的方法?” - 那么,它是哪一个?检索或保存?无论如何,这对我来说听起来太宽泛了。
  • 您的问题无效,您没有描述哪种方式最适合您的需求。
  • 我使用两种方式:1)foreach 循环和使用雄辩的模型一一保存到数据库。 2)foreach循环并创建一个新变量,然后通过DB类将其保存到数据库中

标签: php database laravel-5.4


【解决方案1】:

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

$valueArray = array(
       array(
       ':name'=>name1 , 
       ':lastname'=>lastname1 
        ) , 
       array(
       ':name' => name2 ,
       ':lastname' => lastname2
       )
    )

(不确定您使用#token 做什么,因此被排除在外)。

数据已经格式化为数据库的“行”,每一行组成一个数组,然后您可以使用 PDO(或 mysqli)使用如下函数将其插入:

   // 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() ;

请注意,在第一个代码块的数据数组中,我已经将“name”和“lastname”更改为参数“:name”和“:lastname”(注意冒号前面),这允许我们使用prepared语句——这可以防止来自客户端的 sql 注入。确切的 prepare() 和 execute() 函数根据您使用的数据库连接类型而有所不同,有些需要中间的 bindParam() 调用,但是有很多关于在其他地方使用准备好的语句的指导,所以我不会去进入它。

要从您现有的数组结构转到上面的那个,您可以有一个(诚然混乱的)函数,如下所示:

$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])
}

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

【讨论】:

    猜你喜欢
    • 2016-10-13
    • 2016-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-02
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    相关资源
    最近更新 更多