PHPで会員登録にチャレンジ!【3.入力データチェックしてみよう】

PHP

それではこれから、PHPを書いていきたいと思いますが、
PHPの基本を簡単に説明します。

PHPの概要

PHPのプログラムは、「php」という拡張子で
「<?php」 と 「?>」の間に記述します。

そして、変数(数字や文字を保管するところ)は
「$name」のように「$」で始め、
半角小文字自由に付けられます。

そして、「if」や「print」などの命令があり、
命令の後に「セミコロン(;)」を付けます。

命令文についてはC言語やPerlに使われている
ものと似ています。

ここではPHPの概要を知っていただきたいだけなので、
命令文を列記することはしません。

そして、PHPでデータベースを扱う言語はSQLです。

前回データベースを作成しましたが、
「phpMyAdmin」ではMySQLを使用しています。

入力送信されたデータを受け取る

会員登録のファイルでは、form と input とで
登録する入力内容を送信していました。

その送信されたデータを受け取らないと
チェックできません。

その、送信されたデータは、formタグの method 属性で
指定された、postget かにより異なります。

今回は post なので、「$_POST」で受け取ります。

受け取る各項目別の内容は、
name属性で指定した名前を項目名として
「$_POST[‘項目名’]」に保存されています。

送信データ:<input type=”text” name=”username”>
受け取るデータ:$_POST[‘username’]

よって受け取るデータは、
ユーザー名:$_POST[‘username’]
メールアドレス:$_POST[‘email’]
パスワード:$_POST[‘password’]
になります。

入力データをチェック

それでは、入力データをチェックします。

ここでのチェックは、ユーザー名が重複していないか、
メールアドレスとパスワードは入力されたかどうかを
確認します。

重複チェックはデータベースにアクセスしなければ
いけないので、あとで変更します。

会員登録のファイル名を[register.html]にしたので、
チェックするファイル名を[register_check.php]
しましょう。

ファイル名:register_check.php

<記述例>

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8">
    <title>タイトル</title>
  </head>
  <body>
<?php

$username = $_POST['username'];
$email = $_POST['email'];
$password = $_POST['password'];

$username = htmlspecialchars($username);
$email = htmlspecialchars($email);
$password = htmlspecialchars($password);

if($username == '')
{
  print 'ユーザー名が入力されていません。<br>';
}
else
{
  print 'ユーザー名:'.$username.'<br>';
}
if($email == '')
{
  print 'メールアドレスが入力されていません。<br>';
}
else
{
  print 'メールアドレス:'.$email.'<br>';
}
if($password == '')
{
  print 'パスワードが入力されていません。<br>';
}

if($username == '' or $email == '' or $password == '')
{
  print '<form>';
  print '<input type="button" onclick="history.back()" value="戻る">';
  print '</form>';
}
else
{
  $password=md5($password);
  print '<form method="post" action="register_end.php">';
  print '<input type="hidden" name="username" value="'.$username.'">';
  print '<input type="hidden" name="email" value="'.$email.'">';
  print '<input type="hidden" name="password" value="'.$password.'">';
  print '<br>';
  print '<input type="button" onclick="history.back()" value="戻る">';
  print '<input type="submit" value="OK">';
  print '</form>';
}

?>
  </body>
</html>

PHPで入力チェックを行う処理を記述しましたが
わからないことが多いと思いますので、
1つ1つ解説していきたいと思います。

受け取ったデータを変数に代入する

まず、送信データを受け取り変数に代入します。

代入する変数名は、ユーザー名が「$username」
メールアドレスは、「$email」、
パスワードは、「$password」にします。

変数に代入する方法は、右から左へ代入するので
$変数名 = $_POST[‘項目名’];
となります。

<記述例>(10行目~12行目)

$username = $_POST['username'];
$email = $_POST['email'];
$password = $_POST['password'];欄

データをサニタイズ(無害化)する

フォームに無効な記号プログラミングコードなど
を入力して送られることもあります。

いたずらなど意図したことではなくても
予期せぬ動作をし不具合を起こす可能性があります。

それを防止するために
サニタイズ(消毒・無害化)します。

サニタイズは htmlspecialchars関数を使います。

例:htmlspecialchars(対象文字列);

<記述例>(14行目~16行目)

$username = htmlspecialchars($username);
$email = htmlspecialchars($email);
$password = htmlspecialchars($password);

