Postingan lainnya
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') ?>
7 Jawaban:
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 ^^
Itu di if kan cuma manggil, isi functionya sndiri maksudnya mana..
@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 = "SELECT password FROM pengguna WHERE username='$nama'";
$result = mysqli_query($link ,$query);
//blm tau fungsinya, tapi pass di print_r($hash) output = password yg ada didatabase
$hash = mysqli_fetch_assoc($result)['password'];
//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('berhasil') pengen diganti. kalo sama $pass dgn $hash bakal dilempar ke halaman profile user
if ( password_verify($password , $hash) ) {
die('berhasil');
}else{
die('gagal');
}
} </pre>
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?
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).