#何をするか
PHPでログイン機能を実装する。
(簡易的なもの)
なお、本記事はmysqlを使用している。
また、ローカル環境内で使用するために
$link= mysqli_connect("localhost","root","root","app")
としている。
memberappは今回の作業ファイルの名前である。
#注意点
なお、今回はパスワードなどのセキュリティについては考えていないため、本格的な実装をする際には注意が必要である。
あくまでも、「こんなことができる」レベルだと思ってください。
今回使用している環境は、PHP7です。
#実行手順
1.Eメールとパスワードの入力フォーム、「登録」ボタンの設置
2.データが入力されているかどうかのチェック
3.メールアドレスがすでに使用されているかのチェック
4.重複がなければユーザー登録をする
5.ユーザー登録に成功しました、というメッセージを表示する
#1.登録ボタンの設置
まずはHTMLに以下を記述する。
<form method="post">
<p>メールアドレスを入力してください</p>
<input name="email" type="text" placeholder="Eメール">
<p>パスワードを入力してください</p>
<input name="password" type="text" placeholder="パスワード">
<input type="submit" value="登録する!">
</form>
するとこのような画面になる。
#2.データが入力されているかどうかのチェック
次は、PHPでの記述となる。
if(array_key_exists('email', $_POST) OR array_key_exists('password',$_POST)){
if($_POST['email'] == ''){
echo "Eメールアドレスを入力してください";
}elseif($_POST['password'] == ''){
echo "パスワードを入力してください";
}
}
array_key_exists()の部分で、指定したキーまたは文字が配列にあるかどうかを調べている。
今回の場合、
'email'というキーが$_POST すなわち このフォームによって送信されたものに存在するかどうか、を調べていることになる。
※参考資料
http://php.net/manual/ja/function.array-key-exists.php
#3.メールアドレスがすでに使用されているかのチェック
else{
$query = "SELECT `id` FROM `users` WHERE email ='".mysqli_real_escape_string($link,$_POST['email'])."'";
$result = mysqli_query($link,$query);
}
mysqli_real_escape_stringは、SQLで使用する特殊文字を回避するために使用している。
*参考資料
http://php.net/manual/ja/mysqli.real-escape-string.php
つまり、先ほどのコードとつなぎ合わせると、以下のようになる。
if(array_key_exists('email', $_POST) OR array_key_exists('password',$_POST)){
if($_POST['email'] == ''){
echo "Eメールアドレスを入力してください";
}elseif($_POST['password'] == ''){
echo "パスワードを入力してください";
}else{
$query = "SELECT `id` FROM `users` WHERE email ='".mysqli_real_escape_string($link,$_POST['email'])."'";
$result = mysqli_query($link,$query);
}
}
#4.重複がなければユーザー登録をする
まずは重複がある場合のエラー文を作る。
if(mysqli_num_rows($result) > 0){
echo "そのメールアドレスは既に使用されています";
}
mysqli_num_rows リザルトの結果を返すことになる。
*参考資料
http://php.net/manual/ja/mysqli-result.num-rows.php
この場合、3番でチェックしたもの(つまり$result)が1つでもあれば
「そのメールアドレスは既に使用されています」というエラー文を出している。
次に、重複がなかった場合(つまりユーザー登録ができる場合)の記述をする。
else {
$query = "INSERT INTO `users` (`email`,`password`) VALUES
('".mysqli_real_escape_string($link,$_POST['email'])."','".mysqli_real_escape_string($link,$_POST['password'])."')";
INSERT INTOでユーザーテーブルに追加する旨を記述する。
その際に、VALUEには mysqli_real_escape_string()としたemailとpasswordを追加すると記述する。
#5.ユーザー登録に成功しました、というメッセージを表示する
if(mysqli_query($link,$query)){
echo "おめでとうございます、登録されました";
} else {
echo "登録に失敗しました";
}
無事、登録の成否次第で文を表示するようにした。
#完成ソースコード
<?php
$link=
mysqli_connect("localhost","root","root","app");
if(array_key_exists('email', $_POST) OR array_key_exists('password',$_POST)){
if($_POST['email'] == ''){
echo "Eメールアドレスを入力してください";
}elseif($_POST['password'] == ''){
echo "パスワードを入力してください";
}else{
$query = "SELECT `id` FROM `users` WHERE email ='".mysqli_real_escape_string($link,$_POST['email'])."'";
$result = mysqli_query($link,$query);
$query = "SET GLOBAL sql_mode=NO_ENGINE_SUBSTITUTION";
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 "登録に失敗しました";
}
}
}
}
?>
<form method="post">
<p>メールアドレスを入力してください</p>
<input name="email" type="text" placeholder="Eメール">
<p>パスワードを入力してください</p>
<input name="password" type="text" placeholder="パスワード">
<input type="submit" value="登録する!">
</form>
(もし、INSERTがうまくいかず、登録に失敗しました となる場合)
$query = "SET GLOBAL sql_mode=NO_ENGINE_SUBSTITUTION";
mysqli_query($link,$query)
をINSERT文の前に記述してください