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 :(

avatar dacevezaq
@dacevezaq

57 Kontribusi 5 Poin

Diperbarui 5 tahun yang lalu

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');
  }
}

avatar chelvin
@chelvin

36 Kontribusi 18 Poin

Dipost 7 tahun yang lalu

itu panjang karakter di kolom tabelnya ada berapa gan ?

avatar ahanafi
@ahanafi

815 Kontribusi 552 Poin

Dipost 7 tahun yang lalu

@chelvin gamau tetep gan di pengujiannya tetep gagal tp data udah kebaca sama arraynya

avatar dacevezaq
@dacevezaq

57 Kontribusi 5 Poin

Dipost 7 tahun yang lalu

@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

avatar dacevezaq
@dacevezaq

57 Kontribusi 5 Poin

Dipost 7 tahun yang lalu

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

avatar ahanafi
@ahanafi

815 Kontribusi 552 Poin

Dipost 7 tahun yang lalu

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

avatar chelvin
@chelvin

36 Kontribusi 18 Poin

Dipost 7 tahun yang lalu

@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

avatar dacevezaq
@dacevezaq

57 Kontribusi 5 Poin

Dipost 7 tahun yang lalu

oke sama2 gan (y) :D

avatar ahanafi
@ahanafi

815 Kontribusi 552 Poin

Dipost 7 tahun yang lalu

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 '>

avatar eben2512
@eben2512

17 Kontribusi 4 Poin

Dipost 5 tahun yang lalu

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

avatar eben2512
@eben2512

17 Kontribusi 4 Poin

Dipost 5 tahun yang lalu

gan @eben2512 emg itu pake password_hash apa hashing lain ?

avatar ahanafi
@ahanafi

815 Kontribusi 552 Poin

Dipost 5 tahun yang lalu

password hash @ahmaddhanaf

saya sdh 2 minggu belum dapat mas jadi saya gak bisa melanjutkan peljaran selanjutnya makasih mas

avatar eben2512
@eben2512

17 Kontribusi 4 Poin

Dipost 5 tahun yang lalu

ini screenshotnya gan <img src='https://i.imgur.com/4qlxFvr.jpg'>

avatar eben2512
@eben2512

17 Kontribusi 4 Poin

Dipost 5 tahun yang lalu

@eben: kalo udah make password_hash ga bisa make mysqli_real_escape_string. ilangin pas password_verify

avatar mending3
@mending3

2 Kontribusi 0 Poin

Dipost 5 tahun yang lalu

coba parameter fungsi registernya jadiin array, jadi kaya gini : <pre>

function register($data = array()){ //kode disini }

</pre>

avatar ahanafi
@ahanafi

815 Kontribusi 552 Poin

Dipost 5 tahun yang lalu

gan sori baru aktif... sdh berhasil gan...saya download xamp versi baru....

karena password hash di xamp versi lama gakbisa

makasih ya

avatar eben2512
@eben2512

17 Kontribusi 4 Poin

Dipost 5 tahun yang lalu

Login untuk ikut Jawaban