</syntaxhighlight>
:: スーパーグローバル変数 <var>$_POST</var> が(間違っていないかではなく)あるのかをテストして、なければGETメソッドと判断しています。
:GETメソッドならばフォームを生成します。
::<syntaxhighlight lang=text>
<!-- GET Method -->
<form action="index.php" method="POST"">
<div><label for="username">ユーザー名:</label><input type="text" name="username" id="username"></div>
<div><label for="password">パスワード:</label><input type="password" name="password" id="password"></div>
<input type="submit" value="ログイン">
</form>
</syntaxhighlight>
::を生成します。
:POSTメソッドならば
::ユーザー名とパスワードの両方が一致したら
::<syntaxhighlight lang=text>
::<code><p>ログイン成功</p></code>を生成します。
<!-- POST Method -->
<p>ログイン成功</p>
</syntaxhighlight>
::を生成します。
::片方でも一致しなければ
::<syntaxhighlight lang=text>
::<code><p>ユーザー名 または パスワード が違います。<p></code>を生成します。
<!-- POST Method -->
<p>ユーザー名 または パスワード が違います。<p>
</syntaxhighlight>
::を生成します。
:::(ここでどちらが不一致だったかを教えてはいけません。ブルートフォース攻撃が格段に易しくなります。)
; ファームのレンダリング例
<span style="font-size:1.1rem">ユーザー名:</span><span style="border:2px solid #333;border-radius:4px;background-color:#fff;padding:1px;font-weight: bold"> </span>
<div><span style="font-size:1.1rem">パスワユードザー名:</span><span style="border:2px solid #333;border-radius:4px;background-color:#fff;padding:1px;font-weight: bold"> </span></div>
<div><span style="borderfont-size:1.1rem">パスワード:</span><span style="border:2px solid #333;;border-radius:4px;background-color:#fff;padding:1px;font-weight: 8pxbold">登録 </span></div>
<div><span style="border: 2px solid #333;;border-radius:4px;padding:1px 8px">登録</span></div>
----
;PHPのコード
<syntaxhighlight lang="PHP">
<?php
if( $_POST['username1'] == "yamada" && $_POST['password1'] == "aikotoba" ){
echo "ログイン成功。<br>" ;
}
else {
echo "やりなおしてください。ログインに失敗しました。<br>" ;
echo $_POST['username1'],"と入力されました。<br>" ;
}
?>
</syntaxhighlight>
のようなコードになります。
PHPで条件分岐を使うにはif文を使います。if文とは、「もし~~ならば、〇〇せよ」という命令を実行する文です。
いっぽう、else文は、「もし~~で'''なければ'''、〇〇せよ」という命令を実行する文です。
他の多くのプログラム言語でも、if文とelse文は同様の機能です。
説明の簡単化のため、あらかじめユーザー名とパスワードは登録されているとします。登録されているユーザー名は「yamada」、登録されているパスワード「aikotoba」(合言葉)とします。
さて、webブラウザで、上記の(PHPファイルでなく)htmlファイルのウェブページを見に行ってください。
ログイン成功。
と表示されている画面で、ブラウザのソースコード閲覧機能を使っても、
<syntaxhighlight lang="html5">
ログイン成功。<br>
</syntaxhighlight>
としか表示されません。
ソースコードを見ても、if文は、どこにも書かれていません。(JavaScriptの文法には if文 がある。)
またPHPは、サーバーで公開しても、JavaScriptのコードには変換'''されない'''です。
このようにPHPは、サーバーで公開しても、コードを素のHTMLにしか変換しないです。
また、webブラウザで直接アドレス指定して、上記コード例の場合なら
http://localhost/logincatchTest.php
などに移動しても
やりなおしてください。ログインに失敗しました。
と入力されました。
とブラウザ画面に表示されるだけです。
また、そのwebページのソースコードをブラウザのソース閲覧機能で見ても、
<syntaxhighlight lang="html5">
やりなおしてください。ログインに失敗しました。<br>と入力されました。<br>
</syntaxhighlight>
とhtmlソースコードが表示されるだけです。
このように、PHP側のプログラムは、一切、ブラウザ側には送られず、よってブラウザにはPHPのソースコードは表示されません。さらに、JavaScriptにも変換'''されてない'''事に注目してください。
ブラウザで表示されているソースコードは、素のhtmlタグに変換されたあとのhtmlソースコードです。
なので、パスワードのような機密情報を、冒頭のようなPHPのコードだけでも守ることができます。
=== 実務との違い ===
ただし、実際の応用の際には、より慎重を期して、パスワードなどの機密情報のあるファイルは、ドキュメントルートよりも上側のフォルダに置くなどします。
そして、そのパスワードのファイルとの送受信をすることで、パスワードの成否の判定をします。
しかし本書では説明の単純化のため、冒頭のPHPコード例では、PHPコード内にパスワードの答えを含めました。
なお、一般にwebサイトにログインした場合には、ブラウザに「クッキー」といわれるログイン情報などを残す必要があります。これは <code>setcookie()</code>というPHPの組み込み関数、およびPHPのスーパーグローバル変数 $_COOKIE で可能です。
また、ブラウザにクッキー変数が存在しているかどうかは、isset()というPHP関数で調べられます。
その他、実務と手本のコードの相違点として、一般の会員制サイトでは、入力ボックスに何も入力されていない段階では、「ログイン」ボタンなどを押せないようになっていますが、その機能の実装はJavaScriptで出来ます。JavaScriptのif文や、onKeyUpプロパティなどを使えば、ボタンを押せない機能を実装できます。(詳しくはwikibooks『[[JavaScript/イベント処理]]』を参照してください。)
==== どこがダーティーか? ====
さらにMySQLなどのデータベース・ソフトウェアを使うことで、ユーザー名やらパスワード名などの会員情報は、MySQLなどに保管します。実務では、あまり、PHPのコード内やテキストファイルなどで直接にパスワードなどを保管することは無いです。
このコードには以下のような欠点があり、アジャイルにはともかく実務には使えません。
# スクリプトに認証情報がハードコードされている
#* サーバーに侵入されなければ、JavaScript のように丸見えにはなりませんが「サーバーに侵入されない」前提で認証関係のコードを書いてはいけません。
# メソッドを拠り所にフォームと認証を切り替えている
#* 細工したユーザーエージェントからならば、メソッドを自由に切替えてチャレンジできます。
# チャレンジ回数に限界がない
#* ブルートフォース攻撃に遭った時に、回数制限がないのは致命的な欠点です。
== クッキーの入れ方 ==
|