我有一个数组保存到一个会话(我知道这不是理想的,但它是我必须使用的),一个允许我添加"汽车"它,它会生成一个随机字符串来识别每辆单独的汽车。在用户填写表格之后,继续使用我用来保存汽车的内容:
$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获取数据并制作一个表格,其值字段设置为每辆车的数据。我尝试过使用foreach几次,但我似乎无法做到正确。然后我也遇到了保存它的问题。我想我必须写一个新的保存功能,您怎么看?
答案 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();
}
希望这会对你有所帮助。