Creating a simple tutorial on signup with AJAX using CodeIgniter 4 involves several steps, including setting up the database, creating the controller, model, and view, and implementing AJAX for asynchronous communication. Here’s a step-by-step guide:
Step 1: Setup CodeIgniter 4 Project
Make sure you have CodeIgniter 4 installed. If not, you can follow the official documentation to install it.
Step 2: Database Configuration
Configure your database settings in App/Config/Database.php
.
public array $default = [
'DSN' => '',
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'infovistar_ci4_db',
'DBDriver' => 'MySQLi',
'DBPrefix' => '',
'pConnect' => false,
'DBDebug' => true,
'charset' => 'utf8',
'DBCollat' => 'utf8_general_ci',
'swapPre' => '',
'encrypt' => false,
'compress' => false,
'strictOn' => false,
'failover' => [],
'port' => 3306,
'numberNative' => false,
];
Step 3: Create Database Table
Create a table for users in your database.
CREATE TABLE `login_info` ( `id` int(10) NOT NULL, `name` varchar(255) NOT NULL, `email` varchar(255) NOT NULL, `password` varchar(255) NOT NULL, `mobile_number` varchar(50) NOT NULL, `ip_address` varchar(255) NOT NULL, `created_at` datetime NOT NULL, `updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `status` varchar(10) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
ALTER TABLE `login_info` ADD PRIMARY KEY (`id`);
Step 4: Model
Create a model to interact with the database.
<?php
namespace App\Models\login;
use CodeIgniter\Model;
use CodeIgniter\Database\ConnectionInterface;
class LoginModel extends Model {
protected $db;
public function __construct(ConnectionInterface &$db) {
$this->db =& $db;
$this->table = 'login_info';
}
public function addEntry($data) {
$this->db
->table($this->table)
->insert($data);
return $this->db->insertID();
}
public function updateEntry($where, $data) {
return $this->db
->table($this->table)
->where($where)
->set($data)
->update();
}
public function deleteEntry($where) {
return $this->db
->table($this->table)
->where($where)
->delete();
}
public function getEntry($where) {
return $this->db
->table($this->table)
->where($where)
->get()
->getRow();
}
public function getEntryList($where = 0) {
if($where) {
return $this->db
->table($this->table)
->where($where)
->get()
->getResult();
} else {
return $this->db
->table($this->table)
->get()
->getResult();
}
}
public function getNumRows($where) {
return $this->db
->table($this->table)
->where($where)
->get()
->getNumRows();
}
}
Step 5: Controller
Create a controller for handling signup requests.
<?php
namespace App\Controllers\signup;
use App\Controllers\BaseController;
use App\Models\login\LoginModel;
class Signup extends BaseController {
public function __construct() {
$db = db_connect();
$this->login = new LoginModel($db);
$this->ip_address = $_SERVER['REMOTE_ADDR'];
$this->datetime = date("Y-m-d H:i:s");
}
public function index() {
$this->signup();
}
public function signup() {
$data = [];
$data ['content_title'] = 'Sign Up';
echo view('signup/signup', $data);
}
public function create() {
$name = $this->request->getPost('name');
$email = $this->request->getPost('email');
$password = $this->request->getPost('password');
$mobile_number = $this->request->getPost('mobile_number');
$where = [
'email' => $email,
];
$has_account = $this->login->getEntry($where);
if($has_account) {
$json = [
'status' => false,
'message' => showDangerMessage("Entered email address is already registered"),
];
} else {
$data = [
'name' => $name,
'email' => $email,
'password' => md5($password),
'mobile_number' => $mobile_number,
'ip_address' => $this->ip_address,
'created_at' => $this->datetime,
'status' => "1",
];
$result = $this->login->addEntry($data);
if($result) {
$json = [
'status' => true,
'message' => showSuccessMessage("Your account has been created successfully"),
'location' => base_url('login'),
];
} else {
$json = [
'status' => false,
'message' => showDangerMessage("Something went wrong. Please try again!"),
];
}
}
echo json_encode($json);
}
}
Step 6: View
Create a view for the signup form.
<!DOCTYPE html>
<html lang="en">
<head>
<title><?php echo $content_title; ?></title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css">
<script src="https://cdn.jsdelivr.net/npm/jquery@3.7.1/dist/jquery.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
</head>
<body>
<div class="jumbotron text-center">
<h1>Welcome to Infovistar.in</h1>
<p>Registration Example with AJAX</p>
</div>
<div class="container">
<div class="row">
<div class="col-sm-3">
</div>
<div class="col-sm-6">
<div class="message"></div>
<form id="form-signup" method="post" autocomplete="off">
<div class="form-group">
<label>Name</label>
<input type="text" class="form-control" id="name" name="name" placeholder="Name" required>
</div>
<div class="form-group">
<label>Email</label>
<input type="email" class="form-control" id="email" name="email" placeholder="Email" required>
</div>
<div class="form-group">
<label>Password</label>
<input type="password" class="form-control" id="password" name="password" placeholder="Password" required>
</div>
<div class="form-group">
<label>Mobile No.</label>
<input type="text" class="form-control" id="mobile_number" name="mobile_number" placeholder="Mobile No." maxlength="10" required>
</div>
<div class="form-group">
<button type="submit" id="btn-signup" class="btn btn-success">Create Account</button>
<a href="<?php echo base_url("login"); ?>" class="btn btn-info">Go to Login</a>
</div>
</form>
</div>
</div>
</div>
<script>
$(document).ready(function() {
$("#form-signup").on("submit", function(e) {
e.preventDefault();
let data = $(this).serialize();
$.post('<?php echo base_url("signup/create"); ?>', data, function(result) {
$(".message").html(result.message);
if(result.status) {
// window.location.replace(result.location);
}
}, 'json');
});
});
</script>
</body>
</html>
Step 7: Routes
Configure a route to access the signup page and handle the signup request.
// New Account Routes
$routes->group('signup', function($routes) {
$routes->get('/', 'signup\Signup::index');
$routes->post('create', 'signup\Signup::create');
});
Step 8: Test
Run in command prompt: php spark serve
Visit http://localhost:8080/signup
in your browser and test the signup form.