今回からいよいよショッピングカートですが、
どこまで説明すればいいのかが悩みどころです。
既にデータベースを使ったショッピングカートで
説明していましたし・・・。
ですが、復習の意味を込めて再度説明していきます。
とはいっても以前は機能を少しずつ増やしていきましたが、
今回は完成版をもとに解説していきますのでご了承を。
とはいっても、以前の完成版をちょっと修正しています。
これからPHPの基礎部分を説明しますので、
PHPをある程度わかっている方は飛ばしてください。
PHPの基本を簡単に説明します。
※過去記事を再構成と追加しています。
PHPの概要

PHPファイルの拡張子は、「php」で
「<?php」 と 「?>」の間に記述します。
例えPHPファイルにHTMLを記述していなくても
始めと終わりに必ず「<?php」 と 「?>」を入れます。
静的ページと動的ページとは
PHPは、動的ページを作成することができる言語で、
スクリプト言語と呼ばれます。
動的ページの仕組みを簡単に説明すると、
HTMLファイルやPHPファイルは通常、
サーバー上にアップロードします。
静的であるHTMLファイルはサーバー上に記述されている通り
そのままブラウザで表示します。
静的ページは、記述している内容と
実際にブラウザで表示する内容が同じですが、
動的ページは、記述している内容と
実際にブラウザで表示する内容が同じではない
ということです。
動的であるPHPファイルはサーバー上にあり、
アクセスするたびにPHPファイルに
書かれてある命令を実行し表示を
変更させています。
PC(ローカル環境)上ではPHPは表示できない!
実際にウェブブラウザで表示されているのは
PHPファイルに書かれてある命令を実行した後の
表示なのです。
ですから、PC(ローカル環境)上にあるPHPファイルを
ウェブブラウザで表示すると、そのソースそのものが
表示され、PHPファイルの命令を実行した後の画面を
見ることができません。
それは、ウェブブラウザがサーバーではないので
PHPファイルの命令を実行できないからなのです。
ちょっと難しい表現で、わかりにくかったかも
しれませんね。
記述する変数について
変数(数字や文字を保管するところ)というものがあり、
「$name」のように「$」で始め、半角小文字を自由に付けられます。
変数に代入する方法は、右から左へ代入します。
変数[$a]に変数[$b]の値を代入する場合、
$a = $b;
と記述します。
また、配列変数というものがあり、
複数のデータを入れることができます。
他にも、連想配列というものがあります。
$post[‘id’]=’1′;
$post[‘name’]=’マアジ’;
$post[‘price’]=’500′;
ここでの$postは[]で追加代入していますので次に、
$post[‘id’]=’2′;
$post[‘name’]=’ブリ’;
$post[‘price’]=’650′;
と追加代入することで
1番目に代入したもの:id=’1′,name=’マアジ’,price=’500′
2番目に代入したもの:id=’2′,name=’ブリ’,price=’650′
と順番に商品IDと商品名と価格を代入することができます。
これを利用すれば、ショッピングカートに入れることが
できるようになります。
PHPの命令文
そして、「if」や「print」などいろいろな命令があり、
命令の後に「セミコロン(;)」を付けます。
セミコロンを付けなければ実行しません。
命令文についてはC言語やPerlに使われている
ものと似ています。
ここではショッピングカートで使う命令を
いくつか説明していきます。
IF文について
if命令は、
「もし条件が正しかったらこうします、違ったらこうします」
という条件分岐に使われます。
例:
if(条件){
条件が真(true)であれば実行
}else{
条件が偽(false)であれば実行
}
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
間違えやすいものとして[=]と[==]との違いがあります。
[$a=$b]と[$a==$b]とでは、[=]が1つは代入で、
2つは等しいという意味ですが、
if($a==$b) では$aと$bが等しい場合で以下の処理を行いますが、
if($a=$b) と間違って書いてしまうと$aに$bを代入してしまい
以下の処理を行いません。
私は忘れた頃にやってしまい思うように動作しないことがあります。
このショッピングカートを作るときにもやってしまいました・・・。
1つ書き間違うだけで、間違いに気付かず何度も確認して・・・。
そんな時は、一呼吸置くなり休憩するなりして
改めて記述内容を確認してみると簡単に見つかりますよ。
こんな簡単なことを間違っていたのかと
情けなく思うと同時にホッとします。
話を戻します。
条件を複数指定する場合に使う論理演算子の
例として、条件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 $name;
例:print ‘文字列出力’;
また複数の文字列を続けて出力する場合
ピリオド(.)を使います。
例:echo ‘文字列出力’.$name;
例:print $email.’画面に表示する <br>’;
※ <br>(改行タグ)などHTMLタグも出力できます。
PHPでデータを受け取る
商品詳細ページから、HTMLのformを使ってデータを送信しています。
そのデータをPHPで受け取る方法について説明していきます。
入力送信されたデータを受け取る
商品詳細ページでは、form と input とで
カートに入れる内容を送信していました。
その送信されたデータをPHPで受け取ります。
その、送信されたデータは、formタグの method 属性で
指定された、post か get かにより異なりまが、
今回は post なので、[$_POST]で受け取ります。
受け取る各項目別の内容は、input文の
name属性で指定した名前を項目名として
「$_POST[‘項目名’]」に保存されています。
送信データ:<input type=”text” name=”name”>
受け取るデータ:$_POST[‘name’]
データをサニタイズ(無害化)する
フォームから送られるデータですが、
フォームの入力欄には自由に記入できますので、
無効な記号やプログラミングコードなど
を入力して送られることがあるかもしれません。
例え意図したことではなくても予期せぬ動作をし
不具合を起こす可能性があります。
それを防止する方法として
サニタイズ(消毒・無害化)があります。
サニタイズは htmlspecialchars関数を使います。
例:htmlspecialchars(対象文字列);
今回のショッピングカートでは、関数として
別ファイルにし、各ファイルから読み込んでいます。
PHPでファイルを読み込む
読み込む関数のファイルは、
ファイル名:com_func.php
<記述例>
<?php
function sanitize($input)
{
foreach($input as $key=>$value)
{
$output[$key]=htmlspecialchars($value);
}
return $output;
}
?>
1・10行目:PHPファイルを記述する
2行目:関数名を[sanitize]と宣言します
4行目:foreach文を使って繰り返し処理をします。
foreach文の書式例は以下の通りです。
foreach (配列変数 as キー変数 => 値変数){処理;}
配列変数の中のデータの数だけ繰り返し、
配列の要素のキーと値を取り出し、キーをキー変数、
値を値変数に代入します。
この関数で例えば、$input に入っている要素のキーと値を
キー:name、値:マサバ、の場合、
$output[‘name’]=htmlspecialchars(‘マサバ’);
$output[‘name’]にサニタイズした’マサバ’を代入しています。
これをデータの数だけ繰り返しています。
今回はここまでにします。
コメント