使用一个PHP提交按钮更新多个MySQL行

时间:2012-07-03 20:31:06

标签: php mysql database

我正在努力找出一些我认为应该简单的事情。我需要使用一个提交按钮更新数据库中的多行。我现在正在为每行提交一个提交,但我需要将它组合起来。这就是我正在尝试的。我哪里出错了? (我已经开始在网上找到多个教程了,我觉得我的事情搞得一团糟。)

以下是表格:

<?php foreach ($teams as $team): 
$id[]=$team['id'];?>


<form action="?update" method="post">
    <div class="team-box">
        <h2><?php echo $team['name'] ?></h2>

        <label for="name">Name:</label>
        <input type="text" name="name" value="<?php echo $team['name'] ?>" />

        <label for="name">Match Wins:</label>
        <input type="text" name="mwins" value="<?php echo $team['mwins'] ?>" />

        <label for="name">Match Losses:</label>
        <input type="text" name="mlosses" value="<?php echo $team['mlosses'] ?>" />

        <label for="name">Match Ties:</label>
        <input type="text" name="mties" value="<?php echo $team['mties'] ?>" />

        <label for="name">Game Wins:</label>
        <input type="text" name="gwins" value="<?php echo $team['gwins'] ?>" />

        <label for="name">Game Losses:</label>
        <input type="text" name="glosses" value="<?php echo $team['glosses'] ?>" />

        <input type="hidden" name="id" value="<?php echo $team['id'] ?>" />
    </div>

       

这是处理UPDATE的PHP:

try
{
foreach($_POST['id'] as $id) {
$sql = 'UPDATE teams SET
    name = "' . $_POST['name'.$id] . '",
    mwins = "' . $_POST['mwins'.$id] . '",
    mlosses = "' . $_POST['mlosses'.$id] . '",
    mties = "' . $_POST['mties'.$id] . '",
    gwins = "' . $_POST['gwins'.$id] . '",
    glosses = "' . $_POST['glosses'.$id] . '"
    WHERE id = "' . $_POST['id'.$id] . '"';
$pdo->exec($sql);
}

}
catch (PDOException $e)
{
    $error = 'Error adding submitted team: ' . $e->getMessage();
    include 'error.html.php';
    exit();
}

header('Location: .');
exit();

提前致谢!

2 个答案:

答案 0 :(得分:0)

由于每个UPDATE查询的所有字段名称都会更改,因此您需要执行单独的查询。我认为你不能执行单个UPDATE查询。

我不明白,执行多个更新查询有什么问题?

答案 1 :(得分:0)

有一些事情需要解决。

  1. 表格必须在foreach之外。

  2. '... name =“name”value =“...',同意_POST代码,应改为:      ... name =“name”value =“...

  3. 这样,单个POST就会提交,例如

      name123="Rangers"
      mwins174="123"
    

    然后你需要所有的ID。你可以通过在foreach中发布:

    来做到这一点
     <input type="hidden" name="id[]" value="<?php print $team['id']; ?>" />
    

    这将导致HTML:

     <input type="hidden" name="id[]" value="123" />
     ...
     <input type="hidden" name="id[]" value="456" />
    

    并且$ _POST ['id']是一个包含123,456等的数组。

    你也可以输入HTML:

     <input type="text" name="name[<?php print $team['id']; ?>]" value="...
    

    这样$ _POST ['name']将是一个与id值相同的键,因此:

    foreach($id as $team_id)
    {
        // Pseudocode
        UPDATE... SET name=$name[$team_id]... WHERE id = $team_id;
    }
    

    这样你就有了一个SUBMIT和多个UPDATE。