Dalam tutorial ini kita akan belajar bagaimana cara update profile atau update data user dengan PHP dan MySQL.

Tutorial ini adalah lanjutan dari tutorial sebelumnya yaitu tentang proses register PHP dan MySQL. Jika belum mengikuti tutorial sebelumnya, saya sarankan untuk baca dulu tutorial sebelumnya.

Dalam tutorial ini kita akan belajar bagaimana caranya mengupdate data user setelah dia berhasil login.

User akan bisa mengupdate nama, username dan juga passwordnya.

Proses Update Profile

1. Update Halaman index.php

Setelah user login, maka kita redirect ke halaman index.php dimana kita akan menampilkan data user.

Kita akan menambahkan sebuah link ke halaman update profile.

<?php
session_start();

if (empty($_SESSION['login'])) {
	header("Location: login.php");
}
?>
<!doctype html>
<html lang="en">

<head>
	<!-- Required meta tags -->
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

	<!-- Bootstrap CSS -->
	<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">

	<title>Login & Logout PHP</title>
</head>

<body>
	<div class="container">

		<div class="row">
			<div class="col-md-4 offset-md-4  mt-5">

				<?php
				if (isset($_SESSION['error'])) {
				?>
					<div class="alert alert-warning" role="alert">
						<?php echo $_SESSION['error'] ?>
					</div>
				<?php
				}
				?>

				<?php
				if (isset($_SESSION['message'])) {
				?>
					<div class="alert alert-success" role="alert">
						<?php echo $_SESSION['message'] ?>
					</div>
				<?php
				}
				?>

				<div class="card">
					<div class="card-title text-center">
						<h1>Halaman Admin</h1>

						<p><a href="profile.php">Update Profile</a></p>
					</div>
					<div class="card-body">
						<p>Hello: <?php echo $_SESSION['nama'] ?></p>
						<p>Kamu berhasil ke halaman admin.</p>
						<p>Terakhir login: <?php echo $_SESSION['terakhir_login'] ?></p>
						<center>
							<a href="logout.php">Logout</a>
						</center>
					</div>
				</div>
			</div>

		</div>

	</div>
</body>

</html>
<?php
unset($_SESSION['error']);
unset($_SESSION['message']);
?>
Tampilan Setelah Login

2. Buat halaman profile.php

Ketika user mengklik link update profile di gambar diatas. Maka user akan diarahkan ke halaman update profile.

Isi halaman profile.php:

<?php
session_start();

//include koneksi
include "koneksi.php";

//get user detail
$username = $_SESSION['username'];
$query = "select * from users where username = ? limit 1";
$stmt = $mysqli->stmt_init();
$stmt->prepare($query);
$stmt->bind_param('s', $username);
$stmt->execute();
$result = $stmt->get_result();
$user = $result->fetch_array(MYSQLI_ASSOC);

?>
<!doctype html>
<html lang="en">
<head>
	<!-- Required meta tags -->
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

	<!-- Bootstrap CSS -->
	<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">

	<title>Update Profile - PHP</title>
</head>
<body>
	<div class="container">

		<div class="row">
			<div class="col-md-4 offset-md-4 mt-5">

				<?php
				if(isset($_SESSION['error'])) {
				?>
				<div class="alert alert-warning" role="alert">
				  <?php echo $_SESSION['error']?>
				</div>
				<?php
				}
				?>

				<?php
				if(isset($_SESSION['message'])) {
				?>
				<div class="alert alert-success" role="alert">
				  <?php echo $_SESSION['message']?>
				</div>
				<?php
				}
				?>


				<div class="card ">
					<div class="card-title text-center">
						<h1>Profile Form</h1>
					</div>
					<div class="card-body">
						<form action="update-profile.php" method="post">
                            <input type="hidden" name="id" class="form-control" id="id" value="<?php echo @$user['id']?>" >
							<div class="form-group">
								<label for="username">Nama Lengkap</label>
								<input type="text" name="nama" class="form-control" id="name" value="<?php echo @$user['nama']?>" aria-describedby="name" placeholder="Nama lengkap" autocomplete="off">

							</div>
							<div class="form-group">
								<label for="username">Username</label>
								<input type="text" name="username" class="form-control" id="username" value="<?php echo @$user['username']?>" aria-describedby="username" placeholder="username" autocomplete="off">

							</div>
							<div class="form-group">
								<label for="password">Password</label>
								<input type="password" name="password" class="form-control" id="password" value="<?php echo @$_SESSION['password']?>" placeholder="Password">
							</div>
							<div class="form-group">
								<label for="password">Konfirmasi Password</label>
								<input type="password" name="password_confirmation" class="form-control" id="password_confirmation" value="<?php echo @$_SESSION['password_confirmation']?>"  placeholder="Password">
							</div>

							<button type="submit" class="btn btn-primary">Update Data</button>
						</form>

						<a href="/index.php">Batal</a>
					</div>
				</div>
			</div>

		</div>

	</div>
</body>
<?php
unset($_SESSION['error']);
unset($_SESSION['message']);
?>

Tampilannya akan seperti berikut ini:

Tampilan Update Profile

Penjelasan:

Halaman profile.php terdiri dari sebuah form untuk update profile, dimana saat disubmit akan dikirim ke halaman update-profile.php.

