忽略空文本框

时间:2015-07-31 22:38:07

标签: php dreamweaver

我正在为使用Dreamweaver的用户制作更新信息页,但是当我尝试更新其他字段(如(用户名))并且我没有触及“密码文本框”时,它仍然会将数据库更改为NULL密码...(空的)我该如何解决这个问题?因此,如果密码文本框为空,则应忽略它,不要在数据库上写入新密码。

    $editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "login")) {
$updateSQL = sprintf("UPDATE users SET Username=%s, Password=%s WHERE Email=%s",
                   GetSQLValueString($_POST['Username'], "text"),
                   GetSQLValueString($_POST['Password'], "text"),
                   GetSQLValueString($_POST['Email'], "text"));

mysql_select_db($database_localhost, $localhost);
$Result1 = mysql_query($updateSQL, $localhost) or die(mysql_error());

$updateGoTo = "profile.php";
if (isset($_SERVER['QUERY_STRING'])) {
$updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?";
$updateGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $updateGoTo));
}

1 个答案:

答案 0 :(得分:0)

老实说,我并不熟悉使用sprintfGetSQLValueString,所以我在这种情况下的解决方案是检查所有$_POST - 值并单独分开更新查询,如此

if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "login")) {
    mysql_select_db($database_localhost, $localhost);

    if (!empty($_POST['Username'])) {
        $updateSQLuser = sprintf("UPDATE users SET Username=%s", GetSQLValueString($_POST['Username'], "text"));
        $ResultUser = mysql_query($ResultUser, $localhost) or die(mysql_error());
    }
    if (!empty($_POST['Password'])) {
        $updateSQLuser = sprintf("UPDATE users SET Password=%s", GetSQLValueString($_POST['Password'], "text"));
        $ResultPass = mysql_query($ResultPass, $localhost) or die(mysql_error());
    }
    if (!empty($_POST['Email'])) {
        $updateSQLuser = sprintf("UPDATE users SET Email=%s", GetSQLValueString($_POST['Email'], "text"));
        $ResultEmail = mysql_query($ResultEmail, $localhost) or die(mysql_error());
    }

这是一个适合您的解决方案吗?

另外,mysql_*的使用已经消除,不再正式保留 - 强烈建议您切换到mysqli_*PDO