【发布时间】:2014-12-03 12:47:34
【问题描述】:
我有一个 5 页的 PHP 表单,我想让用户可以从他们上次保存的页面开始填写表单。 (数据应该每页保存到数据库中,如果由于任何原因用户无法完成所有页面,他将能够继续而不是再次重新填充所有页面)。这些是我正在尝试执行的步骤:
每页保存用户数据,所以当他点击页面末尾的“save&continue”按钮时,所有输入的数据都会保存在DB中(这部分没问题,我已经做了这一步)
-
当用户登录成功时,我检查数据库中的“答案”表,看看用户是否已经输入了一些数据(在每个页面中我都有一些强制性问题,所以我检查它们在数据库中是否为空,例如例如:page1 中的“q6”是必填字段,如果 DB 中的该字段(列 q6)不是“空”,则表示用户已经回答了第一页,他应该能够从第二页开始。然后我会检查下一页的另一个必填字段,例如q12,如果表格中的“q12”列不为空,则表示用户也回答了第二页,他可以从第三页开始,以此类推...
这里是部分代码:(为了使代码更短,我只是复制了条件来检查用户是否回答了第一页,我省略了其他条件来检查下一页中的空字段)
// If username& password found in DB, LOGIN SUCCESSFUL
$_SESSION['SESS_MEMBER_ID'] = $result->mem_id;
$_SESSION['SESS_USERNAME'] = $result->username;
$_SESSION['SESS_LAST_NAME'] = $result->password;
$result = $conn->prepare('SELECT * FROM answer where username = :username');
$result->execute(array(':username' => $username));
$row = $result->fetch(PDO::FETCH_OBJ);
if(empty($row->q6)){ //if user didn't answer q6 (which is required to submit the first page and go to 2nd page
try{
$stmt2 = $conn->prepare('INSERT INTO answer(username) VALUES(:username)');
$stmt2->execute(array(':username' => $username));
}catch(PDOException $e) {
echo 'Error: ' . $e->getMessage();
}
header("location: home.php"); //homepage where user can click on the link to start filling the form in page1.php
exit();
}else{ //If q6 had already an answer in database, it means that user filled and saved the first page before, so he should be able to continue form the second page
header("location: page2.php");
exit();
}
}else {
//Login failed
$errmsg_arr[] = 'user name and password not found';
$errflag = true;
if($errflag) {
$_SESSION['ERRMSG_ARR'] = $errmsg_arr;
header("location: index.php");
/* exit();*/
}
}
问题:
它非常适合第一次填写表格的用户(他的用户名在他登录时输入到表格“答案”中,他将被重定向到 home.php 在那里他可以找到开始填写表格的链接表单(page1.php),但问题是,例如,如果他填写第一页,单击“保存并继续”,他将被重定向到第二页,如果他退出表单(例如,如果他不小心关闭了窗口),并且再次登录,他被重定向到 page1.php 而不是 page2.php
有人可以帮我看看这段代码有什么问题吗?
谢谢,
【问题讨论】:
-
q6是第一页的最后一个问题吗?
-
@EternalHour: 不,但这是最后一个必填问题,q7 是 page1 中的最后一个问题,但它不是强制性的,因此在用户填写并保存第一页时它可能为空... :)
标签: php mysql forms pdo multipage