15.PHPでユーザ認証してみる。
 1)ユーザ認証の仕組み(フローチャート)
   ユーザ認証は、ホームページを開くときにユーザ名とパスワードを入力するためのダイアログボックスが   開くベーシック認証とホームページ上にユーザ名とパスワードを入力する場所が存在する場合がある。
   前者は、セキュリティがあまりよくないため重要なページにアクセスさせる場合は使わないように   した方がよい。
   後者は、ユーザ情報がデータベース化されておりデータベースを参照して認証を行う方法で
  データベース認証と呼ばれることがある。当然、ユーザ名とパスワードはクリアテキストで送信されるため
  セキュリティ上問題があります。通常は、SSLによるセキュリティ強化が図られている。    <ユーザ認証のフローチャート>
 
php13-1a ユーザ名とパスワードを入力するフォームを作ります。
  php13-1b  

 データベースに入っているユーザ情報と一致しているかを調べて
一致していれば認証で認証後の処理をします。
一致していなければ認証できていないのでユーザ名とパスワードを再入力できるようにする。

  php13-1c  認証できた場合は、認証後の処理を行います。
 認証できなかった場合は、ユーザIDとパスワードを再入力させるフォームを表示させます。
 2)ユーザ認証で使っている関数(mysql_num_rows())の書式
   mysql_num_rows(リンクID)
   mysqli_num_rows(リンクID)
    ・戻り値 ・・・ MySQLでクエリーした時のリソースの行(レコード)数を返します。

   MySQLのクエリでSELECT文が実行された時は、抽出された行(レコード)の数を返されます。
   抽出されたレコード数が0の場合は、ユーザ名とパスワードが一致しなかったことになります。
      抽出されたレコード数が一つ以上あれば、ユーザ名とパスワードが一致したことになります。
      レコード数が2以上存在するということは、同じユーザ名とパスワードを持つユーザが2名以上
  存在することになります。このような登録ができないように次のユーザ登録のところで行います。

 3)ユーザ認証のための認証データ入力ページ(ファイル名:userNin.htm)    
<!doctype html>
<html>
<head>
<meta charset="utf-8"> <title>ユーザ認証</title> </head> <body> ユーザ認証<br> <form action="userNin.php" method="post" name="form1"> ユーザ名: <input name="fUserName" type="text" id="fUserName"> <br> パスワード: <input name="fPassWd" type="password" id="fPassWd"> <input type="submit" name="Submit" value="認証"> <input type="reset" name="Submit2" value="クリア"> </form> </body> </html>
 4)ユーザ認証を行うページ(ファイル名:userNin.php)    
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>ユーザ認証</title>
</head>
<body>
<?php
$conn=mysqli_connect('localhost','root','******') or exit("MySQLへ接続できません。");
echo "MySQLへ接続できました。<br>";
mysqli_select_db($conn,'userid_db') or exit("データベース名が間違っています。");
$sql="SELECT * FROM userid_tbl where userName='{$_POST['fUserName']}' and passWd='{$_POST['fPassWd']}';";
$result=mysqli_query($conn,$sql) or exit("データの抽出に失敗しました。"); //mysqli_num_rows($MySQL['result'])は、SELECT文で抽出されたレコードの数を返す関数です。
//抽出されたレコード数が0の場合は、ユーザ名とパスワードが一致しなかったことになります。
//抽出されたレコード数が一つ以上あれば、ユーザ名とパスワードが一致したことになります。
//コード数が2以上存在するということは、同じユーザ名とパスワードを持つユーザが2名以上
//存在することになります。
//このような登録ができないように次のユーザ登録のところで行います。
if(mysqli_num_rows($result)!=0){
echo "ユーザ認証できました。{$_POST['fUserName']}様のページです。<br>";
}
else{
echo "ユーザ認証に失敗しました。もう一度入力しなおしてください。";
}
mysqli_close($conn);
?>
</body>
</html>
<課題> 認証に失敗した場合次のように再入力できるように2)のプログラムを変更しなさい。  (以下のように表示させなさい。)  ユーザ名かパスワードが間違っています。もう一度入力しなおしてください。 (← 赤色で表示させる。)
     ユーザ名:   (← 最初に入力したユーザ名を表示させる。)
     パスワード