調査用の基本的なフォームがあります (ラジオ ボタンといくつかの非表示フィールドが含まれています)。フォームは、現在のページの回答を保存する別の PHP ファイルに送信され、次に調査にリダイレクトされます (GET を介して次のページを渡します)。これは、ヘッダー リダイレクトを使用して実現されます。
散発的に、さまざまなユーザーが回答を保存しようとしているときにエラーが表示されます。これは、$_POST が空であるためです。失敗した各リクエストは、ページが POST ではなく GET でリクエストされたことを示しており、$_REQUEST 変数は一部の Cookie/セッション データを保存して空になっています。
私は次に何を探すべきか途方に暮れています。何か案は?
更新:私のデータベースは、回答が保存されたことを示しており、フォームの投稿後、ページが GET で再度ヒットされ、(前のページにリダイレクトされるのではなく) 失敗します。
編集:
コードの一部を次に示します。フォームページからの Javascript:
function nextPage(page,question_count)
{
if (checkForm(question_count))
{
btn = document.getElementById('nextbutton');
btn.disabled = true;
gotoPage(page);
}
}
function prevPage(page)
{
btn = document.getElementById('prevbutton');
btn.disabled = true;
gotoPage(page)
}
function completeSurvey(question_count)
{
if (checkForm(question_count))
{
frm = document.surveynav;
frm.action = 'act_complete_survey.php';
frm.submit();
return true;
}
}
function gotoPage(page)
{
action = document.getElementById('gotopage');
action.value = page;
document.surveynav.submit();
return true;
}
function checkForm(question_count)
{
frm = document.surveynav;
answer_count = 0;
for (var i = 0; i < frm.elements.length; i++)
{
if ((frm.elements[i].name.indexOf('q_') > -1) && frm.elements[i].checked)
{
answer_count++;
}
}
if (answer_count < question_count)
{
alert('Please answer all questions on this page before proceeding.');
return false;
}
return true;
}
function openSurveyWin()
{
window.open("survey.php", "surveywin", "location=0, toolbar=0, directories=0, status=0, menubar=0, scrollbars=0, resizable=0, fullscreen=0")
}
フォームからの HTML:
<form action="act_savestate.php" name="surveynav" id="surveynav" method="post">
<input type="hidden" name="gotopage" id="gotopage" value="" />
<div class="question_holder"><div class="question">1 . Some question text here.</div><div><div style="padding-left:15px;"><input type="radio" name="q_1" value="1" id="a_1" /><label for="a_1">Strongly Disagree</label><br />
<input type="radio" name="q_1" value="2" id="a_2" /><label for="a_2">Disagree</label><br />
<input type="radio" name="q_1" value="3" id="a_3" /><label for="a_3">Neither Agree nor Disagree</label><br />
<input type="radio" name="q_1" value="4" id="a_4" /><label for="a_4">Agree</label><br />
<input type="radio" name="q_1" value="5" id="a_5" /><label for="a_5">Strongly Agree</label><br />
</div></div></div>
<input type="hidden" name="questions" id="questions" value="1,10,19,28,37,46,55,64,73,2,11,20,29,38,47,56,65,74,3,12" />
<input type="button" id="nextbutton" name="nextbutton" value="Next >>" onclick="nextPage(2,20);" />
</form>
act_savestate.php のコード:
$gotopage = isset($_POST['gotopage']) ? (int)$_POST['gotopage'] : 1;
if (!isset($_POST['questions'])) {
// No post
die("No questions included");
}
$questions = explode(',',$_POST['questions']);
foreach($questions as $questionid)
{
if (isset($_POST['q_' . $questionid]))
{
$survey->setAnswer($survey_id,$questionid,$_POST['q_' . $questionid]);
}
}
header("Location: survey.php?page=$gotopage");
die();