2011-02-02 25 views
16

私はログインページを含むウェブサイトを構築しています。ログインに成功したらユーザーをプロフィールページにリダイレクトする必要がありますが、PHPでこれを行う方法はわかりません(これは私の最初のサイトです)。PHPを使用して別のページにリダイレクトする方法

私はインターネットを検索し、header()関数がトリックを行うべきだと言われましたが、使用する前に情報を出力しなかった場合にのみ機能します。

これは問題です。私は、(ログインページ自体を構築するためのHTMLを含む)たくさんの情報を出力しました。では、ユーザーをあるページから次のページにリダイレクトするにはどうすればよいですか?

どのようなオプションがありますか?また、これらの場合のベストプラクティスは何ですか?

ありがとうございます!

編集:ここではあなたは自分のsetcookie呼び出した後、それを呼び出し、ログインのためにクッキーを使用していると仮定すると、私の全体のlogin.phpページ

<?php 

session_start(); 

echo "<!DOCTYPE html> 
    <html> 
    <head> 
     <meta charset='utf-8'> 
     <title>Sprout</title> 
    <link rel='stylesheet' href='stylesheet.css' type='text/css'> 
    </head> 
<body> 
    <div class='box'> 
    <form action='login.php' method='post'> 
     Name<br /> <input type='text' name='username' class='form'/><br /> 
     Password<br /> <input type='password' name='password' class='form'/> 
     <input type='submit' value='Login' class='button' /> 
    </form> 
    </div> 
</body> 
    </html>"; 

if ($_SERVER['REQUEST_METHOD'] == 'POST') 
{ 
    $username = $_POST["username"]; 
    $password = $_POST["password"]; 

    $dbhost = "localhost"; 
    $dbuser = "root"; 
    $dbpass = "root"; 

    $conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ("Error connecting to database"); 

    $dbname = "database"; 

    mysql_select_db($dbname); 

    $query = "SELECT username FROM users WHERE username = '$username' AND password = '$password'"; 

    $result = mysql_query($query) or die ("Failed Query of " . $query); 


    while($row = mysql_fetch_assoc($result)) 
    { 
      $_SESSION["user"] = $username; 
    } 
} 
?> 
+0

ここで少し混乱していますが、基本的にヘッダー機能はあなたの探しているものですが、ここでは間違っていると思いますので、htmlページはログインページです。あなたがサブミットをクリックするか、ログインしたとき、何が起こったか、どこに行くのですか? – mcbeav

+0

あなたのログインスクリプトにヘッダ機能が残っているはずです。いくつかのコードや詳細をあきらめて、もっと手伝ってください。 – mcbeav

+0

btw、ログインするスクリプトを作成しましたか、あらかじめ作成したものを使用していますか?大事です。 – mcbeav

答えて

12

はとにかく、一般的に、あなたは、出力のものを、スクリプトの先頭にフォームの送信ボタン名の存在をチェックロジックを行い、そして可能性があります。私は、(ログインページ自体を構築するためのHTMLを含む)たくさんの情報を出力しました。では、ユーザーをあるページから次のページにリダイレクトするにはどうすればよいですか?

これは、アプリケーションの設計がかなり壊れていることを意味します。ビジネスロジックの実行中に出力を行うべきではありません。テンプレートエンジン(Smartyなど)を使用するか、output bufferingを使用してクイックフィックスします。 (!ではないが、良いもの)

別のオプションは、リダイレクトするためにJavaScriptを出力することになります。

<script type="text/javascript">location.href = 'newurl';</script> 
+0

私が行ったことは、すべてのHTMLを出力してログインページを作成し、その後ロジックが実行されます。これは、ユーザー名とパスワードのフィールドで作成したフォームです。ユーザーはそれを入力してログインをクリックします。同じlogin.phpファイルへのポストバックがあります。ここでは、ユーザーが実際にログインしているかどうかを確認するロジックを実行します。それらをプロファイルにリダイレクトします。これがどのように構造化されるべきでない場合は、ベストプラクティスは何ですか? – jasonaburton

