PHPに関する私的なメモです。書いた本人にしかわからない所が多いです。

メモ

phpとは

・ブラウザからの要求に応じて動的にページを作成してブラウザに返すプログラム
・また動的なページを作成する元となるデータを格納するのにデータベースが必要となる
・動的にページを作成するプログラムはphpのほかに、Ruby, Perl, Javaなどがある。
・ブラウザからの要求を、Webサーバー(Apache)が受け取り、PHPを呼び出す。PHPは必要なデータをデータベースから取得して処理し、ブラウザで表示できるHTML形式に変換する。できたHTMLをWebサーバー(Apache)がブラウザに返す。
・インターネットのアドレスが.phpとなっているサイトはphpを使って作成されたサイトである。

PHPの特徴

・メジャーなOS(Linux, Windows, MacOS X, UNIX)で全て動作する。
・ほとんどのWebサーバー(Apache, IIS)をサポートしている。
・多くのデータベース(MySQL, Orcle, PostgreSQLなど)をサポートしている。
・上記の特徴から多くの環境で使うことができる。

・さらにPHPはmySQLサーバーに接続してデータを操作するためのPDO(PHP Data Objects)というクラス(処理の雛形のこと)が
用意されているため、データベース操作がしやすい。

PHPの記述方法

・HTMLの中に、PHPで書いたスクリプトを埋め込む形で記述する。

PHPのスクリプト書き出し

<?php ………. ?> …..の部分にphpスクリプトを記載する。

PHPの変数定義

$変数名 = 値;

配列定義(連想配列)

$配列名[キー] = 値;
【例】
$names [0] = ‘apple’;
$names [1] = ‘orange’;
$names [3] = ‘banana’;

文字の切り出し substr

echo substr(“ABCDEFGHIJ”, 3, 4);
この結果はDEFG ※最初の文字は0番目の扱い

繰り返し処理

「$配列」の値を順番に「$変数」に投げ込んで「処理」を繰り返す。「処理」の箇所には「$変数」を使った処理を記述する
foreach ($配列名 as $変数) { 処理 }

シングルクォーテーションとダブルクォーテーションの違い

シングルクォーテーション:囲われた中中身はたんなる文字列の扱いとなり、変数は変換されない
ダブルクォーテーション:囲われた中身の変数が展開される。
基本的にはダブルクォーテーションで囲って、変数を展開したくない場合のみシングルクォーテーションを使うのが良いと思う。

データベースにアクセスする

1.まずデータソース名DSNを変数定義する
$dsn = ‘mysql:host = localhost; dbname= yourdbname; charset=utf8’;
$user = ‘yourname’;
$password = ‘yourpassword’

2. 発生時の処理を記述する(DB接続エラーのメッセージを画面に表示)
下はPDOExceptionでPDO(PHP Data Objects)の例外を指定し、$eに格納する。「->」はオブジェクトのプロパティやメソッドにアクセスするためのでアロー演算子とよぶ。アロー演算子で、オブジェクト$eのgetMessage()というメソッドを呼び出す。
try{
通常時の処理
} catch (PDOException $e){
echo ‘<p>connection error: ‘, $e->getMessage(), ‘</p>’;
}

3.通常時の処理(DBへの接続)を記述する
3-1:DBへ接続
【書式】
$pdo = new PDO(データソース名, ユーザー名, パスワード);
PDOオブジェクト ->setAttribute(PDOのプロパティ, プロパティ値);
【例】
$pdo = new PDO ($dsn, $user, $password);
$pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
※2行目はsetAttributeでPDOオブジェクトのプロパティを設定している。プロパティを第一引数に、そのプロパティに対する設定値を第二引数に指定する。PDO::ATTR_ERRMODEはエラーが発生したときに通知する方法を示すプロパティであり、PDO::ERRMODE_EXCEPTIONは例外を明示的に発生させるという設定値である。つまり「エラーが発生したら例外を発生させる」という意味になる。::はPDOクラス内の静的なプロパティにアクセスする記法。

3-2.SQL文を送信する
【書式】query(SQL文)
【例】
$sql = ‘select name from city where countrycode=”JPN”‘;
$st = $pdo ->query($sql);
foreach($st as $row){
echo $row[name];
}
5.データベースの接続を終了する
【書式】unset(変数)
※変数にはPDOオブジェクトとそのオブジェクトで抜き出したクエリ(←ちょっと説明があいまい)
【例】
unset($st, $pod);

入力フォームでの検索

1.フォームを作る
<form method=”データの送信方法” action=”データの送信先”>
※methodはgetまたはpost
※actionは、指定された送信先のファイルにデータを送る。(省略した場合は自身のphpファイルに送る)

<label for=”部品名”>ラベル表記</label>
※テキストボックスなどの<input>タグの部品に添える表記ラベル

<input type=”インプットの種類” name=”部品名”>
インプットの種類はtext, button, submitなど

【例】
<p>
<form method=”get” action=””>
<label for=”cityname”>City Name</label>
<input type=”text” name=”cityname”>
<input type=”submit”>
</form>
</p>

2.プリペアードステートメントの設定
・フォームからの情報をもとにSQL文を組み立てるときに使う仕組み。
・雛形となるSQL文に、実行時に文字列が入るパラメータを指定しておく。
・パラメータは「:名前」か「?」で指定する
※PHPで文字列だけを連結してSQL文を作ることもできるが、そうするとSQL文中の値だけでなく演算子まで指定できてしまってSQL構文自体を変えられて実行されるリスクがあるからだめ。

以下の流れになる
・PDOオブジェクトにプリペアードステートメントを設定する
・フォームから送信された値を取得する
フォームからの値は$_GETから取得します。$_GETはphpのサーバーグローバル変数で、クライアント(ブラウザ)からhttpのgetメソッドで送られたパラメータが入る。
フォームの作成時にmethod=”get”で指定しているのでデータが$_GETに格納される。
・$_GETは連想配列でありキーとしてinput要素の部品名を指定して値を取得する。
・フォームに何も入力されずに送信される場合もあるため、isset()関数で値の有無をしなければ空文字”を:citynameにセットする。この判別は条件演算子の一つである三項演算子で記述している。「三項演算子は$a=(条件式) ? 真のときの値 : 偽のときの値;」という書式で記述する。

・PDOステートメントオブジェクトにフォームからの値をバンドルさせる
・PDOステートメントオブジェクトを実行する
【書式】
sql文 = ‘select …… 「:名前」….’;  ※「:名前」の形式でSQL文の条件に使う
PDOオブジェクト -> prepare(SQL文);
PDOStatementオブジェクト -> bindValue(パラメータ名, 値);
PDOStatementオブジェクト -> execute();
【例】
$sql = ‘select name from music where musickode=”rock” and name like :musicname’;
$st = $pdo ->prepare($sql);
$musicname = isset($_GET[‘musicname’]) ? $_GET[‘musicname’] : ”;
$st ->bindValue(‘:musicname’, $musicname);
$st =>execute();