2016-06-11 57 views
0

我创建一个页面,用选择的形式,取决于选择的选项,将显示不同的信息。使用会话确认登录

在用户可以访问此页面,他们必须登录。我继续检查他们是否使用会话登录,否则我将用户重定向到登录名。如果$ _SESSION [“admin_username”]存在,那么它们在其他登录的情况还没有登录。

问题是试图在用户选择的选项之间去设置会话。所以我将会话设置为表单标记中的操作。我认为这只会设置会话,如果选择表单被使用,但会重置它选择表单是否使用。这破坏了登录检查。

有没有办法来解决这个问题?谢谢!

这里是我的代码:

<?php require_once("../Include/connection.php"); ?> 
<?php require_once("../Include/functions.php"); ?> 
<?php require_once("../Include/sessions.php"); ?> 



<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd"> 

<html lang="en"> 
<style type="text/css"> 
    div {position: relative; left: 300px} 
    </style> 


    <head> 
    <title>databaseConn</title> 
</head> 
<body> 
    <h2>Welcome, <?php echo (find_user_by_id($_GET["user"])["username"]); ?>!</h2> 
    <?php 
      if ($_SESSION["admin_username"]) { 
       echo "Logged in"; 
} else { 
redirect_to(login.php); } 

    <?php 

    if (isset($_POST["submit"])) { 
     switch ($_POST["future"]) { 
      case "At Graduation": 
       echo "At Graduation"; 
       break; 
      case "2 Years After Graduation": 
       echo "2 Years After Graduation"; 
       break; 
      case "5 Years After Graduation": 
       echo "5 Years After Graduation"; 
       break; 
      case "10 Years After Graduation": 
       echo "10 Years After Graduation"; 
       break; 
      case "20 Years After Graduation": 
       echo "20 Years After Graduation"; 
       break; 
      case "50 Years After Graduation": 
       echo "50 Years After Graduation"; 
       break; 
     } 
    } 



    echo admin_username(); 


    ?> 
    <a href="edit_account.php?username=<?php $current_user_id; ?>">edit page</a> 

      <form action="<?php $_SESSION["admin_username"] = (find_user_by_id($current_user_id)["username"]); ?>" action="main.php?user=<?php echo $current_user_id; ?>" method="post"> 
       <select name="future"> 
        <option value="At Graduation">At Graduation</option> 
        <option value="2 Years After Graduation">2 Years After Graduation 2</option> 
        <option value="5 Years After Graduation">5 Years After Graduation 2</option> 
        <option value="10 Years After Graduation">10 Years After Graduation 2</option> 
        <option value="20 Years After Graduation">20 Years After Graduation 2</option> 
        <option value="50 Years After Graduation">50 Years After Graduation 2</option> 
       </select> 
       <input type="submit" name="submit" value="submit"> 
      </form> 
    </body> 
</html> 

这里是admin_username功能我用。

function admin_username() { 
    if (isset($_SESSION["admin_username"])) { 
     $username = $_SESSION["admin_username"]; 
     $_SESSION["admin_username"] = null; 
     return $username; 
    } 
} 

回答

0
<form action="<?php $_SESSION["admin_username"] = (find_user_by_id($current_user_id)["username"]); ?>" action="main.php?user=<?php echo $current_user_id; ?>" method="post"> 

在此行中要设置$_SESSION['admin_username']到任何find_user_by_id($current_user_id)["username"]回报。这可能是你的代码中的错误。

而且您使用的是动作属性的两个时间。

我没有看到您的代码中admin_username()功能的任何使用。它何时被调用,它应该做什么?

+0

我用了两次来设置会话并刷新页面。这似乎采取了两项行动。它不应该? – zach

+0

通过执行$ _SESSION [“admin_username”] = null;该功能基本上取消了您的会话 – Philipp

+0

admin_username清除会话,以便用户可以访问该页面的唯一方式是登录。会话从登录页面开始。 – zach