PHP从数组插入mysql
我花了很长时间试图弄清楚如何循环我发布的表单数据并插入mysql。我的数据库表包含两列“name”和“age” 我的表格:PHP从数组插入mysql,php,mysql,arrays,multidimensional-array,Php,Mysql,Arrays,Multidimensional Array,我花了很长时间试图弄清楚如何循环我发布的表单数据并插入mysql。我的数据库表包含两列“name”和“age” 我的表格: <form action="form.php" method="post"> <input type="text" name="data[][name]" value=""/> <input type="text" name="data[][age]" value=""/> <input type="text" name="dat
<form action="form.php" method="post">
<input type="text" name="data[][name]" value=""/>
<input type="text" name="data[][age]" value=""/>
<input type="text" name="data[][name]" value=""/>
<input type="text" name="data[][age]" value=""/>
<input type="text" name="data[][name]" value=""/>
<input type="text" name="data[][age]" value=""/>
<input type="text" name="data[][name]" value=""/>
<input type="text" name="data[][age]" value=""/>
<input type="text" name="data[][name]" value=""/>
<input type="text" name="data[][age]" value=""/>
<input type="text" name="data[][name]" value=""/>
<input type="text" name="data[][age]" value=""/>
<input type="submit" value="submit" name="submit" />
</form>
<?php
// Create Mysqli object
$db = new mysqli('localhost', 'root', 'root', 'database');
// Create statement object
$stmt = $db->stmt_init();
if (isset($_POST['submit'])) {
// Create a prepared statement
if($stmt->prepare("INSERT INTO contact (name, age) VALUES (?, ?)")) {
// Bind your variables to replace the ?s
$stmt->bind_param('si', $name, $age);
$returnedData = $_POST['data'];
foreach($returnedData as $data) {
$name = $data['name'];
$age = $data['age'];
$stmt->execute();
}
// Close statement object
$stmt->close();
}
}
// Close Connection
mysqli_close($link);
?>
PHP:
<form action="form.php" method="post">
<input type="text" name="data[][name]" value=""/>
<input type="text" name="data[][age]" value=""/>
<input type="text" name="data[][name]" value=""/>
<input type="text" name="data[][age]" value=""/>
<input type="text" name="data[][name]" value=""/>
<input type="text" name="data[][age]" value=""/>
<input type="text" name="data[][name]" value=""/>
<input type="text" name="data[][age]" value=""/>
<input type="text" name="data[][name]" value=""/>
<input type="text" name="data[][age]" value=""/>
<input type="text" name="data[][name]" value=""/>
<input type="text" name="data[][age]" value=""/>
<input type="submit" value="submit" name="submit" />
</form>
<?php
// Create Mysqli object
$db = new mysqli('localhost', 'root', 'root', 'database');
// Create statement object
$stmt = $db->stmt_init();
if (isset($_POST['submit'])) {
// Create a prepared statement
if($stmt->prepare("INSERT INTO contact (name, age) VALUES (?, ?)")) {
// Bind your variables to replace the ?s
$stmt->bind_param('si', $name, $age);
$returnedData = $_POST['data'];
foreach($returnedData as $data) {
$name = $data['name'];
$age = $data['age'];
$stmt->execute();
}
// Close statement object
$stmt->close();
}
}
// Close Connection
mysqli_close($link);
?>
当前您的表单返回此数组-
$_POST['data'] = array(
0 => array('name'=> 'string'),
1 => array('age'=> #),
2 => array('name'=> 'string'),
3 => array('age'=> #),
4 => array('name'=> 'string'),
5 => array('age'=> #),
6 => array('name'=> 'string'),
7 => array('age'=> #),
8 => array('name'=> 'string'),
9 => array('age'=> #),
10 => array('name'=> 'string'),
11 => array('age'=> #);
因此,您要么想重做表单,为name/age赋予相同的键-
<form action="form.php" method="post">
<input type="text" name="data[0][name]" value=""/>
<input type="text" name="data[0][age]" value=""/>
<input type="text" name="data[1][name]" value=""/>
<input type="text" name="data[1][age]" value=""/>
<input type="text" name="data[2][name]" value=""/>
<input type="text" name="data[2][age]" value=""/>
<input type="text" name="data[3][name]" value=""/>
<input type="text" name="data[3][age]" value=""/>
<input type="text" name="data[4][name]" value=""/>
<input type="text" name="data[4][age]" value=""/>
<input type="text" name="data[5][name]" value=""/>
<input type="text" name="data[5][age]" value=""/>
<input type="submit" value="submit" name="submit" />
</form>
-或-
改变你的foreach循环-
$returnedData = $_POST['data'];
for($i=0;$i<count($returnedData);$i+=2){
$name = $returnedData[$i]['name'];
$age = $returnedData[$i+1]['age'];
$stmt->execute();
}
$returnedData=$\u POST['data'];
对于($i=0;$iexecute();
}
@dave:不,只绑定变量一次。它(几乎)基本上是在内部执行param s=&$name
来建立对指定变量的引用。更改变量的值,下次执行()准备好的语句时,它会得到更改后的值。另外,执行print\r($returnedData)
或print\r($\u POST)
。你的数组结构/数据不是你想象的那样。而且var\u dump($stmt->execute)
。你所有的数据库操作都只是假设成功。任何代码示例/解释都将不胜感激。谢谢!@Sean My fault(修复)-谢谢,我真的很感谢你的时间:)!