【问题标题】:PHP insert into mysql from arrayPHP从数组插入mysql
【发布时间】:2013-07-09 17:04:18
【问题描述】:

我花了很长时间试图弄清楚如何遍历我发布的表单数据并插入到 mysql。我的数据库表包含两列“名称”和“年龄”

我的表格:

<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:

<?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);

?>

【问题讨论】:

  • @dave:不,你只绑定一次变量。它(几乎)本质上是在内部做param s = &amp;$name,建立对指定变量的引用。更改变量的值,下次执行准备好的语句时,它会获取更改后的值。
  • 另外,请执行print_r($returnedData)print_r($_POST)。你的数组结构/数据不是你想象的那样。
  • var_dump($stmt-&gt;execute)。您所有的数据库操作都只是假设成功。
  • 任何代码示例/解释将不胜感激。谢谢!

标签: php mysql arrays multidimensional-array


【解决方案1】:

当前你的表单返回这个数组 -

$_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'=> #);

所以你要么想重做你的表格,给名字/年龄相同的键-

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

【讨论】:

  • @Sean 我的错(已修复)- 谢谢,非常感谢您的时间 :)!
猜你喜欢
  • 2015-01-19
  • 2014-06-16
  • 2015-10-11
  • 2012-09-27
  • 1970-01-01
  • 2011-11-10
  • 2011-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多