sql >> データベース >  >> RDS >> Mysql

カスタムユーザー登録/ログインスクリプトの作成についてサポートが必要

    この例では、プリペアドステートメントを省略しますが、SQLインジェクションの防止について調査する必要があります。

    まず、ユーザーがログインに使用するフォームが必要です。これが、NewUser.htmlというページに表示される基本的なフォームです。

    <form action="AddUser.php" method="POST">
    <p>Enter A Username: </p>
    <input type="text" name="User" maxlength="20" size="10">
    <br />
    <p>Enter A Password: </p>
    <input type="password" name="Password" maxlength="40" size="10">
    <br />
    <p>Enter Password Again: </p>
    <input type="password" name="PasswordX2" maxlength="40" size="10">
    <br />
    <input type="submit" value="Create Account">
    </form>
    

    もちろん、メールアドレスなどの他のフィールドを追加することもできますが、私はそれをシンプルにしています。

    次に、AddUser.phpページに移動しましょう:

    <?php
    
    //Now let's grab our $_POST data from our form and assign them to variables...
    $User = $_POST['User'];
    $PW = $_POST['Password'];
    $PW2 = $_POST['PasswordX2'];
    
    //Check whether user put anything in the fields for user or passwords
    if (!$User || !$PW || !$PW2) {
    echo "You have not entered all the needed info. Please try again.";
    exit();
    }
    
    //Check if passwords match
    if ($PW <> $PW2) {
    echo "Your passwords do not match. Please go back and try again.";
    exit();
    }
    
    //Now we want to be good stewards of passwords and information so let's hash that password
    $hash = password_hash($PW, PASSWORD_BCRYPT);
    
    //Open your connection to database
    $dbconnect-> blah blah(make your database connection here)....
    
    //Now let's insert the new user into the database - remember do not do this without SQL-injection prevention. I'm just giving you the basics.
    $sql = "INSERT INTO UsersTable (UserName, Password)
    VALUES ('".$User."', '".$hash."')";
    
    //Verify Successful Entry
    if (mysqli_query($dbconnect,$sql)) {
    echo "User Added Successfully";
    } else {
    echo "Error Creating User: " . mysqli_error($dbconnect);
    }
    
    echo "<br /><p>Please go to the main page to login now.</p>";
    ?>
    

    これでユーザーが作成され、パスワードがソルトでハッシュされてDBに挿入されました...SQLインジェクションを真剣に忘れないでください。

    これで、ログイン用のNewUser.htmlフォームと非常によく似たフォームが作成されますが、パスワードを2回入力する必要はありません。ログインフォームがユーザーをlogin.phpというページに送信するとします。

    <?php
    session_start(); //starts a session for tracking user on each page - this has to be on every page
    
    //Let's get our variables from the POST data- will be identical to before most likely
    $User = $_POST['User'];
    $PW = $_POST['Password'];
    
    //Open your connection to database
    $dbconnect-> blah blah(make your database connection here)....
    
    //Let's see if the username and password matches what we have in the database
    $sql = "SELECT UsersTable.UserName, UsersTable.Password
    FROM UsersTable
    WHERE UsersTable.UserName = '$User'";
    $result = $dbconnect->query($sql);
    
    //Let's get the hashed password that corresponds to that username
    $row = $result->fetch_assoc();
    $HashedPassword = $row['Password'];
    
    //Let's verify the password is correct
    if (password_verify($PW, $HashedPassword))
    {
    
    //if it is correct(true) this will now happen
    $_SESSION['verified_user'] = $User; //registers user by storing it in a SESSION
    }
    else {
    echo "Login failed. Try again.";
    exit();
    }
    ?>
    

    ヒントとして、アクセスレベルを追加する場合は、アクセス番号(例:1、2、3)を使用してデータベースに場所を保存し、ログインに成功すると、アクセスレベルを表す別の$_SESSIONを割り当てます。許可した特定のセクションにアクセスできるようにします。

    これで、サイトの他のページに移動すると、セッションは次のように確認されます。

    ExamplePage.php

    <?php
    session_start();
    
    if (isset($_SESSION['verified_user'])) {
    //User is verified and whatever is here will be visible and happen- YAY!
    }
    else {
    echo "You are not logged in and cannot see this page.";
    }
    ?>
    

    ログインしている人だけがアクセスを許可されているすべてのページでセッションを開始する習慣を身に付けてください。セッションはページごとに記憶されます。

    セッションを破壊するログアウトページを提供することを忘れないでください:logout.php

    <?php
    session_start();
    
    unset($_SESSION['verified_user']);
    session_destroy();
    echo "You are logged out.";
    ?>
    


    1. LaravelEloquentModelを介して日付形式をdd/mm/yyyyに挿入します

    2. Mysqlに経度/緯度を保存するデータ型

    3. Heroku Postgres:psql:致命的:ホストのpg_hba.confエントリがありません

    4. mysqlフェッチ合計php