0

私はPHPとSQLを初めて使用しますが、ユーザーがWebサイトにログインできるようにする単純なPHPスクリプトを作成しようとしています。なんらかの理由で動作せず、理由がわかりません。正しいユーザー名とパスワードでログインしようとすると、「ユーザー名またはパスワードが間違っています」というエラーが表示されます。データベース名とテーブル名は正しいです。

connect.php:

<?php
$db_host = 'localhost';
$db_name = 'app';
$db_user = 'root';
$db_pass = '';
$tbl_name = 'users'; 

// Connect to server and database 
mysql_connect("$db_host", "$db_user", "$db_pass") or die("Unable to connect to MySQL.");
mysql_select_db($db_name)or die("Cannot select database.");

// Info sent from form
$user = trim($_POST['user']); 
$pass = trim($_POST['pass']); 

// Protection against MySQL injection
$user = stripslashes($user);
$pass = stripslashes($pass);
$user = mysql_real_escape_string($user);
$pass = mysql_real_escape_string($pass);
$sql = ("SELECT * FROM $tbl_name WHERE username='$user' and password='$pass'");
$result= mysql_query($sql);

$count 0= mysql_num_rows($result);
if($count==1){

// Register $user, $pass send the user to "score.php"
session_register("user");
session_register("pass"); 
header("location:score.php");
}
else 
{
echo "Wrong Username or Password";
}
?>

score.php:

<?php
session_start();
if(!session_is_registered(user)){
header("location:login.html");
}
?>

<html>
<body>
<h1>Login Successful</h1>
</body>
</html>

誰かが私の間違いを見つけてくれることを願っています、ありがとう!

4

2 に答える 2

2

参考session_registerまでに、session_is_registeredは非推奨であり、PHPから削除されます。また、mysqliまたはPDOを使用するようにコードを変更してみてください。たくさんの記事がそれを行う方法を説明しています。最後に、ユーザーが何を送信するかわからないため、ユーザーからの入力($ _POST配列)をエスケープするようにしてください。SQLインジェクションが発生しやすくなりません。パスワードをクリアテキストで保存したくないので、SHA1またはを使用するMD5のが最適です。

上記を記述すると、コードは次のようになります($_SESSIONグローバル配列を直接使用できます)。

connect.php:

<?php
$db_host  = 'localhost';
$db_name  = 'app';
$db_user  = 'root';
$db_pass  = '';
$tbl_name = 'users'; 

// Connect to server and database 
mysql_connect($db_host, $db_user, $db_pass) or die("Unable to connect to MySQL.");
mysql_select_db($db_name) or die("Cannot select database.");

// Info sent from form
$user = trim($_POST['user']); 
$pass = trim($_POST['pass']); 

// Protection against MySQL injection
$user = stripslashes($user);
$pass = stripslashes($pass);
$user = mysql_real_escape_string($user);
$pass = mysql_real_escape_string($pass);
$sql  = "SELECT * FROM $tbl_name "
      . "WHERE username = '$user' "
      . "AND password = sha1('$pass')";

$result = mysql_query($sql);

// There was an extra 0 here before the equals
$count = mysql_num_rows($result);
if ($count==1)
{

    // Register $user, $pass send the user to "score.php"
    $_SESSION['user'] = $user;

    // You really don't need to store the password unless you use
    // it somewhere else
    $_SESSION['pass'] = $pass;
    header("location: ./score.php");
}
else 
{
    echo "Wrong Username or Password";
}
?>

score.php:

<?php
session_start();
if (!isset($_SESSION['user']))
{
    header("location:login.html");
}
?>

<html>
<body>
<h1>Login Successful</h1>
</body>
</html>
于 2012-10-29T21:49:46.963 に答える
0

いくつかのこと

この行を、その下に置いたエラーチェックのある行に変更します

$result= mysql_query($sql);

$result= mysql_query($sql) or die(mysql_error());

SQLエラーがあり、それを取得していない可能性があるため、結果には常に0行が含まれます

また、この行がタイプミスであるかどうかわからない場合は、そこに0を含めるべきではありません

$count 0= mysql_num_rows($result);
于 2012-10-29T21:43:06.153 に答える