Postingan lainnya
password_verify bug
gan sudah 2 hari saya cari ini masalah tidak kelar kelar sampe ngulang ngetik coding ttp error :( ada yang bisa bantu ? nanti ane kirim email file + databasenya
masalahnya terjadi gabisa verify password yang sudah di hash ini fungsi yg ada hashnya
function register_user($username,$password){
global $link;
//mencegah sql injection
$username = mysqli_real_escape_string($link,$username);
$password = mysqli_real_escape_string($link,$password);
$password = password_hash($password, PASSWORD_DEFAULT);
$query = "INSERT INTO users (username,password) VALUES ('$username','$password')";
if(mysqli_query($link,$query)){
return true;
}else {
return false;
}
}
dan ini funsi verifynya
function cek_data($username,$password){
global $link;
//mencegah sql injection
$username = mysqli_real_escape_string($link,$username);
$password = mysqli_real_escape_string($link,$password);
$query = "SELECT password FROM users WHERE username = '$username'";
$result= mysqli_query($link,$query);
$result= mysqli_fetch_assoc($result);
var_dump($result);
if(password_verify($password,$result["password"])){
die('berhasil');
}else {
die('gagal');
}
}
dan ini halaman loginnya
<?php
require_once 'core/init.php';
//VALIDASI
if(isset($_POST['submit'])){
$username = $_POST['username'];
$password = $_POST['password'];
//die($username." ".$password);
if (!empty(trim($username)) && !empty(trim($password))) {
cek_data($username,$password);
}else {
echo "Silahkan masukan datanya terlebih dahulu :)";
}
}
?>
<form action="login.php" method="post">
<label for="">Nama</label> <br>
<input type="text" name="username"> <br><br>
<label for="">Password</label> <br>
<input type="password" name="password"><br><br>
<input type="submit" name="submit" value="daftar">
</form>
<?php
require_once 'view/footer.php';
?>
file pas di run tidak terjadi error dan di var_dump juga ketemu password dalam bentuk yang sudah di hashnya tp ttp hasilnya ke elese dia alias gagal :(
mohon pencerahannya ya gan untuk masalah bug yang membingungkan ini bagi saya , thanks before :(
16 Jawaban:
coba Di ganti query di halaman function cek data nya jadi seperti ini :
function cek_data($username,$password){
global $link;
//mencegah sql injection
$username = mysqli_real_escape_string($link,$username);
$password = mysqli_real_escape_string($link,$password);
$password = password_hash($password, PASSWORD_DEFAULT);
$query = "SELECT username,password FROM users WHERE username = '$username' AND password = '$password'";
$result= mysqli_query($link,$query);
$result= mysqli_fetch_array($result); // Dan coba ubah menjadi fetch_array
if($password == $result['password']){
die('berhasil');
}else {
die('gagal');
}
}
itu panjang karakter di kolom tabelnya ada berapa gan ?
@chelvin gamau tetep gan di pengujiannya tetep gagal tp data udah kebaca sama arraynya
@ahmadhanaf : panjang karakter di kolom table databasenya gan ? 15 tp abis liat comment dr agan ane coba bner bener ikutin video dr sekolah koding ane ganti 50 ttp gabisa gan T_T
Jawaban Terpilih
ganti 255 gan, soalnya kalo udah pake fungsi password_hash, stringnya jadi panjang, kalo 50 kurang panjang gan.. coba ganti 255 trus register ulang + coba login
Kalo gak gini aja bikin hash password nya sendiri aja , misalnya make pnya saya buat function untuk encrypt passwordnya :
function Encrypt($string) {
$result = md5(sha1(crc32($string)));
return $result;
}
Trus Di bagian function register nya menjadi :
function register_user($username,$password){
global $link;
//mencegah sql injection
$username = mysqli_real_escape_string($link,$username);
$password = mysqli_real_escape_string($link,$password);
$password = Encrypt($password);
$query = "INSERT INTO users (username,password) VALUES ('$username','$password')";
if(mysqli_query($link,$query)){
return true;
}else {
return false;
}
}
Lalu di bagian function cek data nya menjadi :
function cek_data($username,$password){
global $link;
//mencegah sql injection
$username = mysqli_real_escape_string($link,$username);
$password = mysqli_real_escape_string($link,$password);
$query = "SELECT username,password FROM users WHERE username = '$username' AND password = '$password'";
$result= mysqli_query($link,$query);
$result= mysqli_fetch_array($result); // Dan coba ubah menjadi fetch_array
if($result['password']) != $password{
die('gagal');
}else {
die('berhasil');
}
}
Dan di bagian halaman loginnya seperti ini :
<?php
require_once 'core/init.php';
//VALIDASI
if(isset($_POST['submit'])){
$username = $_POST['username'];
$password = Encrypt($_POST['password']);
//die($username." ".$password);
if (!empty(trim($username)) && !empty(trim($password))) {
cek_data($username,$password);
}else {
echo "Silahkan masukan datanya terlebih dahulu :)";
}
}
?>
Silahkan Di coba dahulu , trims
@ahmadhanaf : wah makasih gan ketemu , 255 baru mau dia sumpah ini simple tp bikin pusing ane 2 hari :D
@chelvin : sudah berhasil gan , tp ane mau coba jg itu metode baru gan , makasih ilmunya ya gan :D
sobat masih aktifkah ?
iya sobat kasus saya sama. dan sdh saya ikuti seprti diatas saya ganti 255 panjangnya utk password tapi tetap salah..
berikut pesan kesalahannya
Call to undefined function password_hash() in C:\xampp\htdocs\casing\fungsi.php on line 62 <img src=' -1.jpg '>
gan sdh saya ubah jadi 255 tapi tetap aja salah
berikut screenshotnya
<img src='https://i.imgur.com/nf9fioU.jpg'>
mhn bantuannya sobat saya mentok sampai disini belajarnya
gan @eben2512 emg itu pake password_hash apa hashing lain ?
password hash @ahmaddhanaf
saya sdh 2 minggu belum dapat mas jadi saya gak bisa melanjutkan peljaran selanjutnya makasih mas
ini screenshotnya gan <img src='https://i.imgur.com/4qlxFvr.jpg'>
@eben: kalo udah make password_hash ga bisa make mysqli_real_escape_string. ilangin pas password_verify
coba parameter fungsi registernya jadiin array, jadi kaya gini : <pre>
function register($data = array()){ //kode disini }
</pre>
gan sori baru aktif... sdh berhasil gan...saya download xamp versi baru....
karena password hash di xamp versi lama gakbisa
makasih ya