更新多个动态生成的输入字段

时间:2014-01-24 02:12:04

标签: php

我有一个表单来更新MySQL数据库表中的多个动态生成的输入字段。

以下内容生成输入:

  <?php 
while ($row_exon = mysql_fetch_assoc($result_exon)){
    echo "<input name='exon_start[]' type='text' id='". $row_exon['exon_pk'] . "'  value='" . $row_exon['start'] . "' />";
} ?>

如何修改foreach循环以使用WHERE子句中的$row_exon['exon_pk']更新每个输入字段?

foreach($_POST['exon_start'] as $start){    
$query_exon = "UPDATE exon SET start = '$start' WHERE exon_pk = ''";
$result_exon = mysql_query($query_exon, $connection) or die(mysql_error());
}

2 个答案:

答案 0 :(得分:1)

这有效......

 <?php 
while ($row_exon = mysql_fetch_assoc($result_exon)){
    echo "<input name='exon_start[". $row_exon['exon_pk'] . "]' type='text' value='" . $row_exon['start'] . "' />";
} ?>

并使用循环:

foreach($_POST['exon_start'] as $key => $value){    
$query_exon = "UPDATE exon SET start = '$value' WHERE exon_pk = '$key'";
$result_exon = mysql_query($query_exon, $connection) or die(mysql_error());

答案 1 :(得分:0)

您还需要通过表单传递该值(假设这是一个POST表单)。现在当你POST变量时,只会传递每个字段的名称和值,所以在你的情况下:

// pseudo/example
exon_start[] => each_value (start)

因此,您需要exon_pk start,您必须将它们连接在一起作为值传递。我将使用|作为分隔符,你可以使用你喜欢的任何东西,但要确保它永远不会出现在这两个变量中:

while ($row_exon = mysql_fetch_assoc($result_exon)){
    echo "<input name='exon_start[]' type='text' id='". $row_exon['exon_pk'] . "'  value='" . $row_exon['exon_pk'] . '|' . $row_exon['start'] . "' />";
}

现在,当您发布时,您的数据将是:

// pseudo/example
exon_start[] => each_value (exon_pk|start)

所以你可以拆分它来得到每个变量:

foreach($_POST['exon_start'] as $each_var){    
    list($exon_pk, $start) = explode('|', $each_var);
    $query_exon = "UPDATE exon SET start = '$start' WHERE exon_pk = '$exon_pk'";
    $result_exon = mysql_query($query_exon, $connection) or die(mysql_error());
}
对于记录,

附注:mysql_*扩展名已被弃用多年,将来可能会完全删除。您应该开始使用mysqli_*PDO扩展程序。

另外,这不是一个理想的事情(在我看来),因为你通过将分隔符连接在一起而丢失了大致结构化的数据,正如我所说,如果你在这些变量中都有分隔符在任何一点 - 通过工作脚本。

  

文档: