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

PHPセッションとログインページでの投稿の問題

    編集: さて、フォームフィールドにタイプミスをしました。まだMySQLAPIをミキシングしています。mysql_real_escape_string()を使用したミキシング関数については、以下を参照してください。 。

    name="myusername"を見てください そしてあなたのPOST割り当てとあなたのパスワードのためのもの。

    一致しません。

    name="myusername"を変更します name="username"

    およびname="mypassword" name="password"

    $myusername=$_POST["username"];
    $mypassword=$_POST["password"];
    

    エラーレポートを使用した 、未定義のインデックスとヘッダーがすでに警告を送信していることを通知します。以下を参照してください。

    <?phpの前にもスペースがあります これにより、ヘッダーの前に出力が発生します。それらを削除します。

    さらに、MySQLAPIをmysql_error()と混合しています 。 mysql_error() mysqli_error($con)と読み替えてください そしてこれは以下のとおりです:

    $myusername = mysql_real_escape_string($myusername);
    $mypassword = mysql_real_escape_string($mypassword);
    

    と読む必要があります
    $myusername = mysqli_real_escape_string($con,$myusername);
    $mypassword = mysqli_real_escape_string($con,$mypassword);
    

    または

    $myusername = mysqli_real_escape_string($con,$_POST['username']);
    $mypassword = mysqli_real_escape_string($con,$_POST['password']);
    
    • mysqli_ およびmysql_ 関数は混ざり合いません。

    セキュリティについて

    パスワードをプレーンテキストで保存している可能性があることに気づきました。この場合、お勧めできません。

    CRYPT_BLOWFISHを使用することをお勧めします またはPHP5.5の password_hash() 働き。 PHP <5.5の場合は、 password_hash() compatibility packを使用します。

    さらに、SQLインジェクションに関しては、使用mysqli プリペアドステートメント付き 、またはプリペアドステートメントを使用したPDO はるかに安全です

    脚注

    exit;を追加することをお勧めします 各ヘッダーの後。

    header("location:login_success.php");
    exit;
    

    およびすべてのヘッダー。

    編集:

    削除

    $myusername=$_POST["username"];
    $mypassword=$_POST["password"];
    echo $myusername . "<br>";  
    echo $mypassword . "<br>";
    

    次に、次のように置き換えます:

    $myusername = stripslashes($_POST["username"]);
    $mypassword = stripslashes($_POST["password"]);
    $myusername = mysqli_real_escape_string($con,$_POST['username']);
    $mypassword = mysqli_real_escape_string($con,$_POST['password']);
    

    編集#2

    これは私があなたのコードをテストして成功したものであり、したがってあなたの現在のコードの何が悪いのかわかりません。

    HTMLフォーム

    <form action="main_login.php" method="post" style="text-align:right;">
        Username:   
        <input type="text" name="username" value="" size=20  style="display:inline-block;margin-left:10px"required>
        <br> 
        Password:  
        <input type="text" name="password" value="" size=20 style="margin-left:12px"required> 
        <br>  
        <input type="submit" value="Log In" style="margin-left:75px"=> 
    </form>
    

    MySQL

    <?php
    
        $DB_HOST = 'xxx';
        $DB_USER = 'xxx';
        $DB_PASS = 'xxx';
        $DB_NAME = 'xxx';
    
        $conn = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
        if($conn->connect_errno > 0) {
          die('Connection failed [' . $conn->connect_error . ']');
        }
    
        $myusername = stripslashes($_POST["username"]);
        $mypassword = stripslashes($_POST["password"]);
        $myusername = mysqli_real_escape_string($conn,$_POST['username']);
        $mypassword = mysqli_real_escape_string($conn,$_POST['password']);
    
    
        echo $myusername; // echos
        echo "<br>";
        echo $mypassword; // echos
    
    
        $sql="SELECT * FROM register WHERE username='$myusername' and password='$mypassword'";
        $result=mysqli_query($conn,$sql);
    
        $count=mysqli_num_rows($result);
    
        if($count==1){
            echo "Yep";
        }
        else{
            echo "nope";
        }
    

    N.B .: また、セッションをクリアする必要があります(セッションの破棄 )、サーバー上に古いユーザー名とパスワードをキャッシュしているものがある可能性があります。

    また、列にスペースがないこと、タイプが正しく、長さがデータを保持するのに十分な長さであることを確認してください。通常、VARCHAR(255) 十分すぎるほどですが、password_hash()によって生成されたハッシュパスワードを使用する場合に推奨されます 、パスワードを保存するときに使用する必要がある関数。

    参照:

    スタック上。



    1. PHPの2つの日付の差を計算します

    2. データベースの不明なテーブルで特定の列を見つけますか?

    3. MySQL SELECTを使用して仮想列を作成するにはどうすればよいですか?

    4. Amazonec2のリモートpostgresqlサーバーに接続します