Di awal file profile.php kita akan mengambil data user dari database berdasarkan username yang sedang login saat ini.

Bisa diperhatikan di kodingan dibawah ini.

//include koneksi
include "koneksi.php";

//get user detail
$username = $_SESSION['username'];
$query = "select * from users where username = ? limit 1";
$stmt = $mysqli->stmt_init();
$stmt->prepare($query);
$stmt->bind_param('s', $username);
$stmt->execute();
$result = $stmt->get_result();
$user = $result->fetch_array(MYSQLI_ASSOC);

Kita memiliki variable $user yang bisa kita tampilkan di dalam input di form update profile.

3. Buat file update-profile.php

File update-profile.php akan berfungsi untuk mengupdate data user dari form update profile ke dalam database.

Isi dari file update-profile.php:

<?php
session_start();

include "koneksi.php";

//dapatkan data user dari form register
$user = [
	'id' => $_POST['id'],
	'nama' => $_POST['nama'],
	'username' => $_POST['username'],
	'password' => $_POST['password'],
	'password_confirmation' => $_POST['password_confirmation'],
];

//cek jika password tidak kosong, jika kosong jangan di update.
if($_POST['password'] !== ''){

    //validasi jika password & password_confirmation sama
    if($user['password'] != $user['password_confirmation']){
        $_SESSION['error'] = 'Password yang anda masukkan tidak sama dengan password confirmation.';
        $_SESSION['nama'] = $_POST['nama'];
        $_SESSION['username'] = $_POST['username'];
        header("Location: /profile.php");
        return;
    }
}

//check apakah user dengan username tersebut ada di table users yang kecuali user tersebut.
$query = "select * from users where username = ? and id != ? limit 1";
$stmt = $mysqli->stmt_init();
$stmt->prepare($query);
$stmt->bind_param('si', $user['username'], $user['id']);
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_array(MYSQLI_ASSOC);

//jika username sudah ada, maka return kembali ke halaman profile.
if($row != null){
	$_SESSION['error'] = 'Username: '.$user['username'].' yang anda masukkan sudah ada di database.';
	$_SESSION['nama'] = $_POST['nama'];
	$_SESSION['password'] = $_POST['password'];
	$_SESSION['password_confirmation'] = $_POST['password_confirmation'];
	header("Location: /profile.php");
	return;

}else{


	$stmt = $mysqli->stmt_init();

	//username unik. update data user di database.
	$query = "update users set nama = ?, username = ? where id = ?";

	//jika password dirubah
    if($_POST['password'] !== ''){
	    $password = password_hash($user['password'],PASSWORD_DEFAULT);
        $query = "update users set nama = ?, username = ? , password = ? where id = ?";
    }

	$stmt->prepare($query);

    //jika password dirubah
    if($_POST['password'] !== ''){
	    $stmt->bind_param('sssi', $user['nama'],$user['username'],$password, $user['id']);
    }else{
	    $stmt->bind_param('ssi', $user['nama'],$user['username'], $user['id']);
    }
	$result = $stmt->execute();
	$result = $stmt->affected_rows;
    if($result){
        $_SESSION['nama'] = $_POST['nama'];
        $_SESSION['username'] = $_POST['username'];
	    $_SESSION['message']  = 'Berhasil mengupdate data profile di sistem.';
        header("Location: /index.php");
    }else{
        $_SESSION['error'] = 'Gagal update data profile.';
        header("Location: /profile.php");
    }
}

?>

Penjelasan:

  1. Pada line 15, kita akan mengecek apakah ada password yang dikirim dari user. Jika iya, maka kita akan melakukan validasi apakah password itu sudah sama dengan password confirmation.

  2. Pada line 28, kita akan mengecek apakah username yang disubmit sudah ada atau tidak di dalam database. Jika tidak ada, maka kita bisa lanjut ke tahap selanjutnya.

  3. Pada line 51, kita siapkan query untuk update data user.

  4. Pada line 54, jika user mengupdate usernya, kita akan menyesuaikan query yang digunakan untuk mengupdate user. Jadi passwordnya juga akan ikut diupdate.

  5. Mulai dari line 69, Jika proses update berhasil maka kita akan mengupdate data session user dan redirect ke halaman index.php. Jika update gagal maka redirect ke halaman update-profile.php dan tampilan pesan error.

Penutup

Itulah cara membuat proses update profile atau data user dengan PHP dan MySQL. Semoga artikel ini bermanfaat ya. Jika ada pertanyaan dan kesulitan bisa tinggalkan komentar. Saya akan pastikan secepatnya membantu teman-teman.

Source code terbaru tutorial ini bisa didownload disini: https://github.com/yusidabcs/login-php-mysql

Kita sudah menyelesaikan 4 artikel belajar php dasar khususnya yang berkaitan dengan proses login, register, dan update data dengan menggunakan MySQL.

List playlist tentang belajar PHP - Login & Register:

  1. https://ngide.net/cara-membuat-login-dan-logout-sederhana-dalam-php/
  2. https://ngide.net/php-login-dan-logout-mysql/
  3. https://ngide.net/php-register-mysql/
  4. https://ngide.net/update-profile-php-mysql