2016-05-30 5 views
1

Я создал форму PHP на muilti-странице, которая вставляет результаты в базу данных MySQl и отлично работает, единственная проблема, с которой я сталкиваюсь, когда я пытаюсь вернуться, я получаю «Подтвердить» Ошибка страницы Resubmission''ERR_CACHE_MISS.Многостраничная PHP-форма С проблемой кнопки Back

Php не мой самый сильный язык и нуждается в некоторой помощи с его фиксацией.

сво 20 страница опроса с каждой страницы, имеющие радиокнопок с выбором от 1 до 10.

образец моего кода ниже, любой совет, было бы здорово.

Приветствия

<?php session_start(); 
$_SESSION['answer_04'] = $_POST['answer_04']; 
?> 

<form action="peem-05.php" id="peem" method="post"> 

<ul class="answers"> 
    <li class="group1"><input type="radio" id="radio1" name="answer_05" value="1" data-msg-required="Please choose an answer bewteen 1 and 10" required><label for="radio1"><br>1</label></li> 
    <li class="group1"><input type="radio" id="radio2" name="answer_05" value="2" required><label for="radio2"><br>2</label></li> 
    <li class="group2"><input type="radio" id="radio3" name="answer_05" value="3" required><label for="radio3"><br>3</label></li> 
    <li class="group2"><input type="radio" id="radio4" name="answer_05" value="4" required><label for="radio4"><br>4</label></li> 
    <li class="group3"><input type="radio" id="radio5" name="answer_05" value="5" required><label for="radio5"><br>5</label></li> 
    <li class="group3"><input type="radio" id="radio6" name="answer_05" value="6" required><label for="radio6"><br>6</label></li> 
    <li class="group4"><input type="radio" id="radio7" name="answer_05" value="7" required><label for="radio7"><br>7</label></li> 
    <li class="group4"><input type="radio" id="radio8" name="answer_05" value="8" required><label for="radio8"><br>8</label></li> 
    <li class="group5"><input type="radio" id="radio9" name="answer_05" value="9" required><label for="radio9"><br>9</label></li> 
    <li class="group5"><input type="radio" id="radio10" name="answer_05" value="10" required><label for="radio10"><br>10</label></li> 
</ul> 


<a href="javascript:history.back(1)"><img class="backButton" src="img/back-button.png"/></a> 

<button class="rightArrow" name="submit" type="submit" value="Next" ><img class="backButton" src="img/next-button.png"/></button> 
</form> 
+1

Не используйте историю, чтобы вернуться. Лучше сохраните всю информацию в сеансе и используйте UID для идентификации формы. Возврат означает повторное посещение одной и той же страницы вместо возврата в историю браузера. Я думаю, что браузер может удалить кеш страницы формы после отправки формы. – Justinas

+0

Привет, Юстинас, спасибо за ответ. Я не думаю, что вы могли бы указать мне в сторону правильного кода для использования? – Phil

+1

Возможный дубликат [вернуться назад с отправкой формы PHP] (http://stackoverflow.com/questions/19215637/navigate-back-with-php-form-submission) – Netham

ответ

0

Вместо использования javascript:history.back(1) лучше сохранить данные на PHP сессии и вернуться означает повторно посетить ту же страницу.

[save.php] 

$step = $_POST['formStep']; 
$formData = $_POST['Form'][$step]; // all values from form 
$formID = $_POST['formID']; // validate 

if ($formData && $step) { 
    if ($step < $maxSteps) { 
     $_SESSION[$formID][$step] = $formData; 

     $this->showStep($step++); 
    } else { 
     $this->db->saveForm($_SESSION[$formID]); 
    } 
} 

[showStep.php] 

$step = isset($_REQUEST['step']) ? $_REQUEST['step'] : 1; 
$formID = isset($_SESSION['formID']) ? $_SESSION['formID'] : rand(0, 99); 
$formData = isset($_SESSION[$formID][$step]) ? $_SESSION[$formID][$step] : []; 
?> 
<form action="save.php?step=<?= $step; ?>"> 
    <input type="hidden" value="<?= $formID; ?>" name="formID"/> 
    <?php switch ($step): ?> 
<?php case 1: ?> 
     <input type="radio" id="radio10" name="Form[<?= $formID; ?>][<?= $step; ?>][answer_05]" value="10" <?= isset($formData['answer_05']) ? 'checked="checked"' : ''; ?>/> 
<?php case 20: ?> 
     ... 
<?php break; ?> 
</form> 
<a href="showStep.php?step=<?= $step - 1; ?>">Back</a> 
0

Обратите внимание, что вы должны переименовать файлы peem-x.php удаления нуля, чтобы сделать этот код работать. Я прокомментировал свои изменения, может быть, это поможет вам.

<?php 
session_start(); 

$page = basename(__FILE__); // get current filename 
$page = preg_replace("/[^0-9]/","",$page); // remove everything except numbers 
$page_last = "peem-".($page-1).""; // calculate last page name 
$page_now = "peem-".$page.""; // current page name 

for ($i = 0; $i < count($_POST['answer']); $i++) { // loop for total count of answers selected 
    $_SESSION['page'.$page_now.'']['answer'.$i.''] = $_POST['answer'.$i.'']; // assign session to answer 
} 
?> 

<form action="" id="peem" method="post"> 

    <ul class="answers"> 
     <li>Please choose an answer between 1 and 10</li> 
     <?php 
     for ($i = 1; $i < 10; $i++) { 
      // check every loop if it's the current page and current answer that has been checked before 
      // if so, set a variable to mark it as checked 
      if ($_SESSION['page'] == $page_now && $_SESSION['page']['answer'.$i.''] == 'page'.$page_now.'answer'.$i.'') 
      { 
       $checked = " checked"; // create var to check current answer in loop 
      } 

      echo '<li class="group1"><input type="radio" id="radio1" name="answer' . $i . '" value="1"'.$checked.'><label for="radio' . $i . '"><br>' . $i . '</label></li>'; 
      unset($checked); // unset $checked var for next loop to avoid checking unchecked radio buttons 
     } 
     ?> 
    </ul> 


    <a href="-<?php echo $page_last; ?>.php"><img class="backButton" src="img/back-button.png"/></a> 

    <button class="rightArrow" name="submit" type="submit" value="Next" ><img class="backButton" src="img/next-button.png"/></button> 
</form> 

<?php 
// test session and post variables 
echo "<pre>"; 
print_r($_POST); 
print_r($_SESSION); 
echo "</pre>"; 
?> 
+0

Привет Vaia, спасибо за обновление кода, но когда я вернусь страница Я не получаю сообщение об ошибке, но выбранный переключатель не проверен. Есть идеи? – Phil

+0

Это потому, что вы можете получить данные из последней формы $ _POST данных, которые были отправлены (следующая кнопка). Поэтому вам нужно проверить переменные $ _SESSION, где вы сохранили все ответы для этой конкретной страницы, и отметьте каждый проверенный ответ, который находится в переменной. В этом случае я также сохраню текущую страницу, на которой вы сейчас находитесь в переменной, а также ответы, которые были проверены. Можете ли вы следовать за мной и попробовать самостоятельно или вам нужна помощь? – AlexioVay

+0

О, ок, спасибо, извините, что знание PHP не очень велико. Я дам ему попытку в ближайшее время и дам вам знать, как я пойду. Cheers – Phil

Смежные вопросы