如何在一个表单中将多个文本框发布到数据库


How to post many text boxes in one form to databases

我有这个脚本,我想把表单中的值发布到我的数据库中。我想把许多文本框放在一张表格里。

问题是,只有最后一个文本框会更新。

<form action='' method='post'>
<?php
    for ($i=0; $i<$count; $i++) {
        echo "<input type='text' name='".$i."' />
        <input type='hidden' name='img_id' value='".$img_id."' />
        <input type='hidden' name='loop' value='".$i."' />";
    }
?>
<input type='submit' value='Update' name='update' /></form>
<?php 
    if (isset($_POST['update'])) {
        //now i need help
        $query = "UPDATE photos SET description = '".$_POST[$_POST['loop']]."' WHERE id = '".$img_id."'";
        $res = mysql_query($query) or die(mysql_error);
    }
?>

例如,循环进行了4次,这意味着我有4个文本框。

在我的脚本中,代码只更新数据库中的最后一个循环。

首先,您需要对HTML中的name属性使用PHP数组表示法。否则,您将有多个具有相同name的输入,并且其中只有一个将被张贴

echo "<input type='text' name='".$i."' />
      <input type='hidden' name='img_id[]' value='".$img_id."' />
      <input type='hidden' name='loop[]' value='".$i."' />";

现在,您可以将PHP中的这些元素作为数组进行访问。

foreach ($_POST['img_id'] as $key=>$value) {
    // img_id's value is in $value
    // loop's value is in $_POST['loop'][$key]
}

使用foreach构建查询,并在循环后执行所有查询。


您的查询对SQL注入是完全开放的。至少使用mysql_real_escape_string(更好的是:准备好的语句,这在性能方面也会更好,因为您总是有相同的查询,只有不同的输入)。还要记住,mysql_*函数是官方不推荐使用的,因此不应在新代码中使用。您可以使用PDO或MySQLi。有关更多信息,请参阅SO上的此答案。

您需要使表单元素的名称唯一,这样它们就不会发生冲突。一种方法是将它们作为数组发布:

此外,你不能使用相同的$count变量来循环潜在的结果吗?

看起来你发布了名为loop的隐藏点,以通过你需要进行的循环次数。如果不是,可以像这样发布循环变量through,但在更新循环中使用它来代替$count。此外,我会考虑在最后只添加一次该元素——使用$count的值。

这样的东西可能对你有用。。。

<form action='' method='post'>
<?php
    for ($i=0; $i<$count; $i++) {
        // How is img_id set here?  You have no indication in your example - I'll assume that you've put them into an array...
        echo "<input type='hidden' name='img_id['"".$i.'""]' value='".$img_id[$i]."' />";
        echo "<input type='text' name='name[".$i."]' />";
    }
?>
<input type='submit' value='Update' name='update' /></form>
<?php 
    if (isset($_POST['update'])) {
        for ($i=0; $i<$count; $i++) {
            if ( array_key_exists( 'name', $_POST ) && is_array( $_POST['name'] ) && array_key_exists( $i, $_POST['name' ] ) {
                $query = "UPDATE photos SET description = '".$_POST['name'][$i]."' WHERE id = '".$_POST['img_id'][]."'";
                $res = mysql_query($query) or die(mysql_error);
            }
        }
    }
?>

或者,如果不能使用$count:

<form action='' method='post'>
<?php
    echo( "<input type='hidden' name='loop' value='".$count."' />" );
    for ($i=0; $i<$count; $i++) {
        // How is img_id set here?  You have no indication in your example - I'll assume that you've put them into an array...
        echo "<input type='hidden' name='img_id['"".$i.'""]' value='".$img_id[$i]."' />";
        echo "<input type='text' name='name[".$i."]' />";
    }
?>
<input type='submit' value='Update' name='update' /></form>
<?php 
    if (isset($_POST['update'])) {
        for ($i=0; $i<$_POST['loop']; $i++) {
            if ( array_key_exists( 'name', $_POST ) && is_array( $_POST['name'] ) && array_key_exists( $i, $_POST['name'] ) {
                $query = "UPDATE photos SET description = '".$_POST['name'][$i]."' WHERE id = '".$_POST['img_id'][$i]."'";
                $res = mysql_query($query) or die(mysql_error);
            }
        }
    }
?>

您必须使用类似的东西

if (isset($_POST['update'])) {
for($i=0; $i<=$_POST['loop']; $i++){