PHPとは
PHPとは、ウェブサーバに置かれるソフトウエアのApacheモジュールとして動作するオープンソースのサーバーサイドスクリプト言語。特にウェブ開発に適しており、HTMLに埋め込むことができる。
HTTPのリクエストを受けてphpファイル(拡張子 .php)を呼び出し、PHPスクリプトをサーバ上で処理した後、ブラウザへ返答する流れで実行される。
PHPの書き方のルール
PHPのコードは特別な開始および終了の処理命令 <?php と ?> で囲まれており、echoコマンドを用いることで処理の結果や変数をHTMLに出力(置換)できる。
- ◆基本的な書き方
<?php echo "出力したい文字"; ?>
- 例:「べムは(妖怪)人間です。」の( )内をPHPで出力する。
<p>べムは <?php echo "妖怪"; ?> 人間です。</p>
htmlspecialchars()は、HTMLにおいて特殊な意味を持つ文字を、そのまま表示できるようHTMLの表示形式に変換します。
- ◆基本的な書き方
<?php $str = "<a href="sample">サンプル</a>"; echo htmlspecialchars($str); ?>
※
<a href="sample">サンプル</a>と変換される。PHPの関数の例
- ● require() :指定したファイルの内容に置換する(ループ処理は不可)。
- ● require_once() :ファイルを一度だけ読み込んで実行する。
- ● foreach() : ループさせる。
- ● reg_replace() : テキスト内の改行を改行要素に置換する。
- ● array() : 配列を設定する。
PHPのコメントの挿入
以下の場合、コメントとみなされてプログラムに影響を与えない。
- ● 1行のコメント://から行末まではコメントとみなされる
- ● 1行のコメント:#から行末まではコメントとみなされる
- ● 複数行のコメント: /* と */ でコメントする範囲を囲む
パラメータの受取方法
フォームのリクエストから定義済み変数を参照し、リクエストに含まれるクエリ(name属性の値)を取得して実行処理できる。
- ● echo $_POST["name属性名"]; //POST
- ● echo $_GET["name属性名"]; //GET
クロスサイトスクリプティング(XSS)対策
フォームの脆弱性を狙い、別のサイト(クロスサイト)からJavaScriptを実行させてCookieなどを盗む「XSS」対策として、htmlspecialchars()関数を使って入力内容をそのまま出力せずに、実態参照(特殊文字を記述するための符号)に置き換えて無効化する必要があります。
- ◆そのまま出力してしまう悪い例
<?php echo <p>Welcomei, Mr..$_GET[name]..</p> ?>
- ◆変換して出力するよい例
<?php echo "Welcomei, Mr." htmlspecialchars($_GET["name"])."."; ?>
SQLインジェクション対策
悪意のあるSQLをフォームに記述して、DBの破壊やデータの取得をするSQLインジェクションの対策としては、mysql_real_escape_string() 関数を使って'(シングルクォート)などを無効化する方法があります。
- ◆WHERE節(検索の条件)をそのまま記述した悪い例
<?php $query="SELECT * FROM member WHERE id='".$_GET["member_id"])."';"; $result=mysql_query($sql,$db); ?>
- ◆シングルクォートをエスケープするよい例
<?php $query="SELECT * FROM member WHERE id='".mysql_real_escape_string($_GET["member_id"])."';"; $result=mysql_query($sql,$db); ?>
SQLによるデータベースの操作
データベースに対する操作はSQLという言語で定義されています。主に INSERT、SELECT、UPDATE、DELETEや、DDL、DML、DCLによるコマンドによってテーブル、データベースへの操作が行われます。
PHPでのデータベースサーバへの接続
PHPによるデータベースへの接続と問合せに関する MySQLの関数に以下のものがあります。
- ◆MySQLサーバへの接続・問合せ・切断まで
<? php $host="localhost"; //DBサーバホスト名 $user="admin"; //接続用アカウント $passwd="admin2012"; //接続用パスワード $db=mysql_connect($host, $user, $password); //上記1.参照 $db_name="members"; //データベース名を返す mysql_select_db($db_name, $db); //上記2.参照 $sql="select*from member"; //レコードを検索 $result=mysql_query($sql, $db); //上記3.参照 mysql_close($db); //上記4.参照 ?>