我有下面的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
字段在文本字段中的值发生更改时未更新 - 我不确定问题是什么
答案 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'