更新单个单元格WHERE单元格


PHP - Update single cell WHERE cell

我有这个数据库方案:http://i54.tinypic.com/k9hzc.png

如您所见,我有三列(id, settings_name, settings_value)

在我的网站上,我有一个表单。虽然,我有一个问题更新单个单元格。例如:

         $sitename = inputFilter($_POST['sitename']);
         $sitedescription = inputFilter($_POST['sitedescription']);
         $siteurl = inputFilter($_POST['siteurl']);
         $siteemail = inputFilter($_POST['siteemail']);
         $maintenance = inputFilter($_POST['maintenance']);
         $maintenance_text = inputFilter($_POST['maintenance_text']);
         $activitylimit = inputFilter($_POST['activitylimit']);

         //No error found, save the users settings.
         mysql_query("UPDATE settings SET settings_value='$sitename', sitedescription='$sitedescription', siteurl='$siteurl', siteemail='$siteemail', maintenance='$maintenance', maintenance_text='$maintenance_text', activitylimit='$activitylimit'")
         or die(mysql_error());
如您所见,这里的错误是没有名为"sitename, siteurl等"的列,尽管单元格被命名为this。

我的问题是,我如何更新ex。"sitename"到从表单提交的值?

foreach($_POST as $key => $value)
{
   $value = inputFilter($value);
   mysql_query("UPDATE settings SET settings_value='$value' where setting_name='$key' limit 1")
         or die(mysql_error());
}
这是最快的方式,它将从表单更新任何键。

UPDATE settings SET settings_value = '$sitename' WHERE setting_name = 'sitename';

当然,你也可以为别人做这件事:

UPDATE settings SET settings_value = '$sitedescription' WHERE setting_name = 'sitedescription';

创建一个数组,其中每个数组键为字段名。

$valid_data = array(
    'settings_value' => inputFilter($_POST['sitename']),
    'sitedescription' => inputFilter($_POST['sitedescription']),
    // etc ...
);
foreach ($valid_data as $k => $v)
    $values[] = $k.'='''.$v.'''';
if (!empty($values) 
    mysql_query("UPDATE settings SET ".join(',', $values));

如果你提交"sitename",查询变成:

UPDATE settings SET settings_value='submiten value'