1

这是另一个帖子的后续问题(链接

我试图围绕我如何使用准备好的语句执行 mysql 更新。我需要添加 WHERE id = ?.. 我对如何从数组中取回它感到困惑。谢谢!

我的表格:

<form action="update.php" method="post">

  <input type="hidden" name="id" value=""/>
  <input type="text" name="name" value=""/>
  <input type="text" name="age" value=""/>

  <input type="hidden" name="id" value=""/>
  <input type="text" name="name" value=""/>
  <input type="text" name="age" value=""/>

  <input type="submit" value="submit" name="submit" />
</form>

PHP:

// Create statement object
$stmt = $db->stmt_init();


if (isset($_POST['submit'])) {

// Create a prepared statement
if($stmt->prepare("UPDATE contact SET (name, age) VALUES (?, ?)")) {

    // Bind your variables to replace the ?s
    $stmt->bind_param('si', $name, $age);


    $returnedData = $_POST['data'];

for($i=0;$i<count($returnedData);$i+=3){
    $id = $returnedData[$i]['id']
    $name = $returnedData[$i+1]['name'];
    $age = $returnedData[$i+2]['age'];
    $stmt->execute();
}


    // Close statement object
    $stmt->close();
}

}

4

2 回答 2

2

表单中的数据将出现在$_POST['id']$_POST['name']和中$_POST['age'],但您没有在发布的代码中使用这些变量。

您实际上并没有id在表单中设置值。您隐藏的 ipputs 应该看起来更像这样:

  <input type="hidden" name="id" value="myID"/>

这将返回$_POST['id'] == "myID"

另请注意,您的表单要求提供两组这些变量。除非您以某种方式修改名称,否则您不会看到第一组。

于 2013-07-09T21:13:02.463 回答
2

首先,您需要在表单中使用数组样式的名称:

<form action="update.php" method="post">

  <input type="hidden" name="id[]" value=""/>
  <input type="text" name="name[]" value=""/>
  <input type="text" name="age[]" value=""/>

  <input type="hidden" name="id[]" value=""/>
  <input type="text" name="name[]" value=""/>
  <input type="text" name="age[]" value=""/>

  <input type="submit" value="submit" name="submit" />
</form>

我不知道你从哪里得到$_POST['data']的,它不会出现在你的表单中的任何地方。的键$_POST是表单中输入元素的名称。

最后,如果您不在WHERE查询中包含子句,您将更新表中的每一行。

// Create a prepared statement
if($stmt->prepare("UPDATE contact SET (name, age) VALUES (?, ?) WHERE id = ?")) {

    // Bind your variables to replace the ?s
    $stmt->bind_param('sii', $name, $age, $id);

    for($i=0;$i<count($_POST['id']);$i++){
        $id = $POST['id'][$i]
        $name = $_POST['name'][$i];
        $age = $_POST['age'][$i];
        $stmt->execute();
    }

    // Close statement object
    $stmt->close();
}
于 2013-07-09T21:13:17.710 回答