+0

ここにいくつかの擬似コードがあります:if(フォームが送信されました){データを処理してリダイレクト+成功した場合は終了}フォームを表示します。提出されている場合は、提出された値を入力してください – ThiefMaster

+0

どのようにリダイレクトしますか?フォームは同じページにエコーされているので、私はheader()を使うことができません – jasonaburton

2

だ - 結局、あなたが呼び出しされている必要があり、1つのいずれかの前に出力あまりにも。問題です

if(isset($_POST['mySubmit'])) { 
    // the form was submitted 

    // ... 
    // perform your logic 

    // redirect if login was successful 
    header('Location: /somewhere'); 
} 

// output your stuff here 
2

あなたが任意の出力を送信する前に、ob_start();を使用することができます。これにより、スクリプトの実行が終了するまですべての出力をバッファに保存するようにPHPに指示します。これにより、ヘッダを変更することができます。

通常、出力バッファリングは使用しません。単純なプロジェクトでは、スクリプトの最初の部分にすべてのロジックを保存してから、すべて出力します。HTML。ちょうどあなたがセッション変数

while($row = mysql_fetch_assoc($result)) 
    { 
      $_SESSION["user"] = $username; 
    } 
header('Location: /profile.php'); 
+1

ThiefMasterによると、プロセスの非常に遅い(実際に必要な場合のみ)まで何も出力しないことが最善ですが、すべてのヘッダーが出力される前に実際に何も送信されないように出力バッファリングは依然として有効です。 'ob_clean()'/'ob_end_clean()'を使って出力を生成しているときに、後で何らかの問題を発見した場合でも、すべての出力バッファの内容を破棄することもできます。 – Archimedix

+0

出力バッファリングは私の2番目の試みになるだろうが、それは考え出されている。それにもかかわらず、助けてくれてありがとう! – jasonaburton

0

"を出力前に出力します。

ログインが有効な場合は、「ヘッダー」機能を使用してリダイレクトします。

"ob_start()"を使用しても、結果として出力される単一の空白が見つからないことがあります。しかし、エラーログには次のようなステートメントが表示されます。

<?php 
ob_start(); 
if (FORMPOST) { 
    if (POSTED_DATA_VALID) { 
     header("Location: https://www.yoursite.com/profile/"); 
     ob_end_flush(); 
     exit; 
    } 
} 
/** YOUR LOGINBOX OUTPUT, ERROR MESSAGES ... **/ 
ob_end_flush(); 
?> 
+0

これはうまくいきます。クエリが実行された場合にのみリダイレクトする必要があります。 – mcbeav

+0

何も撮影されていません。私はこれで新しいです。それは私のための学習経験です。 – jasonaburton

+0

セッションの後に置いてみましたが、ページ(HTML)に何かが出力された後にヘッダ機能が動作しません。 – jasonaburton

1

を設定した後、最も簡単な方法は、あなたのスクリプトが上に」フォーム投稿ログインデータを検証することで、ヘッダ機能をスティック、(悪気または何でも)、確保しないではないが

0
クリックボタンアクションで

if(isset($_POST['save_btn'])) 
    { 
     //write some of your code here, if necessary 
     echo'<script> window.location="B.php"; </script> '; 
    } 
14

あなたが同様の機能を使用できます。

function redirect($url) { 
    ob_start(); 
    header('Location: '.$url); 
    ob_end_flush(); 
    die(); 
} 

注目に値するが、あなたは常にあなたのheader('location: ...');の先頭にob_flush()またはob_start()のいずれかを使用する必要がありますさらにコードexを防ぐためには、常にdie()またはexit()関数を使用してくださいエコーション。

ここでは他の回答のいずれよりもより詳細なガイドでは言及しています:http://www.exchangecore.com/blog/how-redirect-using-php/

をこのガイドでは、あなたのリダイレクトにdie()/exit()の機能を使用する理由が含まれ、同様にob_start()ob_flush()を使用するとき、およびいくつかの潜在的な他の人が答えたエラーは、この時点では消えてしまっています。

