从PHP中保存在$ _SESSION中的数组生成HTML表

时间:2016-03-20 20:19:27

标签: php html arrays

我有一个数组保存到一个会话(我知道这不是理想的,但它是我必须使用的),一个允许我添加"汽车"它,它会生成一个随机字符串来识别每辆单独的汽车。在用户填写表格之后,继续使用我用来保存汽车的内容:

    $car = new carModel;
    $car->setMake($_POST['make']);
    $car->setModel($_POST['model']);
    $car->setYear($_POST['year']);
    $car->save();

我使用的save()函数:

private $guid;  
public function __construct() {
  session_start();
  # get a random string and set it guid
  $this->guid = uniqid();
}
public function save() {
  # save the data passed to this into the session, use $guid as an identifier to look up later
  $_SESSION[$this->guid] = (array) $this;
}

所以在那之后,我得到了这个数组:

session array

我真的不知道该做什么本质上是向后做,并从$ _SESSION获取数据并制作一个表格,其值字段设置为每辆车的数据。我尝试过使用foreach几次,但我似乎无法做到正确。然后我也遇到了保存它的问题。我想我必须写一个新的保存功能,您怎么看?

1 个答案:

答案 0 :(得分:1)

您无法从会话中重新引用该GUID值,因为您不知道它是什么。但是您可以更改会话存储这些数组的方式,以便您可以更轻松地访问它们。

为了实现这一点,我们需要为我们的多维数组添加另一个索引。

$_SESSION['cars'][$this->guid]

现在我们在会话中有一个cars变量,它应该很容易循环遍历:

foreach($_SESSION['cars'] as $guid => $car){
    echo '<input type="text" name="cars['.$guid.'][\'carModelmake\']" value="'.$car['carModelmake'].'"/><br/>';
    echo '<input type="text" name="cars['.$guid.'][\'carModelmodel\']" value="'.$car['carModelmake'].'"/>';
    echo '<input type="text" name="cars['.$guid.'][\'carModelyear\']" value="'.$car['carModelmake'].'"/>';
}

这将从会话中的cars数组循环遍历每辆车,并为每个汽车品牌和型号制作一组输入字段。现在,我们可以在cars数组

中循环$_POST
foreach($_POST['cars'] as $guid => $car){
    $_SESSION['cars'][$guid]['carModelmake'] = $car['carModelmake'];
    $_SESSION['cars'][$guid]['carModelmodel'] = $car['carModelmodel'];
    $_SESSION['cars'][$guid]['carModelyear'] = $car['carModelyear'];
} 

注意上面我们实际上并没有使用你的类,需要修改它,因为它每次都会生成一个新的GUID,让我们看看我们如何解决这个问题:

public function __construct($guid = false){
    $this->guid = isset($guid) ? $guid : uniqid();
}

public function save(){
    //note we have another index of 'cars' here now
    $_SESSION['cars'][$this->guid] = (array) $this;
}

如果我们要创建一个新条目,这将允许我们将现有的guid传递给构造函数或生成一个新的guid。现在我们可以改变我们的帖子数据循环的外观:

foreach($_POST['cars'] as $guid => $car){
    $carModel = new carModel($guid);
    $carModel->setMake($car['carModelmake']);
    $carModel->setModel($car['carModelmodel']);
    $carModel->setYear($car['carModelyear']);

    $carModel->save();
} 

希望这会对你有所帮助。