存储来自用户的多个回发之间的值


Store values between multiple post back from user

我的代码的想法是让用户选择航班,然后我减少(-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

或者您可以使用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);

这有帮助吗?