сохранить данные ввода пользователя в многостраничной форме php

У меня есть многостраничная форма в PHP. Я также создал страницу входа, на которой имя пользователя и пароль хранятся в сеансе (я использовал это руководство). Теперь я немного смущен этими вещами:

  1. Я хотел бы, чтобы пользователь мог заполнить форму из последнего сохраненного сеанса (например, в случае сбоя компьютера или браузера, сбоя подключения к Интернету и т. д. он не будет перезаписывать все данные, которые он ранее вставил).

  2. Кроме того, я не уверен, как хранить данные, вставленные каждым пользователем в таблицу Mysql. Это нормально, если я просто вставлю все ответы пользователей в одну таблицу (скажем, «Ответы») с этими полями: Unique_Id, UserId, вопрос 1, вопрос 2, ...)? Или может быть лучше вставлять данные из каждой таблицы в отдельную таблицу с таким же оформлением, например, таблица 1: (userId, q1, q2,.., q5), таблица 2: (userId, q6,q7, ..q10) и так далее.

Это код одной из страниц формы (Page2, остальные страницы аналогичны)

<?php
session_start();

 // Checking first page values for empty,If it finds any blank field then redirected to first page.
 if (isset($_POST['submit1'])){
 if (empty($_POST['q1'])
 || empty($_POST['q2'])
 || empty($_POST['q5'])
 || empty($_POST['q6'])){

 // Setting error message
  $_SESSION['error'] = "Mandatory field(s) are missing, Please fill it again";
  header("location: page1.php"); // Redirecting to first page 
  } else {

   foreach ($_POST as $key => $value) {
       if (is_array($_POST[$key])){
            $_SESSION['post'][$key] = implode(',', $_POST[$key]);
         }
       else{
            $_SESSION['post'][$key] = $value;
        }
   }
  }
  } else {
  if (empty($_SESSION['error_page2'])) {
  header("location: page1.php");// Redirecting to first page.
  }
 }
?> 

<html>
<head>
<link type="text/css" rel="stylesheet" href="style.css" media=screen>

<style>
.error {
 color: #FF0000;

 }
</style>

</head>

<body>
 <div id="show">   

<span id="error">
<!---Initializing Session for errors-->
<?php
if (!empty($_SESSION['error_page2'])) {
 echo $_SESSION['error_page2'];
 unset($_SESSION['error_page2']);
 }
 ?>
 </span>

 <form id="form2" action="page3.php" method="post">

<div class="meter"><span style="width: 40%">Step 2</span></div>
<fieldset id = "Form_Questions"> 
<fieldset id = "q8"> <legend class="Q8"></legend>
<label class="question"> What are your favourite genres of movies?<span>*</span></label>
<div class="fieldset content"> 

<style type="text/css">
.checkbox-grid li {
display: block;
float: left;
width: 25%;
margin-bottom:5px; 
}     
</style>

<title>Survey Form</title>
 <meta http-equiv="content-Type" content="text/html: charset=UTF-8" /
 <ul class="checkbox-grid">
<li><input type="checkbox" name="q8[]" value="Action"><label for="checkgenre[]">Action</label><span></span></li>
<li><input type="checkbox" name="q8[]" value="Adventure"><label for="checkgenre[]">Adventure</label></li>
<li><input type="checkbox" name="q8[]" value="Comedy"><label for="checkgenre[]">Comedy</label></li>
<li><input type="checkbox" name="q8[]" value="Animation"><label for="checkgenre[]">Animation</label></li>
<li><input type="checkbox" name="q8[]" value="Drama"><label for="checkgenre[]">Drama</label></li> 

 </ul>
</div>
</fieldset>
 //REST OF QUESTIONS
  .....
   ....
<input class="mainForm" type="submit" name="continue" value="Save and Continue" />  

</form>

person mOna    schedule 03.10.2014    source источник


Ответы (1)


Если вы хотите получить ответы на вопрос из предыдущего визита, то это будет просто случай выполнения запроса SELECT в базе данных, чтобы определить, что они ввели, или оставить пустым, если они не ввели ответ раньше.

Невозможно точно понять, что вы имеете в виду, сохраняя все в сеансе, но вам может быть лучше хранить ответы в файлах cookie, если вы хотите сохранить все ответы за один раз в конце.

Чтобы сделать вашу веб-страницу динамичной, вы можете хранить все вопросы и ответы в базе данных. Вы можете использовать макет, например...

Table name: 'Questions'
  ID               int (autonumber)
  Question         text

Table name: 'Answers'
  ID               int (autonumber)
  QuestionID       int
  Answer           varchar(250)

Table name: 'UsersAnswers'
  ID               int (autonumber)
  UserID           int
  AnswerID         int

(предполагается, что на все ваши вопросы будут ответы с несколькими вариантами ответов)

Это позволит вам добавить столько вопросов, сколько вам нужно, без необходимости добавлять дополнительные столбцы в таблицы.

Изменить...

Если вам нужны динамические ответы, вы можете просто сохранить ответы в таблице, например...

Table name: 'UsersAnswers'
  ID               int (autonumber)
  UserID           int
  QuestionID       int
  Answer           string

Эта таблица позволит вам сохранить ответ на вопрос, на который ответил пользователь.

person Simon    schedule 03.10.2014
comment
Спасибо за ваш ответ, но, как вы сказали, это предполагает, что все вопросы имеют множественный выбор ... но у меня есть некоторые вопросы, которые являются текстовыми (автозаполнение) или раскрывающимися списками стран ... Есть ли у вас какие-либо идеи о том, как хранить эти ответы в таблица ответов??? - person mOna; 04.10.2014