0

アクションが「auth.php」であるフォームを含むユーザーログインページがあります

auth.php は次のようになります。

<?php
session_start();

require_once('database.php');


$username = $_POST['username'];
$password = $_POST['password'];



$sql = "SELECT * FROM access_getaccountswithinfo WHERE username='".$username."' AND     password='".$password."'";

$run = mysql_query($sql);
$row = mysql_fetch_array($run);

if (mysql_num_rows($run) == 1) {
$_SESSION['logged_in'] = true;
$_SESSION['username'] = $row['username'];
$_SESSION['password'] = $row['password'];
$_SESSION['packagename'] = $row['packagename'];
$_SESSION['creation-date'] = $row['creation-date'];
$_SESSION['cap'] = $row['cap'];
$_SESSION['total'] = $row['total'];
$_SESSION['remainingtopup'] = $row['remainingtopup'];


header("location: usage.php");
} else {
header("location: user_login.php");
$message = MSG_INVALID_USERPW;
}


mysql_close($link);
?>

次に、この auth.php には、次のように database.php database.php への Require_once があります。

<?php
$link = mysql_connect('localhost', 'testdatabase', '123456');
if (!$link) {
die('Could not connect: ' . mysql_error());
}

// make testdatabase the current db
$db_selected = mysql_select_db('testdatabase', $link);
if (!$db_selected) {
die ('Can\'t use foo : ' . mysql_error());
}

echo 'Connected successfully';

?>

要するに...ログインページにログインすると、アクションはユーザーが認証できるかどうかをauth.phpでチェックしますが、接続にはdatabase.phpが必要です。ユーザーが認証した場合、header("location : 使用法.php"); auth.php で。

現在、これは xampp Apache と SQL サーバーを備えたローカル マシンで 100% 動作します。

しかし、これをWebサーバーにアップロードすると、ログインページにログインすると、「auth.php」ページに移動してそこで停止し、database.phpのエコーに従って「正常に接続されました」と表示されます。それ以上は何もありません。認証してから、usage.php に移動すると想定されています。データベース名 、テーブル ect 、すべて正しいことを確認しました。アイデアはありますか?

4

5 に答える 5

0

今、これは私のローカルマシンで100%動作します

それはいくつかの本当に悪いコードです。認証をバイパスするのは簡単です。

接続を確立した後、それ以上のエラー チェックは行いません。

于 2013-03-28T19:52:53.383 に答える
0

「正常に接続されました」というエコーを削除してみてください。コードから空白行を省略してみてください。ヘッダー関数は機密性が高すぎるため、使用する前に出力を送信しない必要があるため、エコーや単純な html は出力と見なされ、ヘッダー関数は適切に機能しません。ヘッダーが既に送信されているというエラーであり、エラー報告のレベルがエラーを非表示にする場合、このエラーに気付かないでしょう

ヘッダー関数の呼び出しの前にスペースやエコーを省略してから、結果を教えてください:)

于 2013-03-28T20:49:41.713 に答える
0

header(...) を使用する前に、出力ストリームに何も書き込むことはできません。一部のサーバーでは機能する可能性がありますが、期待しないでください。

コード内のすべての echo ステートメントと print ステートメントを削除すると、リダイレクトされるはずです。

さらに、実際には mysql_real_escape_string(..) [http://php.net/manual/en/function.mysql-real-escape-string.php] を使用するか、非推奨の mysql_ コマンドから PDO に変更する必要があります。今、ユーザー名を使用してあなたのウェブサイトにログインできました' OR 1=1 LIMIT 0,1; --

于 2013-03-28T19:55:20.410 に答える
0

何かをエコーすると、ヘッダーを設定できなくなります。echo ステートメントを削除してみてください。

ソース: http://php.net/manual/en/function.header.php

引用: 「header() は、実際の出力が送信される前に、通常の HTML タグ、ファイル内の空白行、または PHP から呼び出される必要があることに注意してください。include または require 関数を使用してコードを読み取ることは非常に一般的なエラーです。 、または別のファイル アクセス関数であり、header() が呼び出される前に出力されるスペースまたは空行があります。単一の PHP/HTML ファイルを使用する場合、同じ問題が存在します。"

于 2013-03-28T19:55:43.120 に答える
0

追加してみてください

error_reporting(E_ALL);
ini_set('display_errors', '1');

コードの先頭でエラーがあるかどうかを確認します。通常、エラーはホスティング サーバーに隠されています。

于 2013-03-28T19:57:08.197 に答える