我有一个带有输入表的表单,将这些数据保存到数据库表的最佳方法是什么? 表格是这样的:
<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"
]}
答案 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。