我的代码的想法是让用户选择航班,然后我减少(-1)他选择的航班的航班座位。
当用户更改航班时,我减少新航班(-1)座位,并增加用户更改航班后的前一个航班座位。
但我不知道如何保持以前的航班id, 实际上我试过,但我失败了,无论如何…
如何存储之前的航班id?
因为每次通过单击提交按钮重新加载页面时都会重置该变量(之所以会发生这种情况,是因为每次打开页面时都必须初始化flight id holder变量)。
这样的东西是可能的吗?…
下面是我尝试使用会话的方法:
$flight_id = '';//empty
$_SESSION['prev_flight_id'] = $flight_id; // I just initiate the session now
echo $_SESSION['prev_flight_id']; // to make sure there's something here
// result is nothing(empty) important note: I set the value of $flight_id
// later in the script
我也试过这个:
session_start();
// bunch of code (I didn't create the $flight_id yet) then :
// submiting the old flight id in the session (I GET THE ERROR HERE)
$_SESSION['prev_flight_id'] = $flight_id;
echo $_SESSION['prev_flight_id'];
// get flight_id from text area
$flight_id = $_POST['flight_id_res'];
// result : Undefined variable: flight_id...
PHP
使用会话
- http://www.php.net/manual/en/session.examples.basic.php
或者您可以使用MySQL SET @@global.your_var
全局存储和SELECT
检索您的航班id。
- http://dev.mysql.com/doc/refman/5.1/en/set-option.html
亲爱的,您可以在使用该id后在会话中存储以前的航班id,然后在会话中取消设置该值。简单的
你可以做一件事,在提交表单时,在parameter_list中添加一个名为last_flight id的变量(发送到服务器),就像Session一样,在服务器端,它将检查last_flight是否没有任何值,如果有,它将增加座位计数并像以前一样做其余的
假设您在这种情况下使用用户表和飞行计划表,那么您需要在用户表和飞行计划表之间创建关系表。例如,存储用户和飞行计划号的userflightplan表。通过使用此表,您可以使用触发器更新来实现飞行计划表中的座位增加/减少。通过访问OLD。飞行计划增加和新。飞行计划减少飞行计划表中相关飞行计划中的座位
您将需要跟踪user_id,并进行某种会话跟踪。
你剩下的问题我会在MySQL中解决。
握住这样的东西是可能的吗?
当然,只要你有一个user_id,你就可以从数据库中获得所有的信息,这就是它的作用。
$user_id = mysql_real_escape_string($_SESSION['user_id']);
$sql = "SELECT b.flight_id, other fields...
FROM booking b
WHERE b.customer_id = '$user_id'
AND b.not_yet_closed = 'TRUE';
如果您有多个航班打开,您将不得不提供航班更改列表,或者您必须将当前flight_id存储在$_SESSION
变量中。
下面是如何在更改预订的flight_id时更改可用座位数
为了跟踪航班上的可用座位,您需要有一个预订表和一个航班表。
booking
--------
id unsigned integer auto_increment primary key,
customer_id integer foreign key references customer(id),
flight_id foreign key references flight(id),
not_yet_closed BOOLEAN NOT NULL DEFAULT TRUE,
other fields....
flight
-------
id unsigned integer auto_increment primary key
available_seats
other fields ....
对于booking
表中的每次更改,您都使用触发器更新航班中的可用座位:
DELIMITER $$
CREATE TRIGGER bi_booking_each BEFORE INSERT ON booking FOR EACH ROW
BEGIN
DECLARE SeatsAvailable INTEGER;
INSERT SUM(f.available_seats) INTO SeatsAvailable
FROM flight f
WHERE flight.id = NEW.flight_id;
IF SeatsAvailable = 0 THEN
//Signal throws an error (in MySQL 5.5+)
SIGNAL SQLSTATE 45000
SET MESSAGE_TEXT = CONCAT('Flight ',NEW.flight_id,' is full');
//SELECT `Flight_is_full` FROM Error (use this in MySQL 5.1 and before to throw error)
END IF;
END $$
CREATE TRIGGER ai_booking_each AFTER INSERT ON booking FOR EACH ROW
BEGIN
UPDATE flight
SET available_seats = available_seats - 1
WHERE flight.id = NEW.flight_id;
END $$
CREATE TRIGGER bu_booking_each BEFORE UPDATE ON booking FOR EACH ROW
BEGIN
DECLARE SeatsAvailable INTEGER;
INSERT SUM(f.available_seats) INTO SeatsAvailable
FROM flight f
WHERE flight.id = NEW.flight_id;
IF SeatsAvailable = 0 THEN
//Signal throws an error (in MySQL 5.5+)
SIGNAL SQLSTATE 45000
SET MESSAGE_TEXT = CONCAT('Flight ',NEW.flight_id,' is full');
//SELECT `Flight_is_full` FROM Error (use this in MySQL 5.1 and before to throw error)
END IF;
END $$
CREATE TRIGGER au_booking_each AFTER UPDATE ON booking FOR EACH ROW
BEGIN
UPDATE flight
SET available_seats = available_seats + 1
WHERE flight.id = OLD.flight_id;
UPDATE flight
SET available_seats = available_seats - 1
WHERE flight.id = NEW.flight_id;
END $$
DELIMITER ;
简单的逻辑可以是:1. 用户预订了一个航班,因此您减少了该航班的免费场次,此时您可以将该航班的ID保存到PHP会话中。2. 当用户改变主意并预订另一个航班时,您可以轻松地通过该ID增加免费座位,减少新航班的免费座位,并存储该新航班ID而不是最后一个…
简单algorythm:<?php
session_start();
$_SESSION['booked_flight_id'] = 0;
// ...
// user wants to book a flight
$_SESSION['booked_flight_id'] = book_flight($flight_id); // lets assume that function book_flight($flight_id) decreases free seats and returns the flight ID
// ...
// user changes his mind
unbook_flight($_SESSION['booked_flight_id']); // assuming that method unbook_flight($flight_id) will increase free seats
$_SESSION['booked_flight_id'] = book_flight($new_flight_id);
这有帮助吗?