Tidak ada pesan error, tetapi kondisi yang berjalan tidak sesuai harapan

temen" saya lagi belajar nih buat form registrasi. Ketika saya input data nya melalui form, data tidak masuk kedalam database, tetapi malah menjalankan kondisi 'username sudah terdaftar' sedangkan didalam database, data masih kosong belum ada data yang di insert. setiap saya melakukan insert form registrasi selalu menjalankan konsisi 'username sudah terdaftar' dan data tidak masuk ke dalam data base

mungkin ada yang tau kesalahan saya dimana?. soalnya tidak ada pesan error dan saya bingung mencari kesalahannya..



registrasi.php
<?php
require 'function.php';

if (isset($_POST['registrasi'])) {

  if (registrasi($_POST) > 0) {
    echo "<script>
            alert('Registrasi Berhasil!');
            document.location.href = 'index.php';
          </script>";
  } else {
    echo "<script>
            alert('Registrasi Gagal!');
            document.location.href = 'registrasi.php';
          </script>";
  }
}
?>

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
  <title>Registrasi</title>
</head>

<body>

  <div class="container" style="width: 30%; margin: auto;">

    <h3 class="text-center mb-4 mt-4">Registrasi</h3>

    <form class="container" method="POST" action="">

      <div class="row mb-3">
        <label class="col-sm-4 col-form-label">Nama</label>
        <div class="col-sm-8">
          <input type="text" class="form-control" name="nama">
        </div>
      </div>

      <div class="row mb-3">
        <label class="col-sm-4 col-form-label">Username</label>
        <div class="col-sm-8">
          <input type="text" class="form-control" name="username">
        </div>
      </div>

      <div class="row mb-3">
        <label class="col-sm-4 col-form-label">Password</label>
        <div class="col-sm-8">
          <input type="password" class="form-control" name="password">
        </div>
      </div>

      <div class="row mb-3">
        <label class="col-sm-4 col-form-label">Confirm Password</label>
        <div class="col-sm-8">
          <input type="password" class="form-control" name="confirm">
        </div>
      </div>

      <button type="submit" class="btn btn-primary mt-3" style="width: 65%; margin-left: 35%;" name="registrasi">Registrasi</button>

    </form>
  </div>

  <?php require 'footer.php'; ?>

</html>



function.php
function registrasi($data)
{
  $conn = koneksi();

  $nama = htmlspecialchars($data['nama']);
  $username = htmlspecialchars(strtolower($data['username']));
  $password = mysqli_real_escape_string($conn, $data['password']);
  $confirm = mysqli_real_escape_string($conn, $data['confirm']);

  if (empty($nama) || empty($username) || empty($password) || empty($confirm)) {
    echo "<script>
            alert('Username dan Password Harus Di isi!');
            document.location.href = 'registrasi.php';
          </script>";
    return false;
  }

  if (mysqli_query($conn, "SELECT * FROM user WHERE username = '$username'")) {
    echo "<script>
            alert('Username sudah terdaftar!');
            document.location.href = 'registrasi.php';
          </script>";
    return false;
  }

  if ($password !== $confirm) {
    echo "<script>
            alert('Konfirmasi Password tidak Sesuai!');
            document.location.href = 'registrasi.php';
          </script>";
    return false;
  }

  if (strlen($password) < 5) {
    echo "<script>
            alert('Password terlalu pendek!');
            document.location.href = 'registrasi.php';
          </script>";
    return false;
  }

  $new_pass = password_hash($password, PASSWORD_DEFAULT);
  $query = "INSERT INTO user
              VALUES
            (null,'$nama','$username','$new_pass')";
  mysqli_query($conn, $query) or die(mysqli_error($conn));
  return mysqli_affected_rows($conn);
}

mysqldatabase.pngdatabase.PNG


mohon pencerahannya teman" dibagian mana kesalahan saya dan apa yang harus saya perbaiki?

Terima Kasih banyak buat temen" yang mau membantu saya, Salam..
avatar manca13

@manca13

2 Kontribusi 0 Poin


Jawaban Terpilih

Hallo, bantu jawab ya..
Pada bagian ini :
if (mysqli_query($conn, "SELECT * FROM user WHERE username = '$username'")) {
    echo "<script>
            alert('Username sudah terdaftar!');
            document.location.href = 'registrasi.php';
          </script>";
    return false;
}

Itu hanya menguji apakah query -nya berhasil dijalankan atau tidak, karena ditaruh di dalam kondisi IF maka akan selalu bernilai true, hal tersebut mengabaikan apakah datanya ada atau tidak berdasarkan parameter username yang diterima. 
Solusinya mungkin bisa diubah menjadi seperti ini :
// Simpan query SQL ke variabel
$query = mysqli_query($conn, "SELECT * FROM user WHERE username = '$username'") or die("Query error: " . mysqli_error($conn));

// Cek apakah di database sudah ada dengan fungsi mysqli_num_rows
$cek_username = mysqli_num_rows($query);

// Jika nilainya lebih besar dari 0, artinya data sudah ada
if ($cek_username > 0) {
    echo "<script>
            alert('Username sudah terdaftar!');
            document.location.href = 'registrasi.php';
          </script>";
    return false;
}

Silahkan pelajari lagi mengenai mysqli_num_rows dan mysqli_query.
Semoga berhasil.
avatar ahanafi

@ahanafi

792 Kontribusi 523 Poin

Jawaban

Hallo, bantu jawab ya..
Pada bagian ini :
if (mysqli_query($conn, "SELECT * FROM user WHERE username = '$username'")) {
    echo "<script>
            alert('Username sudah terdaftar!');
            document.location.href = 'registrasi.php';
          </script>";
    return false;
}

Itu hanya menguji apakah query -nya berhasil dijalankan atau tidak, karena ditaruh di dalam kondisi IF maka akan selalu bernilai true, hal tersebut mengabaikan apakah datanya ada atau tidak berdasarkan parameter username yang diterima. 
Solusinya mungkin bisa diubah menjadi seperti ini :
// Simpan query SQL ke variabel
$query = mysqli_query($conn, "SELECT * FROM user WHERE username = '$username'") or die("Query error: " . mysqli_error($conn));

// Cek apakah di database sudah ada dengan fungsi mysqli_num_rows
$cek_username = mysqli_num_rows($query);

// Jika nilainya lebih besar dari 0, artinya data sudah ada
if ($cek_username > 0) {
    echo "<script>
            alert('Username sudah terdaftar!');
            document.location.href = 'registrasi.php';
          </script>";
    return false;
}

Silahkan pelajari lagi mengenai mysqli_num_rows dan mysqli_query.
Semoga berhasil.
avatar ahanafi

@ahanafi

792 Kontribusi 523 Poin


Thanks banget bang sarannya, saya akan pelajarin lagi..
Problem Solved.
avatar manca13

@manca13

2 Kontribusi 0 Poin


Login untuk gabung berdiskusi