PHP+MySQLで簡単なログインフォームを作成する
ログインフォームにメールアドレスとパスワードを入力して、
登録ボタンを押下するとMySQLのDBにデータが登録される簡単なWebアプリ
開発言語:PHP
環境:MAMP(Apache + MySQL)
MySQLのデータベースを追加する
phpMyAdminにアクセスする
以下にデータベース名を入力して[作成]ボタンを押下する
作成したデータベースにテーブルを追加する
今回はusersというテーブル名でカラムはEmail、Password、Nameとするので3を入力します。
次に挿入タブから3つほどデータを追加しておく
今回は以下のデータを用意した
ソースコード
先にソースコードを以下に記載する
<?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 "登録が失敗しました";