Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 仅更新提供的字段_Php_Mysql - Fatal编程技术网

Php 仅更新提供的字段

Php 仅更新提供的字段,php,mysql,Php,Mysql,我有这个: 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']."

我有这个:

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>
if(设置($\u POST[“提交”])){
$updatequery=@mysql\u query(“更新用户集名=”,$\u POST['FirstName']。”,LastName=”,$\u POST['LastName']。”,Address=“$\u POST['Address']。”,City=“$\u POST['City']。”,PostalCode=“,$\u POST['PostalCode']。”,HomePhone=”,“,$\u POST['HomePhone['HomePhone']。”,AltPhone=“,$\u POST['AltPhone'”,“,HomePhone POST['AltPhone=”,HomePhone['“$\u POST['email']..”,Paypal=”,“$\u POST['Paypal'.]”,Alertpay=”,“$\u POST['Alertpay'.]”,Payeneer=”,“$\u POST['Payeneer'.]”,其中Username=”,“$\u会话['Username'.]”;
现在不幸的是,当用户更新他们的信息(这是一个个人资料页面)时,它会更新所有内容,这意味着如果我将Paypal电子邮件留空(因为我已经在那里了),它会将Paypal电子邮件更新为空


如何解决这个问题?

在字段中循环,动态构建一个
UPDATE
语句

请注意用户擦除值的情况

$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 , ...

正如marc_b所说:注意SQL注入aqttacks。然后您可以执行以下操作:

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

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

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

$array = array(
  'FirstName' => 'firstname',
  'LastName' => 'lastname',
  'Address' => 'address',
  'City' => 'city'
);
接下来,在新创建的
$数组上循环,并检查
$\u POST
数组中是否存在该值,如下所示:

  $data = array();
  foreach ($array as $key => $value) {
    if (isset($_POST[$value]) && !empty($_POST[$value]) {
      $data[] = $key . '="' . mysql_real_escape_string($_POST[$value]) . '"';
    }
  }
请注意已创建的
$data
数组,它存储
列=“value”
数据。然后您可以将
$data
数组内爆为SQL字符串:

if (!empty($data)) {
  $strSQL = 'UPDATE tbl_name SET ' . implode(', ', $data) . ' WHERE Username = "' . $_SESSION['Username'] . '"';
}
将输出(使用一些虚构的
$\u POST
数据):


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

首先,您停止使用此代码并了解。您永远不应该将未清理的用户输入放入查询中。我不确定如何执行此操作,请您解释一下好吗?这很简单一个PHP问题,但可能是这样的:`if(isset($\u POST['firstname']){$updatequery.='firstname=“.$\u POST['firstname']}并且,假设您的原始代码不仅仅是一个简化的示例,请注意上面的SQL注入注释。我得到了查询的位置,但是第一部分去了哪里?在您得到
$\u POST
数组之后,在
if(isset($\u POST[“Submit”]){
上面的任何地方都应该工作。$SQL=“,EmailAddress=$\u POST['email']”在那里,更正了它--
$sql=“,EmailAddress='{$\u POST['email']}'”
非常感谢:)检查它。我会检查它。还有,为什么不使用它呢?我使用了这个代码,它工作得很好!但是,它没有更新信息lol!请参阅
$strSQL
中的我的编辑(缺少
WHERE
子句)。作为对你第一条评论的回应,这是我在几分钟内拼凑的一个脚本,用户输入没有经过清理或验证,它很容易出错和sql注入。好吧,它工作得很好,我是个白痴,用Email=>Email=>而不是EmailAddress=>Email LOL!总之,我应该如何清理?有很多问题围绕这个话题,,
UPDATE tbl_name SET FirstName="John", LastName="Doe", Address="Some Street", City="Somewhere"