2011-03-10 19 views
0

私はLynda.comからPHPのビデオチュートリアルを(それがオンラインに残念ではありません)以下、次のコードを使用しますが、私は次のエラーPHPのリダイレクトループ

Error 310 (net::ERR_TOO_MANY_REDIRECTS): There were too many redirects. 

が、これは私に問題がある可能性がありましたよコード。すなわち、コードが最初の10行または15行に2つのredirect_toを持つという事実か、それとも別のことについて話しているのでしょうか?

<?php require_once("../../includes/initialize.php"); ?> 

<? if(!$session->is_logged_in()){ 
    redirect_to("login.php"); } ?> 

<?php 
$logfile = SITE_ROOT.DS.'logs'.DS.'log.txt'; 
if($_GET['clear'] == 'true') { 
file_put_contents($logfile, ''); 
//add the first log entry 
log_action('Logs Cleared', "by User ID {$session->user_id}"); 
//redirect to this same page so that the URL won't 
//have "clear=true" anymore 
redirect_to('logfile.php'); 
} 
?> 

<?php include_layout_templates('admin_header.php');?> 

<a href="index.php">&laquo; Back</a><br/> 

<br/> 

<h2>Log File</h2> 

<p><a href="logfile.php?clear=true">Clear log file</a></p> 

<?php 
if (file_exists($logfile) && is_readable($logfile) && 
    $handle = fopen($logfile, 'r')) {//read 
    echo "<ul class=\"logentries\">"; 
    while(!feof($handle)) { 
    $entry = fgets($handle); 
    if(trim($entry) != "") { 
    echo "<li>{$entry}</li>"; 
    } 
    } 
    echo "</ul>"; 
    fclose($handle); 
    } else { 
    echo "Could not read from {$logfile}."; 
    } 

?> 



//Remember to give your form's submit tag a name="submit" attribute 
if (isset($_POST['submit'])) {//Form has been submitted. 

$username = trim($_POST['username']); 
$password = trim($_POST['password']); 

//Check database to see if username/password exist 

$found_user = User::authenticate($username, $password); 

if ($found_user) { 
    $session->login($found_user); 
    log_action('Login', "{$found_user->username} loggined in."); 
    redirect_to("index.php"); 
} else { 
    //username/password combo was not found in the database 
    $message = "Username/password combination incorrect."; 
} 
} else {//Form has not been submitted. 
    $username = ""; 
    $password = ""; 
    } 
?> 
<?php include_layout_template('admin_header.php'); ?> 
     <h2>Staff Login</h2> 
     <?php echo output_message($message); ?> 

     <form action="login.php" method="post"> 
      <table> 
       <tr> 
        <td>Username:</td> 
        <td> 
         <input type="text" name="username" maxlength="30" value="<?php 
         echo htmlentities($username); ?>" /> 
        </td> 
       </tr> 
       <tr> 
        <td>Password:</td> 
        <td> 
         <input type="password" name="password" maxlength="30" value="<?php 
         echo htmlentities($password); ?>" /> 
        </td> 
       </tr> 
       <tr> 
        <td colspan="2"> 
         <input type="submit" name="submit" value="login" /> 
        </td> 
       </tr> 
      </table> 
     </form> 
     <?php include_layout_template('admin_footer.php'); ?> 
+1

login.phpコードはどのようなものですか? – powtac

+0

ログイン試行がログファイルに表示されますか?毎回「再送信」するように見えます。つまり、それは無限ループです。また、「var_dump($ usrname、$ password); exit;」を追加してデバッグを試みてください。エラーがどこにあるかを確認します。 –

+0

PHPの本を手に入れよう。 "チュートリアル"はプログラミングを教えません。 –

答えて

5

あなたはリダイレクトの無限ループがあります。

ログインしていない場合、「login.php」は「login.php」にリダイレクトされます。ログインしていない場合は「login.php」が「login.php」にリダイレクトされます。「login.php」はリダイレクトしますあなたがログインしていなければ "login.php"は "login.php"にリダイレクトされます。

リダイレクトは、おそらく現在のページは "login.php"ではありません。つまり、そのロジックをこのページから削除する。

+0

以下のコードを見ると... login.phpのコードが投稿されていると思われます。それを教育的な感情と呼んでください。 –

+0

@Jeff:そうです。だからこそ、私はこの回答を投稿し、 "login.php"を参照しています.... –

+0

十分に公正で、私はあなたが 'login.php'が別のファイルであることを示唆していると思いました。私の間違い: –

2
<? if(!$session->is_logged_in()){ 
    redirect_to("login.php"); } ?> 

そこだと思うあなたの問題があります。ログインページをチェックして、誰かがログインしているかどうかを確認しています。そうでない場合は、新しいリクエストを開始してログインページにリダイレクトされ、再度チェックが行われます。

  • ログインページには、ユーザーがログインしていますか?いいえ!ログインページにリダイレクトする
  • ログインページに尋ねる、ユーザーはログインしていますか?いいえ!ログインページにリダイレクトする
  • ログインページに尋ねる、ユーザーはログインしていますか?いいえ!

人々は、ログインページを使用するにはログインする必要があり、そう、彼らは言ったページを使用する前に、誰かがログインしていないか確認してくださいを削除しないでください

  • 広告無限のログインページにリダイレクト。

  • 1
    • チェックあなたがログインしていない場合は、ログインページがリダイレクトします。
    • あなたは
    • あなたがリダイレクトを行っている後、あなたが終了していることを確認してくださいをリダイレクトする前に出力がないことを確認してください。あなたのコード例では、あなたのrequireとif checkの間の空行の結果としてリダイレクト関数を呼び出す前に、いくつかの空白で終わるでしょう。私があなたの場合は、必要がないときに行うように、PHPの内外を飛び越えることはありません。あなたの最初のリンクに至るまで、私はPHPだけしか見ませんが、まだ3つの<?phpと1つの<?を持っています(これは悪い考えですが、私は<?phpだけを使用します)。
    関連する問題