首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过OnClick返回具有新变量的开关语句?

如何通过OnClick返回具有新变量的开关语句?
EN

Stack Overflow用户
提问于 2015-12-02 17:36:56
回答 1查看 80关注 0票数 0

我在为俱乐部准备入学申请。我很难让用户从一个页面转到另一个页面。每个页面都是一个模块,通常是一个表单。它们可以在位置上不同,就像在用户中可以更改页面在入口中的位置一样。

这是我的数据库大致的样子。一个俱乐部可以有一个或更多的入口。摄入量由多个模块组成。数据库模型如下所示:

代码语言:javascript
复制
table: intake               
intake_id(P)   club_id
       12345     99999
       12346     99999
       12347     99998

table: intake_has_module
intake_id(P)   module_id   position
       12345           1          2
       12345           2          1
       12345           3          3
       12346           1          1
       12346           2          2
etc.

table: module
module_id(P)                   name
           1   Personal Information
           2   Terms and Conditions
           3          Subscriptions

(Dummy data)

这里我从相应的俱乐部得到了intake_id

代码语言:javascript
复制
$intake_sql = $db->sql_query('SELECT intake_id FROM fit_vg_intake WHERE club_id = ' . (int)User::currentUser()->getClubID());
$intake_sql_2 = $db->sql_fetchrow($intake_sql);

在这里,我从俱乐部的进料中得到了排在第一位的module_id

代码语言:javascript
复制
$module_sql = $db->sql_query('SELECT module_id FROM fit_vg_intake_has_module WHERE position = 1 AND intake_id = ' . $intake_sql_2['intake_id']);
$module_sql_2 = $db->sql_fetchrow($module_sql);

然后,我在一个类似于这样的开关中使用这个module_id:

代码语言:javascript
复制
switch ($module_sql_2['module_id']) {
case 1:
    generate_page('intake/personalinformation.twig');
    break;
case 2:
    generate_page('intake/termsandconditions.twig');
    break;
case 3:
    generate_page('intake/subscriptions.twig');
    break;
default:
    generate_page('intake/main.twig');
    break;
}

所以这部分对我来说是正确的。用户可以在设置面板中切换每个模块的位置。至于我的问题和问题:

假设用户在“条款和条件”模块上。即module_id 2和位置1。当他点击一个确认他已经接受了条款和条件的按钮时,他应该被移到有position+1 of module_id=2的模块。

我尝试过的是:我尝试在按钮中添加一个onClick。当单击javascript函数时,就会调用名称为next_module()的动作“接受-术语”。我将此操作传递给php文件,在该文件中我使用了另一个开关:

代码语言:javascript
复制
switch ($action) {
case 'accepted-terms':
    $position_sql = $db->sql_query('SELECT position FROM intake_has_module WHERE module_id = 2 AND intake_id = ' . $intake_sql_2['intake_id']);
    $position_sql_2 = $db->sql_fetchrow($position_sql);
    break;
default:
    break;
}

在这个开关中,如你所见,我用module_id=2得到模块的位置,它返回1,这是正确的。现在我可以得到module_id的位置为1+1,这是我已经走了这么远。基本上,我的问题是:当有人单击一个按钮时,如何返回使用新module_id的第一个开关?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-03 10:53:40

我通过使用处理程序数组并将这个位置添加到url的后面,例如/intake/1、/intake/2等来修复这个问题。

代码语言:javascript
复制
$handler_page = System::getHandlerArray()[0];
if($handler_page == null){
$handler_page = '1';
}

在这里,我检查用户是否在/intake。如果他是并因此而系统::getHandlerArray() == 0,我将第一个位置的1赋值给变量。

然后,为了在我的模板中使用这个变量,我执行以下操作:

代码语言:javascript
复制
$template->assign_var('position', (int)$handler_page + 1); 

我添加1是因为我希望将当前位置+1赋给这个变量,因为我将使用它来使用onClick将页面定向到下一个位置,如下所示:

代码语言:javascript
复制
<script>
function next_module() {
    window.location.href = ('/intake/' + {{ position }});
}
</script>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34049331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档