//tips
//php理解
ボタンクリックを区別することはできるので、formではなく任意の画面に飛ばせるheader(‘Location:~~’)を使用して任意の画面に飛ばしてみる。
header(‘Location:飛ばしたい画面のURL’)で実行できるが、headerの前にスクリプトがない場合は実行されるが、そうでない場合は実行されないという癖が強いものなので注意して使うようにする。
<?php
if(isset($_POST['edit'])==true){
header('Location:staff_edit.php');
exit();
}
if(isset($_POST['delete'])==true){
header('Location:staff_delete.php');
exit();
}
?>
修正画面にスタッフデータに送りたいのでそちらの機能も追加していく。その際にはURLパラメータをGETで読み取る形にする。
POST方式は<form>タグで送り、$POSTで受け取る形にするが、URLパラメータで送り、$GETで受け取る形にすることもできる。ただ、GETの場合はURLの?以降に受け取りデータが丸見えになるので、見られても良いデータしか扱えない。
下記のように送付元と送付先のスクリプトがかかれる。
元:
header('Location:staff_edit.php?staffcode=3’);
先:
$staff_code=$_GET[‘staffcode’];
なので、下記の形に変更。
<?php
if(isset($_POST['edit'])==true){
$staff_code=$_POST['staffcode'];
header('Location:staff_edit.php?staffcode='.$staff_code);
exit();
}
if(isset($_POST['delete'])==true){
$staff_code=$_POST['staffcode'];
header('Location:staff_delete.php?staffcode='.$staff_code);
exit();
}
?>
送信元についての記載ができたので、今度は送信先のスクリプトを調整する。POSTからGETに変更。$staff_code=$_GET['staffcode'];
ついでにNG画面も作成し、何も選択せずにボタンを押した場合に遷移させる。
<body>
スタッフが選択されていません。<br/>
<a href="staff_list.php">戻る</a>
</body>
削除機能の方には消す前にyes/noを確認するようにしていく。
$sql = 'DELETE FROM mst_staff WHERE code=?’;のように
DELETE FROM テーブル名 WHERE 条件
で削除できる。この方法だと不正削除ができてしまうので別の機会にCSRF脆弱性の対処方法を確認する。今は一旦保留にしておく。
少しずつ企業の業務アプリケーションの原型ができてきた。基本的にはメニュー画面から一覧画面、そこから参照・追加・修正・削除画面へと相互に行ったりきたりするもの。
一人の内容をもう少し詳細にみるためには参照ページが必要となるのでそちらも確認していく。
スタッフ修正を参考に参照も下記のように作成。一部htmlを変更しただけで作成可能。
<body>
<?php
try{
$staff_code=$_GET['staffcode'];
$dsn='mysql:dbname=shop;host=localhost;charset=utf8';
$user='root';
$password='';
$dbh=new PDO($dsn,$user,$password);
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$sql='SELECT name FROM mst_staff WHERE code=?';
$stmt=$dbh->prepare($sql);
$data[]=$staff_code;
$stmt->execute($data);
$rec=$stmt->fetch(PDO::FETCH_ASSOC);
$staff_name=$rec['name'];
$dbh=null;
}catch(Exception $e){
print'ただいま障害により大変ご迷惑をおかけしております';
exit();
}
?>
スタッフ情報参照<br/>
<br/>
スタッフコード<br/>
<?php print $staff_code;?>
<br/>
スタッフ名<br/>
<?php print $staff_name;?>
<br/>
<br/>
<form>
<input type="button" onclick="history.back()" value="戻る">
</form>
</body>
これでスタッフ管理ができるようになったので、今度は商品管理の仕組みを作っていく。