0

我有这个:

if(isset($_POST["Submit"])) {
$updatequery = @mysql_query("UPDATE users SET FirstName='".$_POST['firstname']."', LastName='".$_POST['lastname']."', Address='".$_POST['address']."', City='".$_POST['city']."', PostalCode='".$_POST['postalcode']."', HomePhone='".$_POST['homephone']."', AltPhone='".$_POST['altphone']."', HomeWebsite='".$_POST['homewebsite']."', EmailAddress='".$_POST['email']."', Paypal='".$_POST['paypal']."', Alertpay='".$_POST['alertpay']."', Payoneer='".$_POST['payoneer']."' WHERE Username = '".$_SESSION['Username']."'");</i>

现在不幸的是,当用户更新他们的信息(这是一个个人资料页面)时,它会更新所有内容,这意味着如果我将 Paypal 电子邮件留空(因为我已经在那里),它会更新 Paypal 电子邮件为空。

我该如何解决这个问题?

4

4 回答 4

0

循环遍历字段,动态构建UPDATE语句。

注意用户擦除值的极端情况。

于 2012-10-04T19:43:44.027 回答
0
$sql = '';
if( !empty($_POST['email']) )  //if value is not empty, then update        
      $sql = ", EmailAddress = '{$_POST['email']}'";

然后在查询中,

 if(isset($_POST["Submit"])) {
 $updatequery = @mysql_query("UPDATE users SET FirstName='".$_POST['firstname']."',     LastName='".$_POST['lastname']."', Address='".$_POST['address']."', City='".$_POST['city']."', PostalCode='".$_POST['postalcode']."', HomePhone='".$_POST['homephone']."', AltPhone='".$_POST['altphone']."', HomeWebsite='".$_POST['homewebsite']."' $sql , ...
于 2012-10-04T19:47:56.890 回答
0

就像 marc_b 说的:提防 SQL 注入攻击。然后你可以做这样的事情:

UPDATE users 
SET FirstName = case when '$firstname' = '' then FirstName else '$firstname' end, 
    LastName = ...
WHERE Username = $username

避免用空值覆盖值

于 2012-10-04T19:48:34.220 回答
0

请注意,这是一个非常基本的示例,我不建议在实时环境中使用它,但它应该让您朝着正确的方向前进:-

首先,创建一个将列名映射到$_POST变量的数组,例如:

$array = array(
  'FirstName' => 'firstname',
  'LastName' => 'lastname',
  'Address' => 'address',
  'City' => 'city'
);

接下来,遍历您新创建$array的并检查该值是否存在于您的$_POST数组中,如下所示:

  $data = array();
  foreach ($array as $key => $value) {
    if (isset($_POST[$value]) && !empty($_POST[$value]) {
      $data[] = $key . '="' . mysql_real_escape_string($_POST[$value]) . '"';
    }
  }

注意$data已经创建的数组,它存储column = "value"数据。然后,您可以将$data数组内爆到您的 SQL 字符串中:

if (!empty($data)) {
  $strSQL = 'UPDATE tbl_name SET ' . implode(', ', $data) . ' WHERE Username = "' . $_SESSION['Username'] . '"';
}

哪个会输出(带有一些虚构的$_POST数据):

UPDATE tbl_name SET FirstName="John", LastName="Doe", Address="Some Street", City="Somewhere"

重申一下,我不建议您按原样使用此代码。您必须事先验证和清理用户输入!

于 2012-10-04T20:22:43.053 回答