我有一個PHP應用程序,我想某些對象以下列方式堅持:在PHP中使用表單保持對象的最佳方式是什麼?
- 的對象不能在$ _SESSION存在。單獨的Web瀏覽器窗口必須控制對象的單獨實例。
- 最終用戶不能通過手動更改$ _REQUEST變量的內容來修改對象(如果發生這種情況,請將該請求視爲已損壞)。
是否有最佳做法/正確的方法來做到這一點?隨着PHP變得越來越面向對象,我擔心我正在重新發明輪子。
此代碼的宏偉目的是允許創建和操作複雜對象,而不必使用數據庫直到它們被提交,然後我將使用正確的事務將它們全部提交給數據庫。我想這樣做是爲了讓我的數據庫只包含完整的發票,或者根本沒有發票。
我目前的方法如下:
<?php
include('encrypt.php');
include('invoice.class.php');
if(isset($_REQUEST['invoice']))
{
$invoice = unserialize(decrypt(base64_decode($_REQUEST['invoice'])));
if(!($invoice instanceOf invoice)) throw new exception('Something bad happened');
}
else
{
// Some pages throw an exception if the $_REQUEST doesn't exist.
$invoice = new invoice();
}
if(isset($_REQUEST['action']) && $_REQUEST['action'] == 'addLine')
{
$invoice->addLine(new invoiceLine($_REQUEST['description'], $_REQUEST['qty'], $_REQUEST['unitprice']);
}
?>
<form action="index.php" method="post">
<input type="text" name="qty" />
...
<input type="hidden" name="invoice" value="<?php echo(base64_encode(encrypt(serialize($invoice)))); ?>" />
</form>
您的問題是什麼? – 2009-03-06 06:15:54
問題在標題中,但我已將它放入q的主體中。對於那個很抱歉。 – Martin 2009-03-06 06:21:31