我試圖放在一起,用戶可以更新他們的'電子郵件地址'和'密碼'的形式。如果&AND語句在PHP腳本
我想包括下列情形:要留下
- 如果用戶更改其電子郵件地址,然後我想在現有的「密碼」,「密碼提示」和鹽田其當前值。
- 如果用戶更改密碼,我需要創建一個新的'salt'值,添加到密碼字段並用sha1加密
- 最後,如果用戶更改所有字段,則'email adresss','密碼','密碼'提示和'鹽'字段都需要更新。
這是我試圖拼湊代碼:
if (isset($_POST["amendyourdetails"]))
{
$password = $_POST["password"];}
$confirmpassword = $_POST["confirmpassword"];
$passwordhint = $_POST["passwordhint"];
if ($password >=0){
$salt = uniqid(mt_rand());
$encrypted = sha1($password . $salt);
if ($emailaddress >=0){
$emailaddress = $_POST['emailaddress'];
mysql_query("UPDATE `userdetails` SET `emailaddress` = '$emailaddress',`password` = '$encrypted', `passwordhint` = '$passwordhint', `salt` = '$salt' WHERE `userid` = 1");
$msg = "Your password has been successfully reset.";
}
}
else if ($password == 0){
if (emailaddress > 0){
mysql_query("UPDATE `userdetails` SET `emailaddress` = '$emailaddress' WHERE `userid` = 1");
$msg = "Your password has been successfully reset.";
}
}
}
?>
<html>
<head>
<title>Amend Your Details</title>
<style type="text/css">
<!--
.style1 {font-family: Calibri
}
.style9 { font-family: Calibri;
font-size: 24px;
background-color: #78AFC5;
}
.style7 {
font-family: Calibri;
font-size: 16px;
background-color: #FFFFFF;
}
.style10 {color: #FF0000}
-->
</style>
<script src="gen_validatorv4.js" type="text/javascript"></script>
</head>
<body>
<div align="center"><span class="style9">Amend Your Details </span></div>
<p class="style7"><span class="style10">
<?php
if (isset($msg)) // this is special section for
// outputing message
{
?>
</span>
<p class="style7">
<span class="style10">
<?=$msg?>
</span>
<p class="style7"><span class="style10">
<?php
}
?>
</span>
<form name="amendyourdetails" id="amendyourdetails" action="amendyourdetails.php" method="post">
<table width="418" border="1">
<tr>
<td width="195"><span class="style1">Email Address:</span></td>
<td width="220"><span class="style1">
<input name="emailaddress" type="email" value="<?php echo $emailaddress;?>" size="25"/>
</span></td>
</tr>
<tr>
<td><span class="style1">New Password:</span></td>
<td><span class="style1">
<input name="password" id="password" type="password" size="30"/>
</span></td>
</tr>
<tr>
<td><span class="style1">Confirm New Password:</span></td>
<td><span class="style1">
<input name="confirmpassword" id="confirmpassword" type="password" size="30"/>
</span></td>
</tr>
<tr>
<td><span class="style1">New Password Hint:</span></td>
<td><span class="style1">
<input name="passwordhint" id="passwordhint" type="text" size="30"/>
</span></td>
</tr>
</table>
<p>
<input name="amendyourdetails" type="submit" value="Amend Your Details">
</p>
</form>
<script language="JavaScript" type="text/javascript">
var frmvalidator = new Validator("amendyourdetails");
frmvalidator.addValidation("emailaddress","email","Please enter a valid email address");
// frmvalidator.addValidation("password","minlen=6", "Minimum length for a password is 6 characters");
frmvalidator.addValidation("confirmpassword","eqelmnt=password", "The confirmed password is not the same as the password");
// frmvalidator.addValidation("passwordhint","req","Please provide a hint for your password");
</script>
</body>
</html>
我最大的問題是,一旦頁面運行時,「更新」動作發生,但值從我的'電子郵件地址'和'passwordhint'字段已被刪除,我不知道爲什麼。
更新的代碼
if (isset($_POST["amendyourdetails"]))
{
$emailaddress = $_POST['emailaddress'];
$password = $_POST["password"];}
$confirmpassword = $_POST["confirmpassword"];
$passwordhint = $_POST["passwordhint"];
if ($_POST["password"] isset()
{
$salt = uniqid(mt_rand());
$encrypted = sha1($password . $salt);
mysql_query("UPDATE `userdetails` SET `emailaddress` = '$emailaddress',`password` = '$encrypted', `passwordhint` = '$passwordhint', `salt` = '$salt' WHERE `userid` = 1");
$msg = "Your password has been successfully reset.";
}
}
如果你可以縮進你的代碼,它會使它更容易閱讀並幫助你 – xbonez 2012-01-18 16:00:16
請閱讀[解析用戶輸入](http://stackoverflow.com/questions/60174/best-way-to -stop-sql -injection-in-php),爲了你的用戶。 – fredley 2012-01-18 16:01:16
你在哪裏聲明'$ emailaddress'?編輯:看來你在聲明它之前使用它。 – Znarkus 2012-01-18 16:01:32