Migrasi kode Forgot password dari MySQL ke MySQLi


Status
Not open for further replies.

Rockman

Hosting Guru
Verified Provider
Master dan Suhu DWH...
Bolehkan saya minta pencerahan sedikit terkait pembuatan "FORGOT PASSWORD" atau lupa password,
Saya sudah migrasi web member area dari MySQL ke MySQLi, namun ada yang terlewatkan tentang kode "FORGOT PASSWORD" yang masih pakai MySQL, mau saya migrasikan ke MySQL

Kode Forgot.php Sebelumnya MySQL :

Code:
<html>
<head>
<title>Reset Password</title>
<style>
body {background:#20B2AA; padding:0px; margin:0px}
h3,h4 {color:#ffffff; text-align:center; font-family:Arial, Helvetica, sans-serif; font-size:20px; margin:20px;}
.wrapper-f{width:300px; margin:auto; padding:40px 20px 20px 20px; background:#E84C3D; margin-top:5%; min-height:120px;}
.wrapper-f label {color:#ffffff;}
.wrapper-f input {padding:5px; background:#eeeeee; border:0px; color:#333; width:98%; margin-bottom:10px;}
.wrapper-f input:focus{ background:#ccc;}
.wrapper-f .button {padding:10px 20px 10px 20px; color:#ffffff; background:#191970; margin-top:10px; cursor:pointer}
.wrapper-f .button:hover {background:#00BFFF;}
.warning {background:#FF9900; color:#ffffff; padding:10px; border-radius:5px; border:1px; text-align:center;margin:auto;
 width:400px; margin-top:20px;}
</style>
</head>

<body>
<h3>FORGOT PASSWORD</h3>
<h4>Forgotten your password? Enter your email address below to begin the reset process.</h4>
<div class="wrapper-f">
<form action="forgot.php" method="post">
<label>Masukkan Email anda</label>
<input name="email" type="email" placeholder="Enter Email" required oninvalid="this.setCustomValidity('Masukkan Email Dengan benar oke Tuan')">
<input class="button" name="act_resset" type="submit" value="Submit">
</form>
</div>

<div style="width:600px; margin:auto">

<?php

$mysql_host = 'localhost';
$mysql_user = 'root';
$mysql_password = 'XXXXXXXXX';
$mysql_database = 'databaseku';

$x = mysql_connect($mysql_host,$mysql_user,$mysql_password) or die(mysql_error());
mysql_select_db($mysql_database,$x);
///////////////////////////////////////////////////////////////////////

if (isset($_POST['act_resset']))  {
$password="1A2B4HTjsk5kwhadbwlff"; $panjang='8'; $len=strlen($password);
$start=$len-$panjang; $xx=rand('0',$start);
$yy=str_shuffle($password);
$passwordbaru=substr($yy, $xx, $panjang);
$email = trim(strip_tags($_POST['email']));
$password = mysql_real_escape_string(htmlentities((MD5($passwordbaru))));

// mencari alamat email si user
$query = "SELECT * FROM pengguna WHERE email ='$email'";
$hasil= mysql_query($query);
$data  = mysql_fetch_array($hasil);
$cek = mysql_num_rows($hasil);
$UserId = strip_tags($data['UserId']);
$email = strip_tags($data['email']);
$nama = strip_tags($data['nama']);
$username =trim(strip_tags($data['user']));
if ($cek == 1) {

// title atau subject email
$title  = "Permintaan Password Baru";

// isi pesan email disertai password
$pesan  = "Kami telah reset ulang password ".$nama." Dan anda dapat login kembali ke member area kami \n\n
DETAIL AKUN ANDA :
\nUsername : ".$username."
\nNew Password: ".$passwordbaru."
\n\n PESAN NO-REPLY";

// header email berisi alamat pengirim
$header = "From: New Password Unmetered.co.id - <[email protected]>";

// mengirim email
$kirimEmail = mail($email, $title, $pesan, $header);

// cek status pengiriman email
if ($kirimEmail) {

// update password baru ke database (jika pengiriman email sukses)
$query = "UPDATE pengguna SET password='$password' WHERE UserId = '$UserId'";
$hasil = mysql_query($query);

if ($hasil)
echo'
<div class="warning">Password baru berhasil direset dan dikirim ke email "'.$email.'" Silahkan cek di kotak inbox atau kotak SPAM email</div></br><hr>';
    }
else {
echo'<div class="warning">Pengiriman Password baru ke email gagal</div>';
}
}
else {
echo'<div class="warning">Alamat Email tidak ditemukan</div>';
}}
?>

</div>
</body>
</html>

Saya ubah menjadi MySQLi :

Code:
<html>
<head>
<title>Reset Password</title>
<style>
body {background:#20B2AA; padding:0px; margin:0px}
h3,h4 {color:#ffffff; text-align:center; font-family:Arial, Helvetica, sans-serif; font-size:20px; margin:20px;}
.wrapper-f{width:300px; margin:auto; padding:40px 20px 20px 20px; background:#E84C3D; margin-top:5%; min-height:120px;}
.wrapper-f label {color:#ffffff;}
.wrapper-f input {padding:5px; background:#eeeeee; border:0px; color:#333; width:98%; margin-bottom:10px;}
.wrapper-f input:focus{ background:#ccc;}
.wrapper-f .button {padding:10px 20px 10px 20px; color:#ffffff; background:#191970; margin-top:10px; cursor:pointer}
.wrapper-f .button:hover {background:#00BFFF;}
.warning {background:#FF9900; color:#ffffff; padding:10px; border-radius:5px; border:1px; text-align:center;margin:auto;
 width:400px; margin-top:20px;}
</style>
</head>

<body>
<h3>FORGOT PASSWORD</h3>
<h4>Forgotten your password? Enter your email address below to begin the reset process.</h4>
<div class="wrapper-f">
<form action="forgot.php" method="post">
<label>Masukkan Email anda</label>
<input name="email" type="email" placeholder="Enter Email" required oninvalid="this.setCustomValidity('Masukkan Email Dengan benar oke Tuan')">
<input class="button" name="act_resset" type="submit" value="Submit">
</form>
</div>

<div style="width:600px; margin:auto">

<?php

$mysql_host = 'localhost';
$mysql_user = 'root';
$mysql_password = 'XXXXXXXXXXXXXX';
$mysql_database = 'databaseku';

$x = mysqli_connect($mysql_host,$mysql_user,$mysql_password, $mysql_database);

// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }
///////////////////////////////////////////////////////////////////////

if (isset($_POST['act_resset']))  {
$password="1A2B4HTjsk5kwhadbwlff"; $panjang='8'; $len=strlen($password);
$start=$len-$panjang; $xx=rand('0',$start);
$yy=str_shuffle($password);
$passwordbaru=substr($yy, $xx, $panjang);
$email = trim(strip_tags($_POST['email']));
$password = mysqli_real_escape_string(htmlentities((MD5($passwordbaru))));

// mencari alamat email si user
$query = "SELECT * FROM pengguna WHERE email ='$email'";
$hasil= mysqli_query($x, $query);
$data  = mysqli_fetch_array($hasil);
$cek = mysqli_num_rows($hasil);
$UserId = strip_tags($data['UserId']);
$email = strip_tags($data['email']);
$nama = strip_tags($data['nama']);
$username =trim(strip_tags($data['user']));
if ($cek == 1) {

// title atau subject email
$title  = "Permintaan Password Baru";

// isi pesan email disertai password
$pesan  = "Kami telah reset ulang password ".$nama." Dan anda dapat login kembali ke member area kami \n\n
DETAIL AKUN ANDA :
\nUsername : ".$username."
\nNew Password: ".$passwordbaru."
\n\n PESAN NO-REPLY";

// header email berisi alamat pengirim
$header = "From: New Password Unmetered.co.id - <[email protected]>";

// mengirim email
$kirimEmail = mail($email, $title, $pesan, $header);

// cek status pengiriman email
if ($kirimEmail) {

// update password baru ke database (jika pengiriman email sukses)
$query = "UPDATE SET password='$password' WHERE UserId = '$UserId'";
$hasil = mysqli_query($x, $query);

if ($hasil)
echo'
<div class="warning">Password baru berhasil direset dan dikirim ke email "'.$email.'" Silahkan cek di kotak inbox atau kotak SPAM email</div></br><hr>';
    }
else {
echo'<div class="warning">Pengiriman Password baru ke email gagal</div>';
}
}
else {
echo'<div class="warning">Alamat Email tidak ditemukan</div>';
}}
?>

</div>
</body>
</html>

Setelah kami ubah, ketika user klik tombol Forgot Password (lupa password), password baru sudah berhasil terkirim ke email user, namun ketika login, ternyata password belum berubah...

Saya curiga kesalahan pada kode :
// update password baru ke database (jika pengiriman email sukses)
$query = "UPDATE SET password='$password' WHERE UserId = '$UserId'";
$hasil = mysqli_query($x, $query);


Adakah kode MySQLi kami yang salah ??
Semoga Suhu dan master berkenan memberi pencerahannya...
 
Last edited:

mustafaramadhan

Hosting Guru
Coba tambahkan 'mysqli_close($x);' setelah '$hasil = mysqli_query($x, $query);'
 

Rockman

Hosting Guru
Verified Provider
Coba tambahkan 'mysqli_close($x);' setelah '$hasil = mysqli_query($x, $query);'
Sudah saya ubah menjadi :

// update password baru ke database (jika pengiriman email sukses)
$query = "UPDATE SET password='$password' WHERE UserId = '$UserId'";
$hasil = mysqli_close($x);

Masih belum berhasil login pak, padahal password baru sudah terkirim ke email...
 

Rockman

Hosting Guru
Verified Provider
Maaf code terbalik

Code:
update nama_table set password = '".$password."' where UserId = '".$userId."'

atau
Code:
update nama_table set password = '$password' where UserId = '$userId'

Nama tabel adalah pengguna ( user )
update pengguna set password = '$password' where UserId = '$userId'

saya ubah

update pengguna set password = '$passwordbaru' where UserId = '$userId'

saya ubah jadi

$query = mysqli_query($x,"UPDATE pengguna SET password='$password' WHERE UserId = '$UserId'")or die (mysqli_error());;
$hasil = mysqli_fetch_array($x, $query);

juga tidak bisa, mungkin bisa sekalian di coba pak...?:D

Kalau pakai MYSQL sih lancar, namun ini menyesuaikan dengan theme yang sudah migrasi ke MySQLi, masih mencari apa yang kurang atau yang salah....
 
Last edited:

Rockman

Hosting Guru
Verified Provider
Kode FORGOT PASSWORD yang pertama MYSQL, sebelumnya saya pakai untuk theme dengan PHP 5.6 & MySQL. Setelah pengembangnya me rilis billing versi PHP 7.X & MySQLi, maka saya harus menyesuaikan, sebab theme yang saya pesan ini tidak dilengkapi FORGOT PASSWORD, oleh karenanya saya tambahkan secara manual.
Sampai saat ini theme yang versi terbaru belum saya pakai, sambil menunggu forgot passwordnya kelar dulu, Gitu ceritanya .... Mohon solusinya ;)
 
Last edited:

mustafaramadhan

Hosting Guru
Sudah saya ubah menjadi :

// update password baru ke database (jika pengiriman email sukses)
$query = "UPDATE SET password='$password' WHERE UserId = '$UserId'";
$hasil = mysqli_close($x);

Masih belum berhasil login pak, padahal password baru sudah terkirim ke email...
Rasanya bukan '$hasil = mysqli_close($x);' tapi 'mysqli_close($x);'
 

masiqbal

Hosting Guru
Verified Provider
Saya menduga perintah SQLnya tidak sesuai yg diharapkan. Bisa jadi userId ya gak masuk. Coba debug aja Tuan. Pakai echo biasa aja.

$query = "UPDATE pengguna SET password='$password' WHERE UserId = '$UserId'";
echo $query;
exit();


itu untuk melihat apakah perintah SQL sesuai dengan yang diharapkan.
Cek juga apakah pakai transaction di atas2 nya? Kalau iya, jangan lupa commit.

Beberapa saran lain:
  • Simpan dulu ke database baru kirim email jika sukses nyimpen. Jangan sampai klien mendapat info yg salah.
  • Gunakan mysqli_fetch_assoc aja kalau hanya pakai associative array. Gak banyak ngaruh sih, tapi penghematan walau sangat kecil kan harus dibiasakan.
  • Beralih dari PHP mail() ke smtp. phpMailer cukup berguna.
 

ninotek

Apprentice 1.0
Saya menduga perintah SQLnya tidak sesuai yg diharapkan. Bisa jadi userId ya gak masuk. Coba debug aja Tuan. Pakai echo biasa aja.

$query = "UPDATE pengguna SET password='$password' WHERE UserId = '$UserId'";
echo $query;
exit();


itu untuk melihat apakah perintah SQL sesuai dengan yang diharapkan.
Cek juga apakah pakai transaction di atas2 nya? Kalau iya, jangan lupa commit.

Beberapa saran lain:
  • Simpan dulu ke database baru kirim email jika sukses nyimpen. Jangan sampai klien mendapat info yg salah.
  • Gunakan mysqli_fetch_assoc aja kalau hanya pakai associative array. Gak banyak ngaruh sih, tapi penghematan walau sangat kecil kan harus dibiasakan.
  • Beralih dari PHP mail() ke smtp. phpMailer cukup berguna.

bener kata mas iqbal. coba echo $query nya mas
Code:
mysqli_query($x, "update pengguna set password = '$password' where UserId = '$userId'");
 
Status
Not open for further replies.

Top