1

わかりましたので、以前にこの質問をしたところ、多くの良い回答が得られましたが、残念ながらどれも結果を変えませんでした. 作業中のサイトの「ログイン」ページの後にリダイレクトしようとしています。セッションで ID を収集し、リダイレクトしようとしています。これは、私が使用する多くのサイトで正常に機能します。このサイトとの 1 つの違いは、localhost を使用せず、サーバー名があることです。最初はヘッダーの前に echpo がありましたが、誰もがそれが問題だと言っていました。それを削除して修正しましたが、何も変わりませんでした。コードは次のとおりです。

<?php 
/*set all the variables*/ 
$email = $_POST['email']; 

$password = sha1($_POST['password']);   /* hash the password*/ 

$conn = mysqli_connect ('servername', 'username', 'password', 'databasename') or die('Error connecting to MySQL server'); 
/*select the id from the users table that match the conditions*/ 
$sql = "SELECT id FROM users WHERE email = '$email' AND password = '$password'"; 

$result = mysqli_query($conn, $sql) or die('Error querying database.'); 

$count = mysqli_num_rows($result); 

if ($count == 1) { 

$row = mysqli_fetch_array($result); 

session_start(); 

$_SESSION['user_id'] = $row['id']; 

/*If true head over to the users table*/ 
header('location: users_table.php'); 


} 
/*If invalid prompt them to adjust the previous entry*/ 
else { 
echo '<h2>Invalid Login</h2><br />'; 
echo '<h2>Click <a href="javascript:history.go(-1)">HERE</a> to go back and adjust your entry.</h2>'; 
                    } 


mysqli_close($conn); 

?> 

ページ上の他のコードは、HTML の HEAD タグと BODY タグだけです。昔の大学の先生に助けを求めたことさえありますが、彼はコードは問題ないように見えますが、問題を見つけることができないと言いました。だから私はもう一度尋ねます。HTML または SCRIPT リダイレクトを使用してセッションにとどまる方法はありますか?

ありがとう

4

4 に答える 4

1

これらの問題を確認してください

ヘッダーは既に送信されていますか?はいの場合、これが実行されない原因です。前にphpエラーまたは空白行を確認してください

exit;

ヘッダー関数の後

header('Location: users_table.php'); 
exit;
于 2012-10-12T17:15:12.553 に答える
0

エラーになる可能性のあるものがいくつかあります。

まず、このページに他のhtmlがあると言います。リダイレクトがhtmlに従う場合、これによりエラーが発生します。例えば:

http://php.net/manual/en/function.header.php

<html>
<?php
/* This will give an error. Note the output
 * above, which is before the header() call */
header('Location: http://www.example.com/');
?>

次に、セッションが衝突している可能性があります。セッション開始を次のように置き換えます。

if( !isset( $_SESSION ) ){
  session_start();
}

第三に、リダイレクトで場所を大文字にする必要があります。

/*If true head over to the users table*/ 
header('location: users_table.php'); 

する必要があります

/*If true head over to the users table*/ 
header('Location: /users_table.php'); 

最後になりましたが、エラー報告をオンにしてください。スクリプトの一番上にあるhtmlの前に、次のコードを配置します。

ini_set( 'display_errors', 1 );
error_reporting( E_ALL );
于 2012-10-12T17:21:28.613 に答える
0

私があなただったら、次のようにします。

1) エラーを探す:ページの一番上に設定error_reporting(E_ALL);して、すべてが表示されるようにします。また、php エラー ログを調べて、何か問題があるかどうかを調べることもできます。ログ ファイルの場所は、マシンの設定と構成によって異なります。

2) すべてを削除:他の不要なコードをすべて削除またはコメントし、単に使用headerしてdie機能させ、それらが適切に機能するかどうかを確認します。

<?php 

header("Location: http://www.google.com/"); 
die(); 

?>

機能する場合は 3 に進み、そうでない場合は最後の手順に進みます。

3) コードが実行されているかどうかを確認headerします。関数にコメントを付けて、echo 'ok';その前に 1 行だけ記述します。レンダリングされたページでそれが表示されない場合ok、コードはまったく実行されていません。番号 4 に進みます。そうでない場合はok、最後の手順に進みます。

4) 疑わしい場所を見てください:SQL Query自分の部分にコメントしてみて、ifステートメントを からif ($count == 1) {に変更してくださいif (true) {MySQLページがリダイレクトされた場合、テーブルからデータを取得する際にエラーが発生します。headerそれでもうまくいかない場合は、最後の手順に進みます。

5) 最後のステップ: 他のマシンでのテスト: 同じコードを、他の開発環境や異なるホスティング サーバーを含む他のマシンでテストします。異なる構成の他のマシンで動作している場合、問題はあなたのマシンです!

新しいサーバーをインストールして最初からやり直して、問題が存在するかどうかを確認してください。Encodingしかし、他のマシンでも問題が解決しない場合は、ソース コードをに変更してみてくださいUTF-8 without BOM。それは最後の瞬間に機能する可能性があります!

上記の手順のいずれかがうまくいかない場合は、そのままにしておき、ビールを買いに行き、テレビで料理番組を見て、いくつかの SMS メッセージを書き、1 ~ 2 回電話をかけてみてください。少なくとも 2 時間経過したら、ここに戻ってステップ 1 からやり直してください。あきらめないで!:)

更新:古典的な間違い! ... PHP の開始タグがないか、その前にないことを確認してnew lineください。他のことをする前に、これをチェックしてください!:)white space<?php

(ちなみに、問題が解決した後に更新を追加します。受け入れられた回答から取得しました)

于 2012-10-12T18:00:18.247 に答える
0

14.30 場所

Location 応答ヘッダー フィールドは、要求の完了または新しいリソースの識別のために、受信者を Request-URI 以外の場所にリダイレクトするために使用されます。201 (Created) 応答の場合、Location はリクエストによって作成された新しいリソースの場所です。3xx 応答の場合、場所は、リソースへの自動リダイレクト用のサーバーの優先 URI を示す必要があります。フィールド値は、単一の絶対 URI で構成されます。

絶対URIを使用してみてください

header("Location: http://www.xxx.com/users_table.php");

エラーが発生した場合に備えて、ページの上部に次を追加することもできます

error_reporting(E_ALL);
ini_set("display_errors","On");
于 2012-10-12T17:09:18.743 に答える