2012-07-03 21 views
1

我正在最困难的时候弄清楚我认为应该很简单的事情。我需要用一个提交按钮更新数据库中的多行。现在我已经为每行提交了一个提交,但我需要将它合并。这是我正在尝试的。我哪里错了? (我已经离开了我在网上找到的多个教程,并且我认为我已经混杂起来了)。用一个PHP提交按钮更新多个MySQL行

这里的形式:

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

这里的PHP处理UPDATE:

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

提前感谢!

+0

没有$ _POST ['name'。$ id]只有$ _POST ['name']如果重复上面的你想要name =“name []”看看print_r($ _ POST)看什么你正在与 – 2012-07-03 20:39:15

回答

0

有几件事情需要修复。

  1. FORM必须在foreach之外。

  2. '... name =“name”value =“...',与_POST代码一致,应改为: ... name =”name“value =”... ...

这样,一个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 [ '名']将与相同的密钥ID的值的矢量,因此:

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

这样你有一个提交和多个更新。

0

由于您的每个字段名称都会因每个UPDATE查询而发生变化,因此您需要像您一样执行单独的查询。我不认为你能够执行单个更新查询。

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

+0

工作原则上我很好......但不是我在做foreach循环? (我是新来的PHP,所以我可能错了)。但我的理解是,foreach循环遍历每个条目(通过id)并为每个条目提交一个单独的查询。 –

+0

要么我不明白你的问题是什么,要么就像你已经做的那样编码(一个UPDATE查询每个ID)。 – Jocelyn