2011-07-02 27 views
0

このコードはO'Reilly Head FirstのPHPです。& MySQLの本です。スクリプトは、何らかの形でユーザー名とパスワードを認識しません:ページ認証が機能しない

<?php 
    $username = 'rock'; 
    $password = 'roll'; 

    if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW']) || 
    ($_SERVER['PHP_AUTH_USER'] != $username) || ($_SERVER['PHP_AUTH_PW'] != $password)) { 
    // The user name/password are incorrect so send the authentication headers 
    header('HTTP/1.1 401 Unauthorized'); 
    header('WWW-Authenticate: Basic realm="Guitar Wars"'); 
    exit('<h2>Guitar Wars</h2>Sorry, you must enter a valid user name and password to  access this page.'); 
    } 
?> 

をそして、これは認証ファイルが必要とされたスクリプト、次のとおりです。

<?php 
    require_once('authorize.php'); 
?> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title>Guitar Wars - High Scores Administration</title> 
    <link rel="stylesheet" type="text/css" href="style.css" /> 
</head> 
<body> 
    <h2>Guitar Wars - High Scores Administration</h2> 
    <p>Below is a list of all Guitar Wars high scores. Use this page to remove scores as needed.</p> 
    <hr /> 

<?php 
    require_once('appvars.php'); 
    require_once('connectvars.php'); 

    // Connect to the database 
    $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); 

    // Retrieve the score data from MySQL 
    $query = "SELECT * FROM guitarwars ORDER BY score DESC, date ASC"; 
    $data = mysqli_query($dbc, $query); 

    // Loop through the array of score data, formatting it as HTML 
    echo '<table>'; 
    echo '<tr><th>Name</th><th>Date</th><th>Score</th><th>Action</th></tr>'; 
    while ($row = mysqli_fetch_array($data)) { 
    // Display the score data 
    echo '<tr class="scorerow"><td><strong>' . $row['name'] . '</strong></td>'; 
    echo '<td>' . $row['date'] . '</td>'; 
    echo '<td>' . $row['score'] . '</td>'; 
    echo '<td><a href="removescore.php?id=' . $row['id'] . '&amp;date=' . $row['date'] . 
     '&amp;name=' . $row['name'] . '&amp;score=' . $row['score'] . 
     '&amp;screenshot=' . $row['screenshot'] . '">Remove</a>'; 
    if ($row['approved'] == '0') { 
     echo '/<a href="approvescore.php?id=' . $row['id'] . '&amp;date=' . $row['date'] . 
     '&amp;name=' . $row['name'] . '&amp;score=' . $row['score'] . '&amp;screenshot=' . 
     $row['screenshot'] . '">Approve</a>'; 
    } 
    echo '</td></tr>'; 
    } 
    echo '</table>'; 

    mysqli_close($dbc); 
?> 

</body> 
</html> 

はあなたがここで間違っているものを見ることができますか? ありがとうございました!

+3

質問を再フォーマットして読めるようにしてください。 –

+0

どのようにわからないのですか? – vlevsha

+0

私はあなたのためにそれを修正しましたが、次に編集フィールドの '{}'ボタンを使用します:) – Nanne

答えて

0

認証コードは完全に問題ありません。

の前に余分なスペースがあるか、またはheader()が呼び出される前に何か他の場所があると、認証ポップアップが表示されません。

+0

私はそれがアップアップが表示されますが、私はユーザー名とパスワードを入力するたびにそれを受け入れず、再びポップアップします。 – vlevsha

+0

は動作するはずです。キャップロック? print_r($ _ SERVER)を試してみましたか? –

+0

これは答えでしょうか? - http://discussion.dreamhost.com/thread-71152.html 私はDreamhostです。 $ _SERVER配列が返されると、PHP_AUTH_USERとPHP_AUTH_PWはリストにもありません。 – vlevsha