从while循环填充的表单文本字段更新表中的行

时间:2013-07-28 12:08:12

标签: php mysql

我有下面的PHP / HTML,它使用global_settings表中的while循环填充表单字段

<?php
$global_sql2="SELECT name, field, value FROM global_settings";
$global_rs2=mysql_query($global_sql2,$conn) or die(mysql_error());
while($global_result2=mysql_fetch_assoc($global_rs2))
{
    echo '<tr>
                <td><strong>'.$global_result2["name"].'</strong></td>
                <td><input type="text" name="'.$global_result2["value"].'" size="50" value="'.$global_result2["value"].'" /></td>
            </tr>';
}
?>

提交表单时,需要使用文本字段中键入的值更新数据库中的每一行。

例如,在数据库中有一行包含以下内容:

name = Company Name
field = company_name
value = Company ABC

将过帐的值设置为公司XYZ

所以SQL应该说:

`UPDATE tablename set value = 'Company XYZ' where field = 'company_name'`

但事实并非如此:

UPDATE tablename set value = 'Company XYZ' where field = 'company_name'

    <?php
$global_sql3="SELECT name, field, value FROM global_settings";
$global_rs3=mysql_query($global_sql3,$conn) or die(mysql_error());
while($global_result3=mysql_fetch_assoc($global_rs3))
{
    $sql="UPDATE global_settings set value = '".$_POST[$global_result3["field"]]."' where field = '".$_POST[$global_result3["value"]]."' ";
    echo '<br><br>'.$sql;
    $rs=mysql_query($sql,$conn) or die(mysql_error());
    echo '<h3>Successfully Updated</h3>';
}
?>

该表名为global_settings,列(name, field, value)

所以基本上,名称和字段字段永远不会被用户更改为值字段

value中的global_settings字段在文本字段中的值发生更改时未更新 - 我不确定问题是什么

4 个答案:

答案 0 :(得分:0)

您的代码中存在一些问题

更改

<td><input type="text" name="'.$global_result2["value"].'" size="50"

通过

`<td><input type="text" name="'.$global_result2["field"].'" size="50" `

答案 1 :(得分:0)

<td><input type="text" name="'.$global_result2["value"].'" ...
                                                  ^
                                                  |
                                                  +-- problem is here

将其更改为

<td><input type="text" name="'.$global_result2["name"].'" ...

<强>更新

鉴于你有一个像这样的表:

+------------------+-------------------+-----------------+
|     name         |       field       |      value      |
+------------------+-------------------+-----------------+
|    Company Name  |    company_name   |      XYZ        |
+------------------+-------------------+-----------------+

您可以让表单显示如下信息

while(...) {
  echo '<tr><td><strong>' . $row['name'] . '</strong><input name="' . $row['field'] . '" value="' . $row['value'] . '"/></td></tr>';
}

然后,您应该像这样编写UPDATE查询:

foreach($_POST as $f => $v) {
  $query = "UPDATE `table` SET `value` = '$v' WHERE `field` = '$f'";
}

答案 2 :(得分:0)

就像我昨天在这个问题的另一篇文章中说的那样:

你必须改变这个:

<td><input type="text" name="'.$global_result2["value"].'" size="50" value="'.$global_result2["value"].'" /></td>

进入这个

<td><input type="text" name="'.$global_result2["field"].'" size="50" value="'.$global_result2["value"].'" /></td>

否则您无法通过$_POST[$global_result3["field"]]访问它。

您还必须更改此行:

$sql="UPDATE global_settings set value = '".$_POST[$global_result3["field"]]."' where field = '".$_POST[$global_result3["value"]]."' ";

进入这个:

$sql="UPDATE global_settings set value = '".$_POST[$global_result3["field"]]."' where field = '".$global_result3["field"]."' ";

就像我之前在帖子中所说:

切换到mysqli_ *函数。不推荐使用ext / mysql。并且在将它们插入sql-query之前总是转义你的值!

答案 3 :(得分:-1)

您只是更新了值列

UPDATE tablename set value = 'Company XYZ' where field = 'company_name'

要更新其他列,您必须在SET语句中添加要更新的列。

UPDATE tablename set value = 'Company XYZ', name = 'name', field = 'field' where field = 'company_name'