0

わかった。私はplans.phpというページを持っており、その中に3つのリンク(Plan 1、Plan 2、Plan 3)があります。各リンクには独自のページがあり、ログイン ページ (正常に動作する login.php) にリダイレクトされます。そのため、ユーザーが「プラン 2」をクリックしたときにログインしていない場合、ユーザーは強制的にログインして、目的のページを表示できます。すべては、ユーザーが選択した「プラン」に依存します。

問題: ユーザーを「目的のプラン (URL)」にリダイレクトするのに苦労しています。

解決策: ユーザーが「プラン 1 またはプラン 2 (どのようなプランでも)」を選択すると、ユーザーはログインを強制されます (私はそれが正常に機能しています)。ユーザーが正常にログインした後、ユーザーはそれぞれの「プラン ページ」にリダイレクトされる必要があります。 .

この問題に精通している方がいらっしゃいましたら、助けてください。

プラン.php

<a href="plan-1.php">Plan 1</a>
<a href="plan-2.php">Plan 2</a>
<a href="plan-3.php">Plan 3</a> 

plan-2.php

<?php
 ob_start();
   include "header.php";

   if(!$current_user) { 
     require_login();
    }
 ob_end_flush();
?>

HTML コード: ログイン ページの後にユーザーに表示されるもの。

<p>Hello, you have been redirected to "Plan 2"</p>

login.php

<?php 
  ob_start();
    include "header.php";
    if($current_user) { 
       req_logout(); }
  ob_end_flush();
?>

HTML コード:

 <form action="authenticate.php" method="POST">
  <label for="email">Email</label><br/>
  <input type"text" class="input" name="username" id="username" />
  <label for="password">Password</label><br/>
  <input name="password" type="password" class="input" id="password"/>
  <input type="submit" value="Sign In" class="submit"/>
 </form>

このファイルは、ログイン フォームが送信されるユーザー資格情報を検証します。

認証.php

<?php
  session_start();
  require_once "db.php";
  db_connect();
  require_once "auth.php";

  $user_id = credentials_valid($_POST['username'], $_POST['password']); 
     if($user_id){
      log_in($user_id);

    if($_SESSION['redirect_to']){
          header("Location: " . $_SESSION['redirect_to']);
          unset($_SESSION['redirect_to']);

        }else{
         // Default page after user logs in.
          header("Location: manage.php");
    }
    }else{
       header("Location: login.php?error=1");
       exit("You are being redirected");
    }
?>

このファイルにはいくつかの PHP 関数があります。

auth.php

// Logs into the user $user
function log_in($user_id){
$_SESSION['user_id'] = $user_id;
}


// Returns the currently logged in user (if any)
function current_user(){
static $current_user;
if(!$current_user){
    if($_SESSION['user_id']){
        $user_id = intval($_SESSION['user_id']);
        $query = "SELECT *
                  FROM `********`
                  WHERE `id` = $user_id";

        $result = mysql_query($query);
        if(mysql_num_rows($result)){
            $current_user = mysql_fetch_assoc($result);
            return $current_user;
        }
    }
}
 return $current_user;   
}

// Requires a current user (Restrict Access to Page)
function require_login(){
if(!$current_user){
       $_SESSION['redirect_to'] = $_SERVER['REQUEST_URI'];
        header('Location: signin.php');
    exit("You must log in.");
}
}
4

2 に答える 2

0

ユーザーがプランのリンクをクリックしたときにパラメーターを送信してみてください。パラメータを渡すか保存し、ログインに成功したら、そのパラメータを使用して適切なページにリダイレクトします。

plan-2.php で

session_start();
$_SESSION['redirect_to']="plan-2.php";

編集:GETこれは、 and を介したパラメーター送信を使用した完全なソリューションですPOST(私が求められたように):

プラン.php

<a href="plan.php?no=3">Plan 1</a>
<a href="plan.php?no=3">Plan 2</a>
<a href="plan.php?no=3">Plan 3</a> 

plan.php

<?php
 ob_start();
   $getbackURLid=$_GET['no'];
   include "header.php";

   if(!$current_user) { 
     require_login($getbackURLid);
    }
 ob_end_flush();
?>

signin.php

<?php 
  ob_start();
    include "header.php";
    if($current_user) { 
       req_logout(); }
  ob_end_flush();
?>

HTML コード:

 <form action="authenticate.php" method="POST">
  <label for="email">Email</label><br/>
  <input type"text" class="input" name="username" id="username" />
  <label for="password">Password</label><br/>
  <input name="password" type="password" class="input" id="password"/>
  <input type"hidden" name="url" value="<?php echo $_GET['url'];?>" />
  <input type="submit" value="Sign In" class="submit"/>
 </form>

認証.php

<?php
  session_start();
  require_once "db.php";
  db_connect();
  require_once "auth.php";

  $user_id = credentials_valid($_POST['username'], $_POST['password']); 
     if($user_id){
      log_in($user_id);

    if($_POST['url']){
          header("Location: plan.php?no=".$_POST['url']);
          unset($_SESSION['redirect_to']);

        }else{
         // Default page after user logs in.
          header("Location: manage.php");
    }
    }else{
       header("Location: login.php?error=1");
       exit("You are being redirected");
    }
?>

auth.php

// Logs into the user $user
function log_in($user_id){
$_SESSION['user_id'] = $user_id;
}


// Returns the currently logged in user (if any)
function current_user(){
static $current_user;
if(!$current_user){
    if($_SESSION['user_id']){
        $user_id = intval($_SESSION['user_id']);
        $query = "SELECT *
                  FROM `********`
                  WHERE `id` = $user_id";

        $result = mysql_query($query);
        if(mysql_num_rows($result)){
            $current_user = mysql_fetch_assoc($result);
            return $current_user;
        }
    }
}
 return $current_user;   
}

// Requires a current user (Restrict Access to Page)
function require_login($getbackURLid){
if(!$current_user){
       $_SESSION['redirect_to'] = $_SERVER['REQUEST_URI'];
        header('Location: signin.php?url=$getbackURLid');
    exit("You must log in.");
}
}
于 2013-05-10T02:44:42.910 に答える