+1

コンテキストによって更新されました。 –

0
firstly create index.php page and just copy paste below code :- 

<form name="frmUser" class="well login-form" id="form" method="post" action="login_check.php" onSubmit="return FormValidation()"> 
    <legend> 
     <icon class="icon-circles"></icon>Restricted Area<icon class="icon-circles-reverse"></icon> 
    </legend> 
    <div class="control-group"> 
     <label class="control-label" for="inputPassword">Username</label> 
     <div class="controls"> 
      <div class="input-prepend"> 
       <span class="add-on"><icon class="icon-user icon-cream"></icon> </span> 
       <input class="input" type="text" name="username" id="username" placeholder="Username" /> 
      </div> 
     </div> 
    </div> 
    <div class="control-group"> 
     <label class="control-label" for="inputPassword">Password</label> 
     <div class="controls"> 
      <div class="input-prepend"> 
       <span class="add-on"><icon class="icon-password icon-cream"></icon> 
       </span> <input class="input" type="password" name="password" id="password" value="" placeholder="Password" /> 
      </div> 
     </div> 
    </div> 
    <div class="control-group signin"> 
     <div class="controls "> 
      <input type="submit" class="btn btn-block" value="Submit" /> 
      <div class="clearfix"> 
       <span class="icon-forgot"></span><a href="#">forgot password</a> 
      </div> 
     </div> 
    </div> 
</form> 



/*------------------after that ----------------------*/ 

create a login_check.php and just copy paste this below code :- 

<?php 
session_start(); 
include('conn.php'); 

<?php 
/* Redirect browser */ 
header("location:index.php"); 

/* Make sure that code below does not get executed when we redirect. */ 
exit; 
?> 


<?php 

if(count($_POST)>0) 
{ 

    $result = mysql_query("SELECT * FROM admin WHERE username='".$_POST["username"]."' and password = '".$_POST["password"]."'"); 
    $row = mysql_fetch_array($result); 

if(is_array($row)) 
{ 
    $_SESSION["user_id"] = $row[user_id]; 
    $_SESSION["username"] = $row[username]; 

    $session_register["user_id"] = $row[user_id]; 
    $session_register["username"] = $row[username]; 
} 
else 
{ 
    $_SESSION['msg']="Invalid Username or Password"; 
    header("location:index.php"); 
} 
} 

if(isset($_SESSION["user_id"])) 
{ 
    header("Location:dashboard.php"); 
} 

?> 




/*-----------------------after that ----------------------*/ 


create a dashboard.php and copy paste this code in starting of dashboard.php 



<?php 
session_start(); 
include('conn.php'); 
include('check_session.php'); 
?> 




/*-----------------------after that-----------------*/ 



create a check_session.php which check your session and copy paste this code :- 


<?php 
    if($_SESSION["user_name"]) 
    { 
?> 
    Welcome <?php echo $_SESSION["user_name"]; ?>. Click here to <a href="logout.php" tite="Logout">Logout.</a> 
<?php 
    } 
    else 
    { 
    header("location:index.php"); 
    } 
?> 





if you have any query so let me know on my mail id [email protected] 
7
あなたは条件付きでPHPファイル内のいくつかのページにリダイレクトすることができます

....

if { 
//You need to redirect 
header("Location: http://www.yourwebsite.com/user.php"); /* Redirect browser */ 
exit(); 
} 
else{ 
// do some 
} 
1

header簡単なコードの下にあるすべての

使用のために動作しません

<?php 
     echo "<script> location.href='new_url'; </script>"; 
     exit; 
?> 
0

---------- 
 

 

 
<?php 
 
echo '<div style="text-align:center;padding-top:200px;">Go New Page</div>'; 
 
\t \t $gourl='http://stackoverflow.com'; 
 
\t \t echo '<META HTTP-EQUIV="Refresh" Content="2; URL='.$gourl.'">';  
 
\t \t exit; 
 

 
?> 
 

 

 
----------

関連する問題