0

データベースにリンクするログインを作成しています。情報を入力すると、ログインは空白のページを実行し、何もしません。以下は私のコードです。

    include "conn.php";
    session_start();

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

    if ($email_address && $password)
    {
    $connect = mysql_connect("computing","i7906890","password") or die ("couldn't   connect!");
    mysql_select_db("i7906890") or die ("couldn't find database");
$guery = mysql_query("SELECT * FROM UserAccount WHERE email_address = '$email_address'");

if ($numrows!=0) {
   //code to login
   while ($row = mysql_fetch_assoc($query)) //Password Check
   {
       $dbemail_address = $row['email_address']
       $dbpassword = $row['password']
   }
   //Check if they match
   if ($email_address==$dbemail_address&&$password==$dbpassword)
   {
      echo "You're in! <a href='user_page.php'>click</a> here to enter the members page";
      $_SESSION['user']==$dbemail_address;
   }
   else
      echo "Incorrect Password!";
}
else
   die("That user doesn't exist!");
}
else
   die("Please enter an email address and password!"); 
?>

また、ここに私のフォームがあります

<form action = "login2.php" method ="POST">
        <p><img src="images/space.gif" width="70px" height="1px"/><strong>Log in</strong> or <a href="register_form.php"><strong>Register</strong></a><br>
            Email:<img src="images/space.gif" width="34px" height="1px"/><input type="text" name="user" size="33"> <br>
            Password:<img src="images/space.gif" width="10px" height="1px"/><input type="password" name="password" size="33"> <br>
        <div align="center">
        <input type="submit" value="Log in" class="button">
        </div>
    </p>
    </form>

助けてください!SOS

4

2 に答える 2

2

コードにいくつか欠けているため;、スクリプトが失敗し、何も表示されません。(具体的にはwhileループ内ですが、他の場所もチェックしてください。)

編集:whileパフォーマンスを向上させるために、そのループをすべて失い、パスワード基準をSQLステートメントに入れることを検討することもできます。他のポスターが言ったように、SQL インジェクションに注意してください。

于 2013-03-14T13:40:13.570 に答える
0

Please help! SOSええ、あなたは深いところにいます...しかし、あなたが期待するものではありません...

コードが正常に動作していたとしても、非推奨のmysql_関数を使用した PHP ログイン フォームでのSQL インジェクションに悩まされ、ほぼ同じ質問をするのは 5 人目か 6人目です...

また$guery、同じではありません... qgの文字を$query確認してください...

この行:

$guery = mysql_query("SELECT * FROM UserAccount WHERE email_address = '$email_address'");

少なくとも

$query = mysql_query("SELECT * FROM UserAccount WHERE email_address = '".mysql_real_escape($email_address)."'");

どちらも正しく、注射を避けるために...

しかし、次のように、PDO を介して準備済みステートメントを実際に使用する必要があります。

try {
    //open connection, this is different than in the old functions
    $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);

    //***running query
    //**step1: create statement
    $stmt = $dbh->prepare('SELECT * FROM UserAccount WHERE email_address = :email'); //notice parameter prefixed with ':'

    //**step2: bind values (be sure to also check out the bindParameter() function too!)
    $stmt->bindValue(':email', $email_address);

    //**step3: exexcute statement
    $stmt->execute();

    //**step4: process results
    $result = $stmt->fetch(PDO::FETCH_OBJ);

    if($result->PASSWORD==$password) {
      //logged in, do whatever reuqired
    }

    $dbh = null; //don't let it slip out of our hands
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}

また、もう 1 つ注意が必要です。平文のパスワードを保存しないでください。最近は MD5 ハッシュを格納することさえ対象外であり、SHA1 も弱いと宣言されています...

于 2013-03-14T13:41:14.930 に答える