رزرو بلیط اتوبوس با استفاده از PHP CodeIgniter
رزرو بلیط اتوبوس یکی از سیستمهای مهم در صنعت حمل و نقل عمومی است. در اینجا، به بررسی چگونگی پیادهسازی یک سیستم رزرو بلیط اتوبوس با استفاده از PHP و فریمورک CodeIgniter میپردازیم.
طراحی پایگاه داده
اولین قدم، طراحی پایگاه داده است. به طور کلی، شما به جداول زیر نیاز دارید:
- جدول کاربران: برای ذخیره اطلاعات کاربران.
- name
- password
- جدول اتوبوسها: برای ذخیره اطلاعات اتوبوسها.
- bus_number
- capacity
- route
- جدول بلیطها: برای ذخیره اطلاعات بلیطها.
- user_id
- bus_id
- seat_number
- reservation_date
ایجاد مدلها
در CodeIgniter، شما نیاز دارید تا مدلهای مربوط به هر جدول را ایجاد کنید. به عنوان مثال:
```php
class Bus_model extends CI_Model {
public function get_buses() {
return $this->db->get('buses')->result();
}
public function reserve_ticket($data) {
return $this->db->insert('tickets', $data);
}
}
```
کنترلر
شما نیاز به یک کنترلر برای مدیریت عملیات دارید. کنترلر میتواند به صورت زیر باشد:
```php
class Ticket extends CI_Controller {
public function index() {
$this->load->model('Bus_model');
$data['buses'] = $this->Bus_model->get_buses();
$this->load->view('ticket_view', $data);
}
public function reserve() {
$this->load->model('Bus_model');
$data = array(
'user_id' => $this->input->post('user_id'),
'bus_id' => $this->input->post('bus_id'),
'seat_number' => $this->input->post('seat_number'),
'reservation_date' => date('Y-m-d H:i:s')
);
$this->Bus_model->reserve_ticket($data);
redirect('ticket/success');
}
}
```
ویو
در نهایت، برای نمایش فرم رزرو بلیط، باید یک ویو ایجاد کنید. به عنوان مثال:
```html
<form method="post" action="<?php echo base_url('ticket/reserve'); ?>">
<select name="bus_id">
<?php foreach ($buses as $bus): ?>
<option value="<?php echo $bus->id; ?>"><?php echo $bus->bus_number; ?></option>
<?php endforeach; ?>
</select>
<input type="text" name="seat_number" placeholder="شماره صندلی" required>
<input type="hidden" name="user_id" value="<?php echo $user_id; ?>">
<button type="submit">رزرو</button>
</form>
```
نتیجهگیری
در پایان، با رعایت مراحل بالا، میتوانید یک سیستم رزرو بلیط اتوبوس کامل با استفاده از PHP CodeIgniter پیادهسازی کنید. این سیستم به شما این امکان را میدهد تا بلیطها را به راحتی مدیریت کنید و تجربه کاربری خوبی را فراهم کنید.
رزرو بلیط اتوبوس در PHP CodeIgniter: راهنمای کامل و جامع
در این مقاله، قصد داریم به صورت گامبهگام و جامع، فرآیند پیادهسازی سیستم رزرو بلیط اتوبوس را در فریمورک PHP CodeIgniter بررسی کنیم. این راهنمای کامل برای توسعهدهندگان تازهکار و حرفهای مناسب است و تمامی مراحل، از طراحی دیتابیس گرفته تا پیادهسازی منطق برنامه و رابط کاربری، پوشش داده میشود.
۱. طراحی دیتابیس (Database Design)
قبل از شروع برنامهنویسی، باید ساختار دیتابیس را طراحی کنیم. در این پروژه، چند جدول اصلی داریم:
- bus_routes: مسیرهای اتوبوس، شامل مبدا، مقصد، زمان حرکت و شماره مسیر.
- buses: اتوبوسها، شامل شماره پلاک، نوع، ظرفیت و وضعیت.
- tickets: بلیطها، شامل شماره بلیط، مسیر، تاریخ، ساعت، قیمت و وضعیت (رزرو شده، صادر شده، لغو شده).
- users: کاربران، اگر سیستم ثبتنامی باشد.
- reservations: رزروهای کاربر، شامل کاربر، بلیط، وضعیت و تاریخ رزرو.
در ادامه، نمونهای از ساختار جداول آورده شده است:
```sql
CREATE TABLE bus_routes (
id INT AUTO_INCREMENT PRIMARY KEY,
origin VARCHAR(100),
destination VARCHAR(100),
departure_time TIME,
route_code VARCHAR(20)
);
CREATE TABLE buses (
id INT AUTO_INCREMENT PRIMARY KEY,
bus_number VARCHAR(20),
bus_type VARCHAR(50),
capacity INT,
status VARCHAR(20)
);
CREATE TABLE tickets (
id INT AUTO_INCREMENT PRIMARY KEY,
route_id INT,
bus_id INT,
travel_date DATE,
seat_number INT,
price DECIMAL(10,2),
status VARCHAR(20),
FOREIGN KEY (route_id) REFERENCES bus_routes(id),
FOREIGN KEY (bus_id) REFERENCES buses(id)
);
CREATE TABLE reservations (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT,
ticket_id INT,
reservation_date DATETIME,
status VARCHAR(20),
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (ticket_id) REFERENCES tickets(id)
);
```
۲. پیادهسازی مدلها (Models)
در CodeIgniter، برای ارتباط با دیتابیس، باید مدلهایی بنویسید که عملیات CRUD را انجام دهند. برای مثال، مدل `Ticket_model`:
```php
class Ticket_model extends CI_Model {
public function get_available_tickets($route_id, $travel_date) {
$this->db->where('route_id', $route_id);
$this->db->where('travel_date', $travel_date);
$this->db->where('status', 'available');
return $this->db->get('tickets')->result();
}
public function reserve_ticket($ticket_id, $user_id) {
$this->db->trans_start();
// بروزرسانی وضعیت بلیط
$this->db->set('status', 'reserved');
$this->db->where('id', $ticket_id);
$this->db->update('tickets');
// افزودن رزرو جدید
$data = [
'user_id' => $user_id,
'ticket_id' => $ticket_id,
'reservation_date' => date('Y-m-d H:i:s'),
'status' => 'active'
];
$this->db->insert('reservations', $data);
$this->db->trans_complete();
return $this->db->trans_status();
}
}
```
۳. ساخت کنترلرها (Controllers)
در کنترلر، باید منطق رزرو و نمایش بلیطها را مدیریت کنید. مثلا، کنترلر `Booking.php`:
```php
class Booking extends CI_Controller {
public function index() {
$this->load->model('Ticket_model');
$route_id = $this->input->get('route_id');
$date = $this->input->get('date');
$tickets = $this->Ticket_model->get_available_tickets($route_id, $date);
$data['tickets'] = $tickets;
$this->load->view('booking_view', $data);
}
public function reserve() {
$ticket_id = $this->input->post('ticket_id');
$user_id = $this->session->userdata('user_id');
$this->load->model('Ticket_model');
$success = $this->Ticket_model->reserve_ticket($ticket_id, $user_id);
if ($success) {
redirect('booking/success');
} else {
redirect('booking/failure');
}
}
}
```
۴. طراحی ویوها (Views)
در قسمت نمایشی، باید فرمهای انتخاب مسیر، تاریخ، و لیست بلیطهای موجود را طراحی کنید. برای مثال، فرم رزرو:
```html
<form method="post" action="<?= base_url('booking/reserve') ?>">
<input type="hidden" name="ticket_id" value="<?= $ticket->id ?>">
<p>Seat: <?= $ticket->seat_number ?></p>
<p>Price: <?= $ticket->price ?> تومان</p>
<button type="submit">رزرو</button>
</form>
```
۵. مدیریت وضعیتها و امنیت
برای بهتر کردن سیستم، باید از احراز هویت کاربران استفاده کنید، وضعیتهای مختلف بلیط و رزرو را مدیریت کنید و از حملات CSRF و XSS جلوگیری کنید. همچنین، باید عملیات تراکنشی را برای جلوگیری از خطاهای احتمالی در عملیات رزرو در نظر بگیرید.
۶. نکات مهم و بهترین رویهها
- همواره از prepared statements و query bindings استفاده کنید.
- عملیاتهای حساس را داخل تراکنش انجام دهید.
- فرمها و ورودیها را با فیلتر و validation محافظت کنید.
- از روشهای استاندارد برای مدیریت Session و Authentication بهره ببرید.
- رابط کاربری باید ساده و کاربرپسند باشد، مخصوصا در بخش انتخاب مسیر و صندلی.
---
در پایان، پیادهسازی کامل و موفق سیستم رزرو بلیط اتوبوس نیازمند رعایت تمامی این مراحل، توسعه و تست دقیق است. با تمرکز بر جزئیات، میتوانید سیستمی قدرتمند و کارآمد بسازید که هم نیازهای کاربران را برآورده کند و هم از نظر فنی، نگهداری و توسعه آن آسان باشد.