0

global_settings我有以下 PHP/HTML,它使用表中的 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

4 回答 4

0

你的代码有一个小问题

改变

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

经过

`<td><input type="text" name="'.$global_result2["field"].'" size="50" `
于 2013-07-28T12:14:38.563 回答
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'";
}
于 2013-07-28T12:16:20.293 回答
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 之前转义你的值!

于 2013-07-28T12:20:23.590 回答
-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'
于 2013-07-28T12:15:33.450 回答