2

すぐに立ち上げたいウェブサイトでこのコードを機能させるのに問題があります。特に、サインインすると、ログインに成功した後、ヘッダーがリダイレクトされません。私はこれまで何度もこのコードを使用したことがあり、問題が発生したことはありません。現在の唯一の違いは、別のサーバーと別のデータベースを使用していることです。これが私に問題を引き起こしているコードです:

<?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) {
echo 'Logged in Successfully.';

$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);

?>

「ログインに成功しました」というメッセージが表示されるので、正しく接続する必要はありませんが、リダイレクトされません。


すべての回答に感謝します。エコーを削除しようとしましたが、空白のページしか表示されません。使用しているブラウザである可能性があるため、別のブラウザに切り替えても、空白のページが表示されます。他の提案はありますか?

4

3 に答える 3

5

headerステートメントの前に何かをエコーすることはできません。

echo 'Logged in Successfully.';

これにより、header通話が機能しなくなります。

于 2012-10-12T14:34:27.833 に答える
1
if ($count == 1) {
echo 'Logged in Successfully.';
//this statement is creating problem
$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');


}

これは、ヘッダーの前に何かをエコーし​​ているためです。ドキュメントのob_start()最初と最後で使用する必要があります。ob_end_flush()

または前にエコーしないheader()でください。エラーをオンにしていないことがわかったので、オンにします。

于 2012-10-12T14:34:27.930 に答える
1

header... の後に投稿することはできませんecho... これが実際に機能した場合、テキストは表示されません (単にリダイレクトされるだけです)。(行を削除/コメントアウトして修正するにはecho

また、場所ヘッダーには絶対/完全な URL が必要です (ただし、多くのブラウザーは相対 URL に対応しているようです)。

このようにしたい場合 (事前に何らかのステータスを表示する場合)、数秒後にトリガーされる HTML または Javascript リダイレクトを使用します。

HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Logged in Successfully.</title>
<meta http-equiv="REFRESH" 
  content="5;url=http://www.example.com/users_table.php"></HEAD>
<BODY>
Logged in Successfully.
</BODY>
</HTML>

Javascript

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<title>Logged in Successfully.</title>
</HEAD>
<BODY onLoad="setTimeout(function() {
  window.location='http://www.example.com/users_table.php'},5000)">
Logged in Successfully.
</BODY>
</HTML>

さらに良いのは、users_table.phpページが成功したログイン メッセージを表示し、header-location リダイレクトを使用できるようにすることです。

于 2012-10-12T14:36:47.917 に答える