0

Web システムにこの問題があります。管理者としての私の目的はusername、 、passwordfirstnameおよびを指定してユーザーを登録することlastnameです。すべてのレコードが正しく挿入されているので、これを適切に行います。しかし、それらのユーザーの 1 人としてアクセスしようとすると、「ユーザー名とパスワードが一致しません」というメッセージが表示されて入力できません。これは私のログインチェックコードです:

      if (isset($_POST['username']) && isset($_POST['password'])) {
            $username = $_POST['username'];
            $password = $_POST['password'];
            $_SESSION['username'] = $_POST['username']; 
            if ((!$username) || (!$password)) {
                do_html_header('');

                echo '<h3 style="color:#800000;">Please fill in both fields</h3><br><br></br></br>';
                display_login_form();
            }       
            else {
            $sql = mysql_query('SELECT * FROM members WHERE username="'.$_POST['username'].'" AND password=sha1("'.$_POST['password'].'")') or die(mysql_error());
            $login_check_member = mysql_num_rows($sql);
            if($login_check_member > 0) {
                     while($row = mysql_fetch_array($sql)) {
                        $role = $row["role"];
                        $_SESSION['role'] = $role;
                    }
                }
                else { // Run this code if login_check is equal to 0 meaning they do not exist
                do_html_header('');

                echo '<h3 style="color:#800000;">The Username And Password do not match.</h3><br><br></br></br>';
                display_login_form();

                } 

どうやら、while ループに問題があるようです。しかし、wampserver の MySql コンソールを介してデータベースに挿入されたユーザーに対しては適切に機能します。この問題は、Web サイト経由で挿入されたユーザーにのみ存在します。新しいユーザー (サーバー) を挿入するために使用するコードの一部は次のとおりです。

$username = $_POST['username'];
$password = $_POST['password'];
$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
$role = $_POST['role'];


$conn = mysql_connect("localhost", "root", "");
$db=mysql_select_db("buzzcafe" ,$conn);

 //$username= $_SESSION['username'];

if (isset($_POST['username'])) {
 if (isset($_POST['password'])) {
  if (isset($_POST['firstname'])) { 
    if (isset($_POST['lastname'])) { 
        if(isset($_POST['role'])) {

        $insertServer = mysql_query("INSERT INTO servers (username,password,firstname,lastname,role) VALUES('".$username."',sha1('".$password."'),'".$firstname."','".$lastname."','".$role."')")or die(mysql_error());
                echo "<h5 style=color:#800000><i>The server ".$username." is now registered </i></h5>";
                display_manager_menu();
            }

        }
    }
 }
}

アイデアはありますか?

4

1 に答える 1

0
  1. INSERTデータ (「サーバー」) のテーブルを見てください。SELECTデータの元のテーブル ('members')とは異なります。

  2. mysql_query非推奨のため、この関数は使用しないでください。代わりにPDOまたはmysqli_queryを使用してみてください。

  3. クエリでフィルター処理されていない入力を使用しないでください

  4. ログイン/登録フォームに、より安全な関数 (bcrypt や password_hash など) を使用してみてください。ここを見てください。

于 2013-09-29T22:49:33.110 に答える