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

时间:2013-12-15 12:50:08

标签: php mysql forms post

我有这个脚本,我想将表单中的值发布到我的数据库中。我想将多个文本框发布到一个表单中。

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

<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个文本框。

在我的脚本中,这里没有完全写入,代码只更新数据库中的最后一个循环。

3 个答案:

答案 0 :(得分:1)

首先,您需要在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_*函数为officially deprecated,因此不应在新代码中使用。您可以使用PDO或MySQLi。有关详细信息,请参阅this answer on SO

答案 1 :(得分:0)

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

另外,你不能使用相同的$count变量来圈出潜在的结果吗?

看起来你发布了名为loop的hiddens,以便通过你需要去的循环次数。如果没有,你可以通过这样的方式发布循环变量,但是你用它代替$count更新循环。另外,我认为只需在最后添加一次该元素,而不是使用$count的值。

E.g。这样的事可能对你有用......

<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);
            }
        }
    }
?>

答案 2 :(得分:-1)

你必须使用类似的东西,

if (isset($_POST['update'])) {

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