我在为我的电子商务相关网站的 cms 部分构建一个验证和存储用户信息的页面时遇到了一些麻烦。
该页面的一部分包含一个选项,供用户选择是否需要与其送货地址不同的帐单地址。这是页面上的两种形式之一。
第一个表格是用户在需要备用帐单地址时选择的表格。
根据该选择,生成第二个表单,如果需要,则包含用于帐单地址的附加空间,或者不包含。
这是与第一种形式相关的 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';
}
老实说,还有很多其他人......但似乎我的逻辑和这项任务所涉及的实际逻辑似乎有所不同。
对控制器的此添加使复选框在选中时无法取消选中。
我添加了会话变量以捕获复选框的状态,然后首先将正确的输入应用于第一个表单,然后在需要时生成账单信息部分。
但似乎无论我如何配置控制器脚本,我似乎都无法让它以这种方式工作。
可以提供一些有关我在哪里出错的信息或提出建议吗?
提前感谢您抽出宝贵时间阅读本文!!