【问题标题】:Updating multiple dynamically generated input fields更新多个动态生成的输入字段
【发布时间】:2014-01-24 02:12:04
【问题描述】:

我有一个表单可以从 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());
}

【问题讨论】:

    标签: php


    【解决方案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());
    

    【讨论】:

    • 是的,它们是独一无二的,而且有效。不过感谢您的回答;->
    • 不用担心,如果它们是唯一的,那么您的方法更可取,这样您就不必连接任何数据。
    【解决方案2】:

    您还需要通过表单传递该值(假设这是一个 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 扩展。

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

    文档:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-13
      • 1970-01-01
      • 2014-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-21
      相关资源
      最近更新 更多