0

私はPHPに比較的慣れていないので、本当に単純なログインスクリプトを書こうとしています. 基本的な機能はダウンしていますが、システムにログインできません。ログイン スクリプトを以下に示します。登録スクリプトも以下に示します。

checklogin.php

include_once 'inc/db.inc.php';

$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string(md5($_POST['password']));


try {
$sql="SELECT id, username, password FROM users WHERE username='$username' and password='$password'";
$result = $pdo->query($sql);
$count=mysql_num_rows($result);
// If result matched $username and $password, table row must be 1 row
if($count == 1){

    // Register $username, $password and redirect to file "index.php"
     session_register("username");
     session_register("password"); 
     header("Location: index.php");
 }
 else {
 header("Location: login.php?invalid=1");
 }
}

catch (PDOException $e) {
    echo $e;
}

ob_end_flush();

?>

checkreg.php

include_once 'inc/db.inc.php';

 //This makes sure they did not leave any fields blank
 if (!$_POST['username'] | !$_POST['password'] | !$_POST['passwordconf'] ) {
    die('You did not complete all of the required fields');
}

if ($_POST['password'] != $_POST['passwordconf']) {
    die('Your passwords did not match. ');
}

$_POST['password'] = md5($_POST['password']);
if (!get_magic_quotes_gpc()) {
    $_POST['password'] = addslashes($_POST['password']);
    $_POST['username'] = addslashes($_POST['username']);
        }
$username = $_POST['username'];
$password = $_POST['password'];

 try {
 // now we insert it into the database
$sql = "INSERT INTO users(username,password) VALUES ('$username','$password')";
$result = $pdo->exec($sql);
header("Location: index.php");

} catch (PDOException $e){
 echo $e;
}
?>

登録がデータベースに書き込みを行っていることはわかっていますが、有効なログインを試行するたびに、無効な認証情報フラグが表示されます。私を助けるためにあなたができることは何でも素晴らしいでしょう。ありがとうございました。

4

4 に答える 4

0

使用している PHP のバージョンによっては、session_register()に問題がある可能性があります。入れてみて

    session_start();

checklogin.phpの上部で、次に使用

    ...
    $_SESSION['username'] = $username;
    $_SESSION['password'] = $password;
    ...

session_register()の代わりに。

于 2013-02-27T19:25:18.037 に答える
0
<?php
// Use of session_register() is deprecated
$barney = "A big purple dinosaur.";
session_register("barney");

// Use of $_SESSION is preferred, as of PHP 4.1.0
$_SESSION["zim"] = "An invader from another planet.";

// The old way was to use $HTTP_SESSION_VARS
$HTTP_SESSION_VARS["spongebob"] = "He's got square pants.";
?>

警告:

この関数は PHP 5.3.0 で非推奨となり、PHP 5.4.0 で削除されました。

于 2013-02-27T19:19:26.803 に答える
0

まず、いくつかのことをクリアする必要があります。

1.

if (!$_POST['username'] | !$_POST['password'] | !$_POST['passwordconf'] ) {
die('You did not complete all of the required fields');}

| ではなく && にする必要があります。

  1. あなたのコードには、ユーザー名が存在するかどうかを確認する場所がないため、同じユーザー名を持つ複数のユーザーがいると推測しています。checkreg.php に挿入する前に、まずユーザー名が存在するかどうかを確認する必要があります。

  2. checklogin.php で if($count == 1) を if($count > 0) に変更します

これで問題が解決しない場合は、データベース データ (現在データベースにあるデータ) などの詳細情報を教えてください。

于 2013-02-27T19:17:21.097 に答える
0

試してみるいくつかのこと:

1) session_register 関数呼び出しは非推奨です。http://php.net/manual/en/function.session-register.php . 可能であれば、 $_SESSION を使用する必要があります。

このようなもの:

 $_SESSION["username"] = $username;
 $_SESSION["password"] = "validated"; // md5 is variable so you can't easily check for it on next page render

2) 値をテストするとき、$_POST は必要ありません。次のページのレンダリングで $_SESSION を再度使用する必要があります。このようなもの:

if ("validated" == $_SESSION["password"]) {
    // You're logged in...
}

3) $_SESSION 配列に値を設定するには、session_start() を呼び出す必要があることに注意してください。使用前に一度だけ。(詳細はhttp://www.php.net/manual/en/function.session-start.phpをご覧ください。)

4) これがサンプル コードであることはわかっていますが、SQL インジェクション攻撃の可能性があります。これらの変数をエスケープする必要があります。

$sql="SELECT id, username, password FROM users WHERE username='$username' and password='$password'";

于 2013-02-27T19:23:51.903 に答える