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

フォーム、mysql、phpを送信する

    ここにはいくつか間違っていることがあります。

    間違った識別子> の列(および引用符)の場合:

    ('id', 'username', 'password', 'email')
    

    それらを削除します

    (id, username, password, email)
    

    またはバックティックを使用する

    (`id`, `username`, `password`, `email`)
    

    mysql_error() エラーが発生するはずですが、次の理由で発生しませんでした:

    • MySQLAPIをmysqli_と混合しています 接続するには、mysql_ クエリで。

    これらの2つの異なるAPIは互いに混ざり合いません。

    mysqli_を使用する 排他的に、現在のクエリを次のように変更します:

    if($query = mysqli_query($connect, "INSERT...
    

    mysql_error()を変更します mysqli_error($connect)

    そのブロックの書き直しとして:

    if(isset($_POST["submit"])){
        if($query = mysqli_query($connect,"INSERT INTO users ('id', 'username', 'password', 'email') VALUES('', '".$username."', '".$password."', '".$email."')")){
            echo "Success";
        }else{
            echo "Failure" . mysqli_error($connect);
        }
    }
    

    エラーをテストするためだけに 列の周りの引用符を現在の状態に保ちながら、上記で概説したように変更を加えます。次に、MySQLがスローするエラーが表示されます。次に、上記で概説したように実行して、列名の前後の引用符を削除するか、バッククォートに置き換えます。

    あなたが見たチュートリアルは、バックティックを非常によく使用しているかもしれませんが、それらが実際にバックティックであり、一重引用符ではないことを伝えるにはおそらく十分に区別できませんでした。

    ただし、現在のコードはSQLインジェクションに公開されています。 mysqliを使用します プリペアドステートメント付き 、またはプリペアドステートメントを使用したPDO はるかに安全です

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

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

    また、行う代わりに:

    $connect = mysqli_connect("localhost", "root", "") or die("Could not connect to server!");
    mysqli_select_db($connect, "php_forum") or die("Could not connect to database!");
    

    マニュアルに記載されているように、代わりにエラーをチェックする必要があります

    $link = mysqli_connect("myhost","myuser","mypassw","mybd") 
    or die("Error " . mysqli_error($link)); 
    

    だからあなたの場合:

    $connect = mysqli_connect("localhost", "root", "","php_forum") 
    or die("Error " . mysqli_error($connect)); 
    

    編集: action="register.php"を変更しました action=""へ 同じページ内でコード全体を使用しているためです。

    <!DOCTYPE HTML>
    <html>
        <head>
            <title>Register</title>
        </head>
        <body>
            <form action="" method="POST">
                Username: <input type="text" name="username">
                <br/>
                Password: <input type="password" name="password">
                <br/>
                Confirm Password: <input type="password" name="confirmPassword">
                <br/>
                Email: <input type="text" name="email">
                <br/>
                <input type="submit" name="submit" value="Register"> or <a href="login.php">Log in</a>
            </form>
        </body>
    </html>
    <?php
        require('connect.php');
        $username = $_POST['username'];
        $password = $_POST['password'];
        $confirmPassword = $_POST['confirmPassword'];
        $email = $_POST['email'];
    
        if(isset($_POST["submit"])){
            if($query = mysqli_query($connect,"INSERT INTO users (`id`, `username`, `password`, `email`) VALUES ('', '".$username."', '".$password."', '".$email."')")){
                echo "Success";
            }else{
                echo "Failure" . mysqli_error($connect);
            }
        }
    ?>
    


    1. Laravel:属性ごとにコレクションからオブジェクトを取得

    2. mySQLselectコマンドから取得するデータをテーブルに一度に挿入します

    3. CodeIgniter-ses_destroy()は大量のCPUを使用します

    4. エンベロープを取得します。つまり、重複する期間