仅更新帐户设置页面中提交的字段

时间:2012-01-12 05:05:22

标签: php mysql ajax

我有一个帐户设置页面,它将检测任何已更改的字段并通过jquery.ajax将这些字段提交到php文件,php文件将其插入并验证某些不同情况下的每个字段,如果其中任何一个字段引发错误返回错误,退出,并要求用户重新输入字段。一切正常......但是......

我遇到了如何构建循环以仅更新提交的字段的问题。目前php文件具有以下结构:

Check for ajax request {
   Validate fields...
   Update Fields...
}

我的“更新字段”代码如下所示,它不会以这种方式工作,我知道:

// grab all variables except passwords
$email = mysql_real_escape_string($_POST['email']);
$newpass = mysql_real_escape_string(md5($_POST['newpass']));
$bname = mysql_real_escape_string($_POST['bname']);
$bemail = mysql_real_escape_string($_POST['bemail']);
$sql = "UPDATE usertable SET email='$email', password='$newpass', bname='$bname', bemail='$bemail'  WHERE username = '$user'";
mysql_query($sql);  
$msg = "Account updated successfully."; 

            header('Cache-Control: no-cache, must-revalidate');
            header('Expires: '.date('r', time()+(86400*365)));
            header('Content-type: application/json');

            echo json_encode(array(
                'valid' => yes,
                'msg' => $msg,
            ));
            exit();

有问题的行是$ sql =“更新usertable ...”行。我怎么能写一个php循环来抓取所有发布的变量作为一个数组,并以某种方式使用它们来构建一个更新查询字符串...如果你需要其他任何让我知道。问了很多,但我一直在思考四个小时,如果没有大量的非直接编码,就无法想办法。

另外:有没有办法返回所有未经验证的字段?一般的想法,比如使用数组和每个循环或什么?目前,如果让我们说,电子邮件字段和密码字段不验证,它只显示需要重新输入的电子邮件字段,因为它首先显示在php文件中。我希望它告诉他们所有未验证的字段。我知道这只是我的代码的位置以及我只是手工编写每个验证的方式(这是很长的路),因此任何对此的深入了解将有助于我获得一个数百万,特别是后端的未来页面。 / p>

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

这只会更新$_POST数组中并在$fieldsToUpdate中定义的字段(因此您可以排除字段):

$user = mysql_real_escape_string($user);
$fieldsToUpdate = array('email', 'bname','bemail');
$set = array();
foreach($_POST as $key=>$value){
    if(in_array($key,$fieldsToUpdate)){
        $set[] = $key."='".mysql_real_escape_string($value)."'";
    }
}

if(count($set) > 0){
    $query = "UPDATE usertable SET ".implode(',',$set)." WHERE username = '$user'";
    // rest of your code;
}

此外,我们已弃用mysql_real_escape_string(),请考虑使用PDO