我有这个:
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电子邮件空虚。
我该如何解决这个问题?
答案 0 :(得分:0)
遍历字段,动态构建UPDATE
语句。
注意用户删除值的角落情况。
答案 1 :(得分: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 , ...
答案 2 :(得分:0)
UPDATE users
SET FirstName = case when '$firstname' = '' then FirstName else '$firstname' end,
LastName = ...
WHERE Username = $username
避免使用空值覆盖值
答案 3 :(得分: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"
重申一下,我不建议您按原样使用此代码。您必须事先验证并清理用户输入!