サニタイズ前後の変数名は同じでも構いませんので
今回は同じにしています。

IF命令を使う

「register_check.php」18行目~56行目
使用されているIF命令を説明します。

if命令は、
「もし○○だったらこうします、
違ったらこうします」
という条件分岐に使われます。

例:
if(条件式){
条件式が真(true)であれば実行
}else{
条件式が偽(false)であれば実行
}

つまり、else が
ifの条件式があっていたらifの処理
あっていなかったら else の処理が実行されます。

ちなみに、複数の条件を分岐させるために(elseif)
を使うこともあります。

例:
if(条件1){
条件1が真(true)であれば実行
}elseif(条件2){
条件2が真(true)であれば実行
}else{
条件1が偽(false)であれば実行
}

条件式で使われる比較演算子

条件式で使われる比較演算子
例として $a と $b とを比較してみます。

等しい場合:$a == $b
等しくない場合:$a != $b または $a <> $b
$a が大きい場合:$a > $b
$a が小さい場合:$a < $b

また、条件が複数指定する場合に使う論理演算子
例として、条件1と条件2を使い説明します。

条件1と条件2が両方真である場合:AND または &&
条件1と条件2のどちらかが真である場合:OR または ||

記述例:
if(条件1 AND 条件2)
if(条件1 && 条件2)
if(条件1 OR 条件2)
if(条件1 || 条件2)

PHPで文字列を出力する命令

PHPで文字列を出力する命令は主に
「echo」「print」があります。

例:echo $username;
例:print ‘文字列出力’;

また複数の文字列を続けて出力する場合
ピリオド(.)を使います。

例:echo ‘文字列出力’.$username;
例:print $email.’画面に表示する <br>’;
※ <br>(改行タグ)などHTMLタグも出力できます。

history.back()で前の画面に戻る

inputタグで onclick属性history.back()
指定することで、前の画面に戻ることができます。

「register_check.php」の42行目と53行目とに
記述されています。

パスワードを暗号化する

パスワードは画面でも「*****」となって見えない
ようにしています。

セキュリティの関係から、パスワードは暗号化します。

ここでは、パスワードをMD5という暗号規格
則って、暗号化をしています。

例:$password=md5($password);

「register_check.php」の47行目
記述されています。

hiddenでデータをこっそり送信

inputタグで type属性hidden
指定することで、画面に表示することなく
送信することができます。

実際の動きを見てみよう

ちょっと長かったですが、一通り「register_check.php」
説明をしていきました。

以前記述した「register.html」には、
form の送信先が書かれていませんでした。

送信先は action で指定するので、
「action=”register_check.php”」
10行目に書き足します。

ファイル名:register.html

<記述例>

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8">
    <title>会員登録画面</title>
  </head>
  <body>
    <main>
      <section>
        <form method="post" style="background: lightcyan; margin:10px; padding:10px; border:6px solid royalblue; width:400px;" action="register_check.php">
          <h3>会員登録画面</h3>
            ユーザー名:<input type="text" name="username" size="30"style="margin:6px;"><br>
          メールアドレス:<input type="email" name="email" size="30"style="margin:6px;"><br>
            パスワード:<input type="password" name="password" size="30"style="margin:6px;"><br>
          <input type="submit" value="登録する" style="margin:10px 0 10px 40%;">
        </form>
      </section>
    </main>
  </body>
</html>

もし、XAMPPをインストールしてあるなら、
ここに掲載した、「register.html」
「register_check.php」とをファイルとして保存します。

エンコードをUTF-8にして保存しますが、
保存方法をメモ帳を例に説明すると
メモ帳を起動し[ファイル]をクリックします。

[名前を付けて保存]をクリックします。

ファイル名を入力し、文字コード[UTF-8]を選択し、
[保存]をクリックするとUTF-8で保存できます。

ドキュメントルート(DocumentRoot)以下のフォルダ
2つのファイルをコピーし、「register.html」
実行してみてください。

ユーザー名やメールアドレス、パスワードを
適当に入力し、「register_check.php」での
表示を見ると実際の挙動がわかります。

何も入力しないとどのように表示するか、
入力した場合、どのように表示するのかを
確認することで理解できると思います。

終わりましたら、XAMPPのコントロールパネルで
[Apache]列の[Stop]をクリックし[Apache]を
終了させることをお忘れなくお願いします。

コメント

タイトルとURLをコピーしました