【问题标题】:enable user to start form the last saved page使用户能够从上次保存的页面开始
【发布时间】:2014-12-03 12:47:34
【问题描述】:

我有一个 5 页的 PHP 表单,我想让用户可以从他们上次保存的页面开始填写表单。 (数据应该每页保存到数据库中,如果由于任何原因用户无法完成所有页面,他将能够继续而不是再次重新填充所有页面)。这些是我正在尝试执行的步骤:

  1. 每页保存用户数据,所以当他点击页面末尾的“save&continue”按钮时,所有输入的数据都会保存在DB中(这部分没问题,我已经做了这一步)

  2. 当用户登录成功时,我检查数据库中的“答案”表,看看用户是否已经输入了一些数据(在每个页面中我都有一些强制性问题,所以我检查它们在数据库中是否为空,例如例如: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


【解决方案1】:

YESSSSSSSSS,我找到了:DD

问题:我检查了 page2.php 开头的第一页的值,如果它找到一个空字段(必填字段),它会重定向到 page1.php,这正是重点..(因为当用户已经填满第一页的人,如果第二次登录,他必须能够从第二页继续,但是这个检查扰乱了一切..

解决方案:所以,我只是在每页末尾使用了 jquery 验证插件.. 并删除了我在下一页开头的验证检查部分(例如,验证 q1-q7在 page1.php 的末尾并删除了 page2.php 开头的检查部分......所以,它不再重定向到 page1.php,现在用户可以从最后保存的页面继续:) (我希望我有类似问题的可以解释清楚)

【讨论】:

    【解决方案2】:

    在page1.php中你可以查看数据库中信息是否已经被用户填写,如果是,那么你可以将他重定向到page2.php。同理,在 page2、page3、page4.php 中

    【讨论】:

    • 我不确定我是否明白你的意思,但是当我检查 page1.php 以查看用户是否已插入数据时,如果用户已经填写了 page1 并关闭了选项卡,那么转到登录页面并单击登录,他将被重定向到一个白色的npage,并显示此错误“此网页有重定向循环”......你有什么想法吗?:|
    • 我认为问题与page2.php有关,因为在page2.php的开头,我检查第一页的值,如果找到任何空白字段(必需的),它会重定向到第一页...所以,当已经填写第一页的用户再次登录时,标题(位置:page2.php)将他重定向到page2.php,但这里的问题是page2.php开头的这个检查....,我不知道如何解决它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-27
    相关资源
    最近更新 更多