Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

ソース

<!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

確認画面

ソース

<!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

データベース接続

<!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

harufuji
趣味プログラマです。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away