Robinit

IT関連メモ

PHP+MySQLで簡単なログインフォームを作成する

PHP+MySQLで簡単なログインフォームを作成する。

f:id:wonder_three:20180131232324p:plain

ログインフォームにメールアドレスとパスワードを入力して、
f:id:wonder_three:20180131232444p:plain

登録ボタンを押下するとMySQLのDBにデータが登録される簡単なWebアプリ
f:id:wonder_three:20180131232601p:plain

開発言語:PHP
環境:MAMPApacheMySQL

MySQLのデータベースを追加する

phpMyAdminにアクセスする
以下にデータベース名を入力して[作成]ボタンを押下する
f:id:wonder_three:20180131234136p:plain

作成したデータベースにテーブルを追加する
今回はusersというテーブル名でカラムはEmail、Password、Nameとするので3を入力します。
f:id:wonder_three:20180131234242p:plain

次に挿入タブから3つほどデータを追加しておく
今回は以下のデータを用意した
f:id:wonder_three:20180131235044p:plain

ソースコード

先にソースコードを以下に記載する

<?php
    // データーベースへ接続
    $link = mysqli_connect("localhost","root","root","MemberApp");
    
    // 接続に失敗すれば強制終了
    if(mysqli_connect_error()){
        die("Failed Connect DB.");
    }
    //データが入力されているかどうかチェックする
    if(array_key_exists('email',$_POST) OR array_key_exists('password', $_POST))
    {
        if($_POST['email'] == ''){
            echo "Emailアドレスを入力してください";
        }
        elseif($_POST['password']==''){
            echo "Passwordを入力してください";
        }
        else{
            //メールアドレスが既に使用されていないかチェックする
            $query = "SELECT `id` FROM `users` WHERE email = '".mysqli_real_escape_string($link,$_POST['email'])."'";
            $result = mysqli_query($link,$query);
            if(mysqli_num_rows($result) > 0){
                echo "既にそのメールアドレスは使用されています。";
            }else{
                //未使用の場合、データベースに登録する
                $query = "INSERT INTO `users` (`email`,`password`) VALUES('"
                    .mysqli_real_escape_string($link,$_POST['email'])
                    ."','"
                    .mysqli_real_escape_string($link,$_POST['password'])
                    ."')";
                if(mysqli_query($link,$query)){
                    echo "登録が成功しました。";
                } else{
                    echo "登録が失敗しました";
                }
            }
        }
    }
?>
<!DOCTYPE html>
<form method="post">
    <input type="text" name="email" placeholder="Email">
    <input type="password" name="password" placeholder="password">
    <input type="submit" value="登録する">
</form>

データーベースへ接続

mysqli_connect()を使ってデータベースへ接続

    $link = mysqli_connect("localhost","root","root","MemberApp");

第1引数はMySQL サーバーのホスト名もしくはIPアドレス
第2引数はMySQLのユーザー名
第3引数はMySQLのパスワード
第4引数はクエリが行われるデフォルトのデータベース

詳細は以下
PHP: mysqli::__construct - Manual

mysqli_connect_error() で""以外が返ってきた場合、
接続に失敗したとみなし、die()で強制終了する

    if(mysqli_connect_error()){
        die("Failed Connect DB.");
    }

データが入力されているかどうかチェックする

array_key_exists()でPOSTで受け取ったデータに
'email'もしくは'password'が入っていなければ、エラー表示を行う。

    if(array_key_exists('email',$_POST) OR array_key_exists('password', $_POST))
    {
        if($_POST['email'] == ''){
            echo "Emailアドレスを入力してください";
        }
        elseif($_POST['password']==''){
            echo "Passwordを入力してください";
        }

メールアドレスが既に使用されていないかチェックする

初めに作成したusersテーブルからSELECT文を使い、
入力されたemailがデータベースに登録済みかどうか判定する

            //メールアドレスが既に使用されていないかチェックする
            $query = "SELECT `id` FROM `users` WHERE email = '".mysqli_real_escape_string($link,$_POST['email'])."'";
            $result = mysqli_query($link,$query);
            if(mysqli_num_rows($result) > 0){
                echo "既にそのメールアドレスは使用されています。";
            }else{

mysqli_query()でデータベース上でクエリを実行する。
第1引数は、mysqli_connect() で取得したリンクID
第2引数は実行するクエリ、今回はSELECT文
PHP: mysqli::query - Manual

mysqli_real_escape_string()は、
接続の現在の文字セットを考慮して、SQL 文で使用する文字列の 特殊文字エスケープする 関数
例えば名前に'が入っている場合は、そのまま渡すとクエリの実行に失敗するので、
この関数で特殊文字エスケープしておく

mysqli_num_rows()で取得した結果が何個あるか?を取得する。
今回は入力したemailとデータベースに登録されているemailが一致しなければ、
未登録のemailと判断して次に進む

データベースに登録する

INSERT文で入力されたemailとpasswordをデータベースへ登録する。
mysqli_query()が成功すれば登録されたと判断し echo でその旨ユーザに通知する

$query = "INSERT INTO `users` (`email`,`password`) VALUES('"
    .mysqli_real_escape_string($link,$_POST['email'])
    ."','"
    .mysqli_real_escape_string($link,$_POST['password'])
    ."')";
if(mysqli_query($link,$query)){
    echo "登録が成功しました。";
} else{
    echo "登録が失敗しました";