我正在为使用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));
}
答案 0 :(得分:0)
老实说,我并不熟悉使用sprintf
和GetSQLValueString
,所以我在这种情况下的解决方案是检查所有$_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
。