eコマース関連のウェブサイトのcmsセクションのユーザー情報を検証して保存するページを作成するのに問題があります。
ページの一部には、ユーザーが配送先住所とは異なる請求先住所が必要かどうかを選択するためのオプションが含まれています。これは、ページ上の2つのフォームの1つです。
最初のフォームは、ユーザーが別の請求先住所が必要かどうかを選択するテーブルです。
この選択に基づいて、必要に応じて請求先住所用の追加スペースを含むかどうかにかかわらず、2番目のフォームが生成されます。
これは、物事をコンテキストに入れる最初のフォームに関連する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」に設定されます。これは、2番目のフォーム内で追加の請求オプションの生成をトリガーするために使用されます。
これに伴い、チェックボックスの値は「0」になり、チェックボックスの選択を解除できるようになり$sameAsPostal
、コントローラースクリプトの2番目の部分に示されているように、2番目のフォームの請求情報が0に設定されるように削除されます。コントローラの最後の部分は、ページに追加される入力の最初のインスタンスとして含まれています。それがなければ、入力はありません。
とても素晴らしいです、そして私が言ったようにこれはすべてうまくいきます。しかし、私が今直面している問題は、これに対する次の論理的な追加にあります。2番目のフォームが検証され、入力エラーが発生すると、正しいエラーの強調表示が適用されてページが更新されます。この中で、チェックボックスもリセットされ、請求情報セクションが非表示になります。(個々の入力に入力される情報は引き続き保存されますが、チェックボックスがリセットされたため、実際の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';
}
そして正直に言うと他にもたくさんあります...しかし、私の論理とこのタスクに関係する実際の論理は異なっているようです。
このコントローラーへの追加により、チェックボックスがオンになっている場合はオフにできなくなります。
チェックボックスの状態をキャッチするためにセッション変数を追加し、次に最初に正しい入力を最初のフォームに適用し、次に必要に応じて請求情報セクションを生成します。
しかし、コントローラースクリプトをどのように構成しても、そのように機能させることはできないようです。
私がこれでどこが間違っているのかに関する情報を提供したり、提案したりできますか?
よろしくお願いします!!