編輯:在config.php中創建和維護會話。以及通過連接到MySQL。Php 5.5更改密碼
我想學習如何使用PHP 5.5的Password_hash和password_verify作爲更多的學習經驗,然後其他任何東西,我沒有這樣做太久,這是我第一次不得不在這裏問一個問題(通常有人已經問我的問題)
所以這是我的問題。
我能得到password_hash和password_verify做工精細,當我註冊並登錄,但由於某些原因,當我使用腳本,更改密碼,我不能再登錄
Relavent代碼片段:。
註冊:
<?php
include('config.php');
$password = mysql_real_escape_string($_POST['password']);
$username = mysql_real_escape_string($_POST['username']);
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
$sql = 'INSERT INTO Staff (username, password) ' .
"VALUES ('$username', '$hashed_password')";
mysql_query($sql) or die(mysql_error());
?>
RegisterHTML:
<div id="login-content">
<form action="register.php" method="post">
<fieldset id="inputs">
<div class="label"></div><input type="text" name="username"/><br />
<div class="label"></div><input type="password" name="password"/><br />
</fieldset>
<input class="button" type="submit" value="Register" />
</form>
</div>
ChangePwd:
<?php
include('config.php');
$password = mysql_real_escape_string($_POST['newPassword']);
$password2 = mysql_real_escape_string($_POST['confirmPassword']);
$username = ($_SESSION['username']);
if ($password <> $password2) {
echo "Your passwords do not match.";
}
else if ($password === $password2){
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
$sql = "UPDATE Staff SET password='$hashed_password' WHERE username='$username'";
mysql_query($sql) or die(mysql_error());
}
else { mysqli_error($con); }
mysqli_close($con);
?>
ChangePwdHTML:
<?php
include('config.php');
?>
<div id="login-content">
<form action="changePassword.php" method="post">
<fieldset id="inputs">
<div class="label"></div><input type="password" name="passwordNew"/><br />
<div class="label"></div><input type="password" name="passwordConfirm"/><br />
</fieldset>
<input class="button" type="submit" value="Change Password" />
</form>
</div>
連接:
<?php
include('config.php');
$username = mysql_real_escape_string(stripslashes($_POST['username']));
$password = stripslashes($_POST['password']);
$sql = ('SELECT password,id,rank FROM Staff WHERE username="'.$username.'"');
$req = mysql_query($sql) or die(mysql_error());
$dn = mysql_fetch_assoc($req);
$hash = $dn['password'];
if(password_verify($password, $hash))
{
$_SESSION['username'] = $_POST['username'];
$_SESSION['userid'] = $dn['id'];
$_SESSION['rank'] = $dn['rank'];
$username = mysql_real_escape_string(stripslashes($_POST['username']));
$password = stripslashes($_POST['password']);
?>
我相信我的代碼是相當混亂,而且有一些是...月...日的同類。 ..在這一點上,frank-code從我發現的各種示例和教程構建而成。
我在那裏看到一些mysqli,你不能把它與mysql結合起來。但是你應該把所有的東西切換到mysqli或者PDO,並且使用預先準備好的語句。 – jeroen
PHP 5.5不支持'mysql_'函數。另外,目前還不清楚你是否已經開始會議。 –
@ Fred-ii- Nah,它只會讓你警告;-) – jeroen