2021/12/15 よりサイトリニューアルしました

PHPとMySQLでECサイトをフルスクラッチ開発!⑦商品一覧、ページ遷移先指定画面の作成

商品一覧ページ

前回、商品追加画面の作成をしました。↓

 

今回は、データベースを参照し、登録商品の一覧表示させる画面と、そこから修正、追加、詳細、削除、などのページへ値を渡しつつページ移動するページ遷移先指定画面を作成します。

商品リスト表

星マークのページは前回までで作成済みになります。今回は雲マークのpro_list.php pro_branch.php pro_ng.php を作成します。

※あらかじめ、pro_add.phpにアクセスして各カテゴリ別で2つずつ位商品を登録しておいてください。

 

商品一覧画面

pro_list.php

このページのプログラムが走れば下図のような表示になります。

以前作成したスタッフ一覧画面(staff_list.php)とほとんど同じ内容ですね。プログラムもほぼ同じです。

pro_list画面

productフォルダ内にpro_list.phpを作成します。

このページでは、データベースに登録されている全ての商品を一覧表示させたいので、まずデータベースに接続をします。

SQLのSELECT文でmst_productテーブルからcode,name,price,を選択しています。レコードはWHERE1ですので、全てのレコードが対象になります。

$sql = “SELECT code,name FROM mst_staff WHERE1”; は、SELECT文です。WHERE1は全てのレコードを指定する事になるので、この場合は「mst_staffテーブルのすべてのレコードのcodeとnameカラムを選択」になります。

SQLを実行した後、データベースを閉じます。

この後、商品を一覧表示させるループ文に入るので、その前にhtmlのformタグを作成しておきます。

print “<form…  飛び先はpro_branch.php でpost送信。

ここから、画面にスタッフ全員を一覧表示させるプログラムに入ります。

while(true){}は、永久ループになります。

$rec = $stmt -> fetch(PDO::FETCH_ASSOC); は、SQLで取り出した全レコードの情報を、プライマリkeyの昇順に1つずつ抜き出し、$recに格納しています。

if($rec === false) { break; } は、つまり全てのレコードを取り出したあと、$recは空の値となるので、その場合はbreak;でループから抜け出すといったプログラムです。

したがって、$recに値がある(レコードの情報がある)場合、商品情報を表示させるプログラムが繰り返されます。

表示された商品を選択出来るようにするため、ラジオボタンを付けています。

input type=”radio”(ラジオボタン) name=”code”(sumitで渡す値の名前) value=”.$rec[‘code’].”(submitで渡す値) になります。したがって、今回のラジオボタンは、商品codeをpost送信するために付けています。

$rec[“name”]で商品名が表示されるので、ラジオボタンの隣にスタッフ名が表示される形になります。

$rec[“price”]で商品価格が表示されるので、商品名の隣に商品価格が表示される形になります。

<br>で改行なので、ループすれば上図のような表示になります。

ループから抜け出した後、今後作成するスタッフ編集画面に飛ぶための4つのsubmitボタンを作成します。(詳細、追加、修正、削除)

submitにnameを付けていますが、これはページ移動後、押されたsubmitボタンの識別を付けるためです。

最後に、管理トップ画面のリンクを貼っておきます。

ページ遷移先指定画面

pro_branch.php

productフォルダ内にpro_branch.phpを作成します。

こちらのプログラムも、以前作成したstaff_branch.phpとほぼ同じ内容です。

このページは、リスト画面から4つのsubmitボタンのいずれかが押された際、指定作のページへ自動的に飛ぶようにプログラムされています。header(“location..があるので、htmlは記述せず、画面にはなにも表示されません。

※headerの命令文は、htmlの配下に記述出来ない仕様となっています。

一つ抜粋して説明すると、例えば商品修正のボタンを押したならば、isset($_POST[“edit”]) === true になるので、ここのif文のプログラムが実行されます。

続く if(isset($_POST[“code”]) === false) は、これはラジオボタンが押されたかどうかの確認になります。したがって、falseならスタッフが選択されていないので強制的にheaderでpro_ng.phpのページへ飛ばします。

ラジオボタンが押されていれば、$code = $_POST[“code”]; でスタッフコードを$codeに代入します。

その後、headerでstaff_edit.phpに飛ばしますが、ここがポイントで、urlの後に「?code=”.$code」と続いています。

これは、「get送信」しているのです。

このページでは、目に見えるボタンを装飾出来ないので、post送信ができません。($_SESSION[]で賄うこともできそうですが、、)しかし、urlに値を乗せる「GET送信」なら可能になります。

したがって、スタッフ情報の核となるスタッフコードを、headeのurlに乗っけてしまえばいいんですね。

パスワードなどの情報であれば、目に見えてしまうurlに乗せるget送信はいけませんが、スタッフコードであれば特段問題ないので、見えても良いような情報の場合、get送信も使います。

記述は、pro_edit.php?code=”.$code のように、飛び先のURLの?の後がGETの値になります。

code=は名前で、そこに.$code で値をつなげば、後のページで$_GET[“code”]で商品コードが受け取れます。

商品選択NG画面

pro_ng.php

productフォルダ内にpro_ng.phpを作成します。

商品リスト画面で、ラジオボタンにチェックなくsubmitボタンを押したときに表示される画面です。

商品が選択されていないので、その旨を伝えるだけのページですね。とくに説明はありません。

こちらもstaff_ng.phpと同じです。

ここまで作成できれば、ログイン後の商品管理トップページから商品追加画面へ飛べるようになるので、pro_add..のページのコメントアウトしておいたsessionの記述部分を解除しておいてください。

次回は商品の修正ページを作成します。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です