我在爲我的電子商務相關網站的cms部分驗證並存儲用戶信息時遇到了一些麻煩。頁面PHP - 複選框輸入驗證 - 將複選框的狀態存儲爲會話變量?
部分包含了用戶的選項來選擇,如果需要,從他們的送貨地址不同的帳單地址。這是頁面上的兩種形式之一。
第一種形式是一個表,其中用戶,如果他們需要一個備用的帳單地址選擇。
在此基礎上選擇是生成的第二形式或者如果需要的話,或不包含帳單地址的附加空間。
這裏是與第一種形式的HTML把事情的來龍去脈:
<form name="isSameAsPostal" action="" method="post">
<table class="adminTable" align="center">
<thead class="tableAddEdit">
<tr>
<th colspan="4">Details</th>
<th colspan="1">Active</th>
</tr>
</thead>
<tfoot class="tableFooter">
<tr>
<td colspan="5">This table stores the users addittional information.</td>
</tr>
</tfoot>
<tbody>
<tr>
<td colspan="4">User has different billing address?</td>
'.$topCont.'
</tr>
</tbody>
</table>
</form>
正如你可以看到,自身不包含在表單中輸入的,它被作爲一個變量,它是在腳本控制器中設置。
這裏是PHP爲把事情的來龍去脈:
if (isset($_POST['sameAsPostal']) && $_POST['sameAsPostal'] == 1)
{
$_SESSION['sameAsPostal'] = 1;
$topCont = '<td colspan="1"> <input type="checkbox" name="sameAsPostal" id="sameAsPostal" value="0" checked="checked" onChange="javascript:document.isSameAsPostal.submit();" title="Tick if user has alternate billing information." /> </td>';
$otherCont = 'postal';
}
else if (isset($_POST['sameAsPostal']) && $_POST['sameAsPostal'] == 0)
{
$_SESSION['sameAsPostal'] = 0;
$topCont = '<td colspan="1"> <input type="checkbox" name="sameAsPostal" id="sameAsPostal" value="1" onChange="javascript:document.isSameAsPostal.submit();" title="Tick if user has alternate billing information." /> </td>';
$otherCont = 'postal and billing';
}
else
{
$_SESSION['sameAsPostal'] = 0;
$topCont = '<td colspan="1"> <input type="checkbox" name="sameAsPostal" id="sameAsPostal" value="1" onChange="javascript:document.isSameAsPostal.submit();" title="Tick if user has alternate billing information." /> </td>';
$otherCont = 'postal and billing';
}
正如你可以用這個看到,JavaScript是用作輸入的狀態改變爲自動提交表單。
現在,在此基礎上,幾乎都作爲正確我想到,當我最初開始這個工作。
根據控制器,勾選複選框,會話變量$sameAsPostal
設置爲'1',用於觸發在第二種形式內生成額外結算選項。
與此一起,複選框的值變爲'0',因此允許取消選擇複選框,並且在控制器的第二部分中看到$sameAsPostal
將被設置爲0時,第二種形式的賬單信息被移除腳本。包含控制器的最後一部分作爲要添加到頁面的第一個輸入實例。沒有它就不會有輸入。
太棒了,就像我說過的這一切都很有效。但是我現在面臨的問題伴隨着下一個邏輯上的補充。當第二個表單被驗證並且遇到輸入錯誤時,頁面會刷新並顯示正確的錯誤突出顯示。在此範圍內,複選框也會重置,導致帳單信息部分消失。 (用於填充各個輸入的信息仍然存儲,但它的實際的HTML消失的複選框已復位)
所以我想這除了控制器:
if (isset($_POST['sameAsPostal']) && $_POST['sameAsPostal'] == 1)
{
$_SESSION['sameAsPostal'] = 1;
$topCont = '<td colspan="1"> <input type="checkbox" name="sameAsPostal" id="sameAsPostal" value="0" checked="checked" onChange="javascript:document.isSameAsPostal.submit();" title="Tick if user has alternate billing information." /> </td>';
$otherCont = 'postal';
}
else if (isset($_POST['sameAsPostal']) && $_POST['sameAsPostal'] == 0)
{
$_SESSION['sameAsPostal'] = 0;
$topCont = '<td colspan="1"> <input type="checkbox" name="sameAsPostal" id="sameAsPostal" value="1" onChange="javascript:document.isSameAsPostal.submit();" title="Tick if user has alternate billing information." /> </td>';
$otherCont = 'postal and billing';
}
else if (isset($_SESSION['sameAsPostal']) && $_SESSION['sameAsPostal'] == 1)
{
$topCont = '<td colspan="1"> <input type="checkbox" name="sameAsPostal" id="sameAsPostal" value="0" checked="checked" onChange="javascript:document.isSameAsPostal.submit();" title="Tick if user has alternate billing information." /> </td>';
$otherCont = 'postal';
}
else if ((isset($_SESSION['sameAsPostal']) && $_SESSION['sameAsPostal'] == 1) && (isset($_POST['sameAsPostal']) && $_POST['sameAsPostal'] == 0))
{
$_SESSION['sameAsPostal'] = 0;
$topCont = '<td colspan="1"> <input type="checkbox" name="sameAsPostal" id="sameAsPostal" value="1" onChange="javascript:document.isSameAsPostal.submit();" title="Tick if user has alternate billing information." /> </td>';
$otherCont = 'postal and billing';
}
else
{
$_SESSION['sameAsPostal'] = 0;
$topCont = '<td colspan="1"> <input type="checkbox" name="sameAsPostal" id="sameAsPostal" value="1" onChange="javascript:document.isSameAsPostal.submit();" title="Tick if user has alternate billing information." /> </td>';
$otherCont = 'postal and billing';
}
而且很多別人說實話......但似乎我的邏輯和參與這項任務的實際邏輯似乎有所不同。
這除了控制器使複選框,如果無法檢查取消選中。
我加爲了趕狀態。如果複選框,然後首先正確輸入適用於第一種形式,其次,如果需要生成billng信息部分中的會話變量。
但似乎無論如何配置控制器腳本我似乎無法得到它的工作方式。
可以提供一些有關我的錯誤的信息或提出建議嗎?
在此先感謝您花時間閱讀此!
好的,謝謝你的回覆!您的代碼明確指出,如果會話變量存在並且值爲1,那麼...現在當會話變量設置爲1且用戶與帖子值交互時發生了什麼?我面對的問題是,我不知道如何結合到兩個。它或者或者根據你的代碼,如果會話變量被設置並且保持值爲1,則不管帖子變量是什麼都會觸發......或者應該將帖子相關代碼放在你的前面嗎? –
正在設置會話變量,我檢查了本地會話文件。它只是...我無法取消它,如果它被檢查。 –
當用戶提交表單時,重新分配從'$ _POST'中取出的值並將其存儲在'$ _SESSION'中,以便當它到達檢查它的行時,它具有最新值。 –