PHPで、IDとパスワードの登録画面、確認画面をつくる

# IDとパスワードの登録画面

## ソース
```html

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
</head>
<title>Hello shop</title>
<body>
  スタッフ追加<br />
  <br />
  <form method="post" action="staff_add_check.php"> <!--postメソッドで、staff_add_check.phpに情報を引き渡す-->
    スタッフ名を入力してください。<br />
    <input type="text" name="name" style="width:100px"><br /> <!--入力された値はtext型。値はnameと名づける-->
    パスワードを入力してください。<br />
    <input type="password" name="pass" style="width:100px"><br /> <!--入力された値はpassword型。アスタリスク表示される。値はpassと名づける。-->
    パスワードをもう一度入力してください。<br />
    <input type="password" name="pass2" style="width:100px"><br /> <!--入力された値はtext型。値はpass2と名づける-->
    <br />
    <input type="button" onclick="history.back()" value="戻る"> <!--戻るボタンをクリックすると、前の画面に遷移する-->
    <input type="submit" value="OK"> <!--OKボタンをクリックすると、staff_add_check.phpに遷移する-->
  </form>
</body>
</html>
```
## 画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/1b6e4990-63e2-996f-8bd0-6d8df874b6d8.png)

# 確認画面
## ソース
```php
<!DOCTYPE htmel>
<html>
<head>
  <meta charset="utf-8">
</head>
<title>Hello shop</title>
<body>
<?php
$staff_name=$_POST['name']; //前の画面から入力値を受け取り、$staff_nameに格納
$staff_pass=$_POST['pass']; //前の画面から入力値を受け取り、$staff_passに格納
$staff_pass2=$_POST['pass2']; //前の画面から入力値を受け取り、$staff_pass2に格納

$staff_name=htmlspecialchars($staff_name,ENT_QUOTES,'UTF-8'); //文字列に変換（セキュリティ対策）
$staff_pass=htmlspecialchars($staff_pass,ENT_QUOTES,'UTF-8'); //文字列に変換（セキュリティ対策）
$staff_pass2=htmlspecialchars($staff_pass2,ENT_QUOTES,'UTF-8'); //文字列に変換（セキュリティ対策）

//$staff_nameがカラならエラーメッセージを表示する
//$staff_nameが入力されていれば、$staff_nameを表示する
if($staff_name==''){
  print 'スタッフ名が入力されていません。<br />';
}
else
{
  print 'スタッフ名：';
  print $staff_name;
  print '<br />';
}

//$staff_passがカラならエラーメッセージを表示する
if($staff_pass==''){
  print 'パスワードが入力されていません。<br />';
}

//$staff_pass、$staff_pass2が一致しなければ、エラーメッセージを表示する
if($staff_pass!=$staff_pass2){ //もしパスワード1とパスワード2の値が異なるなら
  print 'パスワードが一致しません。<br />';
}

//$staff_name、$staff_pass、$staff_pass2がカラなら、または、$staff_pass、$staff_pass2が一致しなければ、戻るボタンのみを表示する
//入力項目が適切なら、戻るボタンとOKボタンを表示する。
if($staff_name==''|| $staff_pass=='' || $staff_pass2=='' || $staff_pass!=$staff_pass2){
  print '<form>';
  print '<input type="button" onclick="history.back()" value="戻る">';
  print '<form>';
}
else
{
  $staff_pass=md5($staff_pass); //パスワードをMD5規約に則って32桁のランダム値に変換
  print '<form method="post" action="staff_add_done.php">';
  print '<input type="hidden" name="name" value="'.$staff_name.'">'; //'<input type="hidden" name="name" value="'と$staff_nameをドットで連結
  print '<input type="hidden" name="pass" value="'.$staff_pass.'">'; //hiddenにすることで画面に表示することなく次の画面に値を引き渡せる
  print '<br />';
  print '<input type="button" onclick="history.back()" value="戻る">';
  print '<input type="submit" value="OK">';
  print '</form>';
}
?>
</body>
</html>
```
## 画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/d1e348f4-e28f-fca0-c739-7c90047cfa91.png)

# データベース接続

```php3
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
</head>
<title>Hello shop</title>
<body>

<?php
//tryはデータベースの接続エラー対策
try
{
  // POSTメソッドで前の画面の入力値を取得する
  $staff_name = $_POST['name'];
  $Staff_pass = $_POST['pass'];

  // セキュリティ対策入力値を文字列に変換
  $staff_name = htmlspecialchars($staff_name,ENT_QUOTES,'UTF-8');
  $Staff_pass = htmlspecialchars($Staff_pass,ENT_QUOTES,'UTF-8');

  //データベースに接続
  $dsn = 'mysql:dbname=shop;host=localhost;charset=utf8'; //shopはデータベース名を入力。''内は一切スペースを入れてはいけない
  $user = 'root'; //rootにはユーザ名を入力
  $password = '';  //''内にはパスワードを入力
  $dbh = new PDO($dsn, $user, $password);
  $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //この行は定型文としてこのまま書く

  // SQL分を使ってレコードを追加
  $sql ='INSERT INTO mst_staff(name,password) VALUES (?,?)'; //'INSERT INTO mst_staff(name,password) VALUES (?,?)'を変数$sqlに格納する
  $stmt = $dbh->prepare($sql); // レコードを追加する準備。この行は定型文としてこのまま書く
  $data[] = $staff_name; // ?にセットしたいデータが入っている変数を書く
  $data[] = $Staff_pass; // ?にセットしたいデータが入っている変数を書く
  $stmt->execute($data); // SQL文で指令を出すための命令文。この行は定型文としてこのまま書く

  // データベースから切断するプログラム
  $dbh = null;

  //結果を表示
  print $staff_name;
  print 'さんを追加しました。<br />';

}
catch (Exception $e)
{
  print 'ただいま障害により接続できません。';
  exit(); //強制終了の命令
}
?>

<a href="sataff_list.php">戻る</a>

</body>
</html>
```

## 画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262601/2138d8b4-5a28-4575-4fbf-607015f68e38.png)