Showing posts with label MySql. Show all posts
Showing posts with label MySql. Show all posts

Wednesday, 10 December 2025

Sistem Produk Tambah Stok Tanpa Model di CodeIgniter 4 v4.6.3: Sederhana

Manajemen stok adalah salah satu fitur penting dalam aplikasi penjualan, inventori, atau gudang. Pada CodeIgniter 4, kita dapat membangun sistem produk dengan kemampuan untuk menambah stok secara fleksibel, baik melalui form input maupun melalui proses update otomatis. Artikel ini membahas langkah demi langkah membuat fitur tersebut: mulai dari struktur database, controller, hingga tampilan (view).

1. Struktur Database

Pertama, buat tabel products untuk menyimpan data produk dan stoknya.


CREATE TABLE products (
    id_product INT AUTO_INCREMENT PRIMARY KEY,
    kode_product VARCHAR(10)
    nama_product VARCHAR(50) NOT NULL,
    harga_ INT NOT NULL,
    stok INT NOT NULL DEFAULT 0
);


Kolom stok bertipe integer untuk menampung jumlah stok yang tersedia.

2. Membuat Controller Product

Controller akan menangani input pengguna, menampilkan halaman, serta melakukan proses tambah stok.

app/Controllers/Product.php



namespace App\Controllers;

class Product extends BaseController{

  protected $db;

  public function __construct(){
    $this->db = \Config\Database::connect();
  }

  public function index(): string{
    $product = $this->db->table('product')->get()->getResult();
    return view('product/index',['data'=>$product]);
  }

  public function simpan_product(){
    $kode = $this->request->getPost("kode_product");
    $nama = $this->request->getPost("nama_product");
    $harga = $this->request->getPost("harga");
    
    $cekKode = $this->db->table("product")
                        ->select("kode_product")
                        ->where("kode_product",$kode)
                        ->get()
                        ->getRow();
    
    if($cekKode !== null){
      $err = ['error'=>true, 'message'=>'kode product tidak valid !!'];
      return view("product/tambah",$err);
    }

    if($harga < 1 || $harga == ""){
      $err = ['error'=>true, 'message'=>'harga tidak boleh Nol "0" !!'];
      return view("product/tambah",$err);
    }

    //simpan
    $data = [
      "kode_product"=>$kode,
      "nama_product"=>$nama,
      "harga"=>$harga,
      "stok"=>0
    ];
    $this->db->table('product')->insert($data);

    return redirect()->to("product");
  }

  public function stok_tambah($err=null){
    $data['data'] = $this->db->table('product')->get()->getResult();
    if($err !== null){
      $data = array_merge($data,$err);
      return view('product/tambah-stok',$data);
    }
    return view('product/tambah-stok',$data);
  }

  public function stok_simpan(){
    $product = $this->request->getPost('id_product');
    $stok = $this->request->getPost('stok');

    //cek error
    if($product == 'n'){
      $err = ['error'=>true,'message'=>'Silahkan pilih kode product !!'];
      return $this->stok_tambah($err);
    }
    if($stok == '' || $stok < 1){
      $err = ['error'=>true,'message'=>'Inputkan Stok dengan benar !!'];
      return $this->stok_tambah($err);
    }
    
    //berhasil
    $data = [
      'stok'=>$stok
    ];
    $this->db->table('product')->set('stok','stok + '.$stok,false)
                              ->where('id_product',$product)
                              ->update();

    return redirect()->to('/product');
  }

}


Penjelasan:

  • index() : menampilkan data product
  • simpan_product() : menyimpan data product ke database
  • stok_tambah : menampilkan form tambah stok
  • stok_simpan() : mengupdate stok product berdasarkan kode product yang dipilih

3. Membuat View Daftar Produk 

app/Views/product/index.php 

4. Membuat View Form Tambah Stok

app/Views/product/add_stock.php 

Form ini hanya membutuhkan input angka untuk menambah stok produk.

5. Routing 

Tambahkan rute untuk controller product.

app/Config/Routes.php 


//products
$routes->get('/product', 'Product::index');
$routes->get('/product/tambah', function(){
  return view('product/tambah');
});
$routes->post('/product/simpan', 'Product::simpan_product');

//stok
$routes->get('/product/stok/tambah','Product::stok_tambah');
$routes->post('product/stok/simpan','Product::stok_simpan');

6. Membuat View Form tambah Product

app/Views/product/tambah.php 

7. Cara Kerja Sistem

Ketika admin ingin menambah stok:

  • Akses browser dengan endpoint `/product`
  • Klik tambah product, utuk menambahkan data product
  • Klik tambah stok, untuk mengubah stok product
  • Masukan jumlah stok sesuai kode product
  • sistem akan update stok product,stok lama akan ditambahkan dengan stok baru

Kesimpulan

Fitur ini dapat dikembangkan lebih lanjut, misalnya dengan catatan history stok, pengurangan stok otomatis saat transaksi, atau validasi lebih kompleks.

untuk melihat artikel lain, bisa klik Disini

  

Saturday, 6 December 2025

Sistem Login dan Register di CodeIgniter 4 versi v4.6.3

 

CodeIgniter 4 merupakan salah satu framework PHP yang ringan, cepat, dan mudah digunakan. Salah satu kebutuhan utama dalam membangun aplikasi web adalah fitur login dan register sebagai pintu gerbang autentikasi pengguna. Pada artikel ini, kita akan membahas langkah-langkah lengkap untuk membuat sistem login dan register sederhana dengan CodeIgniter 4, mulai dari konfigurasi awal, pembuatan model, controller, hingga pembuatan tampilan. Tutorial ini cocok untuk pemula yang ingin memahami dasar autentikasi di CodeIgniter 4.

