基礎から解る!PHP入門講座

サイト移転のお知らせ   ⇒ 基礎から解る!PHP入門講座

当サイトはついに移転することになりました。新URLは  http://www.flzphp.com/ です。
今後ともPHP入門講座を宜しくお願いします。

PHP でこんなことをしよう

クッキーを使う

クッキーで、すぐ消える一行メモ

 クッキーはクライアント側にデータを記憶させる仕組みですね。先ず簡単なスクリプトを作ってみましょう。
 一行ずつ文章を記入するとそれを順に表示してくれるプログラムです。
 注意点は、クッキーはHTMLよりも前に記述すること、<html>のタグの前に記述しなければいけません。
 また、覚えておく時間は秒単位で設定するため、60×60×24と掛け算の式で記述しましょう。
 当然 PHP の部分が2箇所に記述されることになります。PHP は HTML と混在しファイルの中に何箇所でも作ることができるので、この様に2箇所に別れるのは良くあることです。

$data=$_COOKIE["data"];   //まずクッキーを読み出して変数に格納
setcookie("data", $data, time()+60*10);  //クッキー名、保存内容、時間を指定

クッキー配列で、お買物ごっこ1

 役に立たないがテーマなのでショッピングカートはやらない予定でしたが、やっぱりクッキーと言えばこれですね。ここではかなり単純な仕組みです。クッキーは変数と同様に配列にすることができます。購入する商品名・価格・種類・色・個数等をまとめて一つのクッキーに格納した方が合理的です。作り方はさまざま考えられますが、ここではこんな作り方をしてみました。

注意点、一ファイル完結が目標ですが、ここでは3ファイル構成になりました。
  1、商品購入画面
  2、レジ画面
  3、購入商品削除確認画面
 複数ファイルにした理由は、このスクリプトで、クッキーへの書き込みと読込を同時に行うと、キャッシュを先に読んでしまうために、更新されたクッキーを表示できなくなるからです。

 次はクッキーに記憶させる記述ですが、次のようになっています。
setcookie ("order[$name]", "$order", time()+600);  //$nameが商品名、$orderが価格や個数
 つまり連想配列の形式です。商品を選ぶと、その商品名が連想配列のキーとなって配列を作ります。この形式だと同じ商品が2回以上登録されることがなく、個数などを変えて選択すると上書きされます。

 レジのファイル、つまり格納したクッキーを表示するにはforeach を使用しています。
foreach ($_COOKIE['order'] as $key => $value) {
  $text = split(",",$value);  //カンマで文字を分割、配列に格納
  $total = $text[1]*$text[2];  //小計を出す計算
  echo "$key:$text[0]:$text[1]円:$text[2]個:$total 円";
  $goukei += $total;  //合計を出すための計算
}

クッキーが使えない?!

 あるサーバーでPHPのプログラムを動かしたら、なぜかクッキーが使えないのです。同じファイルを他のサーバーで試すとちゃんと動くのに、そのサーバーではクッキーを覚えてくれないのです。ちょっとあせりましたね。
 これは次の様に設定することで解決できました。
setcookie("web", $web, time()+60*60, "/",".abcd.com",0);
 "/"はサイト全体のことですね。".abcd.com"はもちろんそのドメイン、最後の 0 はSSLの設定です。1にするとSSLの場合のみクッキーが動作するようになります。これでちゃんとクッキーが動いてくれました。
☆echo 等を使う部分では、クォーテーションとダブルクォーテーションが出てくるのですが、これは基本的には同じ働きをするものです。
 HTMLでは例えば<table border='3'>でも<table border="3">でもかまいません。同じようにPHPでも $var=array("青","赤","黄");が$var=array('青','赤','黄');でももちろんかまいません。
 しかし、”の中では変数が有効になるのに対し、’の中では変数はただの文字になってしまうのです。例えば、
$data = "10日";
echo "今日は $data です。";  変数は有効 → 今日は10日です。  と表示
echo '今日は $data です。';  変数は無効 → 今日は$dataです。  と表示
 また、echo 命令の中で HTML のタグを使う場合は、
  echo "<table border ='1' width='300'><tr>";
とechoで文字列を表示するための ”とHTMLの内部で使われる’を使い分けることが必要になります。
 HTML では width="300"でも width=300でも表示は出来るので、’を使わなくても良いのですが、W3C HTML 4.01では使用を推奨しているようですね。昔書いた HTML を見るとすべてのタグは大文字で ”も使っていませんでした。今は逆ですね。

疑問点はここで検索しよう!

※当サイトにて使用されている写真・文章はすべて 許可なく使用することを禁止いたします。