Function login selalu output gagal

kenapa ketika saya membuat login.php selalu muncul output gagal, padahal username & password sudah sama dgn yang ada didatabase. dan untuk kode function login juga sama seperti dividio tutorial (membuat sistem login & register vidio no.8).

sudah ditest di login dgn username & password yg sama maupun sebaliknya tetap output "gagal" tidak mau "berhasil"

ada yang tau permasalahannya dimana?

nama database : latihan , nama table : pengguna

 <?

// fungsi login pada file user.php
function cek_data($nama , $password){
	global $link;

	//untuk menjegah sql injection
	$nama = mysqli_real_escape_string($link , $nama);
	$password = mysqli_real_escape_string($link , $password);

	$query = "SELECT password FROM pengguna WHERE username='$nama'";
	$result = mysqli_query($link ,$query);

	$hash = mysqli_fetch_assoc($result)['password'];

	if ( password_verify($password , $hash) ) {
		die('berhasil');
	}else{
		die('gagal');
	}
}
 ?>
 <?php

// form file login.php
include('init.php');

//validasi register
if (isset($_POST['submit']) ) {
	$nama = $_POST['username'];
	$password = $_POST['password'];
	//jika user menginput space
	if (!empty(trim($nama)) && !empty(trim($password)) ) {  // !empty = tidak kosong // trim = menghapus/mengabaikan space

		//fungsi
		cek_data($nama ,$password);

	}else{
		echo "tidak boleh kosong";
	}
}

include('header.php');
?>

<form action="login.php" method="post">
	<label>Nama</label><br/>
	<input type="type" name="username"><br/>
	<label>Password</label><br/>
	<input type="Password" name="password"><br/>
	<input type="submit" name="submit" value="Daftar">
</form>

<?php include('footer.php') ?>
avatar Umam7
@Umam7

9 Kontribusi 0 Poin

Diperbarui 5 tahun yang lalu

7 Jawaban:

Function password_verify nya mana?

avatar apem
@apem

72 Kontribusi 27 Poin

Dipost 5 tahun yang lalu

.@apem itu di if (password_verify)

avatar Umam7
@Umam7

9 Kontribusi 0 Poin

Dipost 5 tahun yang lalu

Coba ubah kayak gini <pre> $query = "SELECT * FROM pengguna WHERE username='$nama'"; $result = mysqli_query($link, $query); while($row = mysqli_fetch_assoc($result) ) return $row; if(password_verify($password, $row['password'])) return true; else return false; </pre> semoga berhasil ^^

avatar bosque
@bosque

187 Kontribusi 104 Poin

Dipost 5 tahun yang lalu

Itu di if kan cuma manggil, isi functionya sndiri maksudnya mana..

avatar apem
@apem

72 Kontribusi 27 Poin

Dipost 5 tahun yang lalu

@apem bales komentar siapa ya? gk ada @...

mungkin ngejawab komenter saya

ini function buat cek data password user untuk login, sesuai ditutorial vidio.

maksudnya bisa cek komentar yg saya berikan di kode ini. <pre> function cek_data($nama , $password){ global $link;

//untuk menjegah sql injection
$nama = mysqli_real_escape_string($link , $nama);
$password = mysqli_real_escape_string($link , $password);
//akhir untuk menjegah sql injection
    //buat ngambil password didatabase
$query = &quot;SELECT password FROM pengguna WHERE username=&#039;$nama&#039;&quot;;
$result = mysqli_query($link ,$query);
    
    //blm tau fungsinya, tapi pass di print_r($hash) output = password yg ada didatabase
$hash = mysqli_fetch_assoc($result)[&#039;password&#039;];

    //password_verify($string = password yg diinput user pass login , $hash = password yg ada database , kalo sama dengn di database maka output berhasil , kalo tidak sama output gagal.


   //kalo output udh berhasil, nanti die(&#039;berhasil&#039;) pengen diganti. kalo sama $pass dgn $hash bakal dilempar ke halaman profile user
if ( password_verify($password , $hash) ) {
	die(&#039;berhasil&#039;);
}else{
	die(&#039;gagal&#039;);
}

} </pre>

avatar Umam7
@Umam7

9 Kontribusi 0 Poin

Dipost 5 tahun yang lalu

Jawaban Terpilih

solved

ternyata password yang ada didatabase lenght 50, setelah diganti 255 (sesuai dividio) outputnya jadi berhasil.

untuk kodenya gk ada masalah.

mungkin ada yg bisa jelaskan mengapa bisa terjadi?

avatar Umam7
@Umam7

9 Kontribusi 0 Poin

Dipost 5 tahun yang lalu

kan databasenya cuman nerima 50 karakter, pada saat register user password_hash membutukan 64 karakter(kalau gak salah) pada database, nahh kalau database cuman nerima 50 karakter otomatis pada saat register user, password_hash yang masuk ke database pada kolom password cuman nerima 50 karakter dan 14 karakter sisanya otomatis terhapus. makanya pada saat login selalu false karena password yang dari databasenya udah gak utuh lagi(tinggal 50 karakter).

avatar dedeardiansya
@dedeardiansya

40 Kontribusi 14 Poin

Dipost 5 tahun yang lalu

Login untuk ikut Jawaban