1. Persiapan Proyek CodeIgniter 4

Sebelum memulai, pastikan CodeIgniter 4 sudah terinstal. Kamu bisa menginstalnya menggunakan composer dengan perintah:


composer create-project codeigniter4/appstarter ci4-login

Setelah itu, jalankan server lokal:


php spark serve

Jika CodeIgniter sudah berjalan, kita siap masuk ke pembuatan fitur login dan register.

2. Membuat Tabel User di Database


CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL,
    password VARCHAR(255) NOT NULL,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

Pada kolom password, kita akan menyimpan password yang telah di-hash agar lebih aman.

3. Konfigurasi Koneksi Database

Buka file: app/Config/Database.php

Sesuaikan dengan konfigurasi lokalmu:


public $default = [
    'DSN'      => '',
    'hostname' => 'localhost',
    'username' => 'root',
    'password' => '',
    'database' => 'ci4_auth',
    'DBDriver' => 'MySQLi',
];

4. Membuat Model User

Model digunakan untuk berinteraksi dengan tabel users.

Buat file baru: app/Models/UserModel.php 


namespace App\Models;

use CodeIgniter\Model;

class UserModel extends Model
{
    protected $table            = 'users';
    protected $primaryKey       = 'id';
    protected $useAutoIncrement = true;
    protected $returnType       = 'array';
    protected $useSoftDeletes   = false;
    protected $protectFields    = true;
    protected $allowedFields    = ['username', 'email', 'password'];

    protected bool $allowEmptyInserts = false;
    protected bool $updateOnlyChanged = true;

    protected array $casts = [];
    protected array $castHandlers = [];

    // Dates
    protected $useTimestamps = false;
    protected $dateFormat    = 'datetime';
    protected $createdField  = 'created_at';
    protected $updatedField  = 'updated_at';
    protected $deletedField  = 'deleted_at';

    // Validation
    protected $validationRules      = [];
    protected $validationMessages   = [];
    protected $skipValidation       = false;
    protected $cleanValidationRules = true;

    // Callbacks
    protected $allowCallbacks = true;
    protected $beforeInsert   = [];
    protected $afterInsert    = [];
    protected $beforeUpdate   = [];
    protected $afterUpdate    = [];
    protected $beforeFind     = [];
    protected $afterFind      = [];
    protected $beforeDelete   = [];
    protected $afterDelete    = [];
}

5. Membuat Controller Auth

Controller ini akan mengatur register, login, dan logout.

Buat file: app/Controllers/Auth.php 

Register:


public function register()
{
    return view('auth/register');
}

public function saveRegister(){
	$userModel = new UserModel();
		
	$cekUsername = $userModel->where('username', $this->request->getPost('username'))->first();
	$cekEmail = $userModel->where('email', $this->request->getPost('email'))->first();

	if ($cekUsername) {
		return redirect()->back()->with('error', 'Username sudah digunakan!');
	}
	if ($cekEmail) {
		return redirect()->back()->with('error', 'Email sudah digunakan!');
	}

	$data = [
    	'username' => $this->request->getPost('username'),
		'email'    => $this->request->getPost('email'),
		'password' => password_hash($this->request->getPost('password'), PASSWORD_DEFAULT),
	];

	$userModel->insert($data);

	return redirect()->to('/login')->with('success', 'Register berhasil!');
}

Login:


public function login()
{
    return view('auth/login');
}

public function doLogin(){
	$session = session();
	$userModel = new UserModel();

	$email = $this->request->getPost('email');
	$password = $this->request->getPost('password');

	$user = $userModel->where('email', $email)->first();

	if ($user) {
		if (password_verify($password, $user['password'])) {
			$session->set([
				'user_id'  => $user['id'],
				'username' => $user['username'],
				'logged_in'=> true
			]);
			return redirect()->to('/');
		} else {
			return redirect()->back()->with('error', 'Password salah!');
		}
	} else {
		return redirect()->back()->with('error', 'Email tidak ditemukan!');
	}
}

Logout:


public function logout()
{
    session()->destroy();
    return redirect()->to('/login');
}

6. Membuat Tampilan Register dan Login

Tampilan Register: app/Views/auth/register.php 

Tampilan Login: app/Views/auth/login.php

7. Membuat Controller Home


namespace App\Controllers;

use App\Libraries\ResponseApi;

class Home extends BaseController{

  public function index(){   
    if(!session()->get('logged_in')){
      return redirect()->to('/login');
    } 
    return view('home');
  }
  
}

Tambahkan file home.php pada View/home.php: 

8. Menambahkan Routing

Tambahkan ke file app/Config/Routes.php:



$routes->get('/', 'Home::index');
$routes->get('/register', 'Auth::register');
$routes->post('/save-register', 'Auth::saveRegister');

$routes->get('/login', 'Auth::login');
$routes->post('/do-login', 'Auth::doLogin');

$routes->get('/logout', 'Auth::logout');


Kesimpulan

Membangun sistem login dan register di CodeIgniter 4 cukup mudah dan terstruktur. Dengan memanfaatkan fitur bawaan seperti Model, Controller, dan View, kita dapat membuat autentikasi yang aman menggunakan hash password. Sistem sederhana ini bisa dikembangkan menjadi lebih kompleks, seperti verifikasi email, reset password, atau penerapan role dan level akses pengguna. 

Untuk melihat artikel yang lain, bisa klik Disini