//tips
//php理解
ログイン名やパスワードなどの新規登録・更新機能の全体像を確認していく。
<?php
session_start();
$name=$address=$login=$password=‘’;
if(isset($_SESSION[‘customer’])){
$name=$_SESSION[‘customer’][‘name’];
$address=$_SESSION[‘customer’][‘address’];
$login=$_SESSION[‘customer’][‘login’];
$password=$_SESSION[‘customer’][‘password’];
}
echo’<form action=“customer-output.php” method=“post”>’;
echo’<table>’;
echo’<tr><td>お名前</td><td>’;
echo’<input type=“text” name=“name” value=“value”’,$name,’”>’;
echo’</td></tr>’;
echo’<tr><td>ご住所</td><td>’;
echo’<input type=“test” name=“address” value=“’,$address,’”>’;
echo’</td></tr>’;
echo’<tr><td>ご住所</td><td>’;
…
?>
上記では、現在登録されている顧客情報を表示した上で変更が必要な箇所だけユーザが編集できるようにしている。
まずはセッションを使うのでsession_start();を実行。
顧客名、住所、ログイン名、パスワードを保存する変数を用意。セッションに顧客情報が登録されているかどうかをissetで確認。
登録されていたらセッションデータから情報を読み出して各変数に代入。代入された変数はinputタグの中身にvalueとして表示される。
顧客情報を登録する場合はデータベースに接続する必要があるので、
session_start();
$pdo=new PDO(‘mysql:host=localhost;dbname=shop;charset=utf8’,’staff’,’password’);
を実行した後に、指定したログイン名が使われているかどうかを調べる。
ログインしている場合には
Select * from customer where id!=? and login=?
ログインしていない場合には
Select * from customer where login=?
検索結果が空であれば重複なしと言えるので
if(empty($sql->fetchAll())){
以下で登録処理を行う。
すでにログインしている場合は更新処理。
update customer set name=?,address=?,login=?,password=? where id=?
?の部分にexecuteで挿入を行う。
$sql->execute([
$_REQUEST[‘name’],$_REQUEST[‘address’],$_REQUEST[‘login’],$_REQUEST[‘password’],$id
]);
データベースを最新情報に更新したら、セッションデータも最新に変更。
$_SESSION[‘customer’]=[
‘id’=>$id,‘name’=>$_REQUEST[‘name’],‘address’=>$_REQUEST[‘address’],‘login’=>$_REQUEST[‘login’],‘password’=>$_REQUEST[‘password’]
];
ログインしていない場合は
insert into customer values(null,?,?,?,?)で情報の登録。
$sql->execute([
$_REQUEST[‘name’],$_REQUEST[‘address’],$_REQUEST[‘login’],$_REQUEST[‘password’]]);
?部分もexecuteで埋めておく。
ここからは簡単なショッピングカートの作成。
商品一覧ページを表示し、そこから詳細ページに進めるようにまずは作る。
リクエストパラメータに検索キーワードが含まれている時には商品検索を行う。if(isset($_REQUEST[‘keyword’])で検索キーワードがあるか確認している。
部分一致%’.$REQUEST[‘keyword’].’%’で商品を検索している。
検索キーワードが含まれていない時には商品一覧を表示している。
else{
$sql=$pdo->prepare(‘select* from product’);
$sql->execute([]);
}
記載内容は下記。
<form action=“product.php” method=“post”>
商品検索
<input type=“text” name=“keyword”>
<input type=“submit” value=“検索”>
</form>
<hr>
<?php
echo’<table>’;
echo’<th>商品番号</th><th>商品名</th><th>価格</th>’;
$pdo=new PDO(‘mysql:host=localhost;dbname=shop;charset=utf8’,’staff’,’password’);
if(isset($_REQUEST[‘keyword’])){
$sql=$pdo->prepare(‘select * from product where name like ?’);
$sql->execute([‘%’.$REQUEST[‘keyword’].’%’]);
}else{
$sql=$pdo->prepare(‘select* from product’);
$sql->execute([]);
}
foreach($sql->fetchAll() as $row){
$id=$row[‘id’];
echo ‘<tr>’;
echo ‘<td>’,$id,’</td>’;
echo ‘<td>’;
echo ‘<a href=“detail.php?id=‘, $id ,’”>’,$row[‘name’],’</a>’;
echo ‘</td>’;
echo ‘<td>’,$row[‘price’],’</td>’;
echo ‘</tr>’;
}
echo ‘</table>’;
?>
商品詳細情報を表示していく。
<?php
$pdo=new PDO(‘mysql:host=localhost;dbname=shop;charset=utf8’,’staff’,’password’);
$sql=$pdo->prepare(‘select * from product where id=?’);
$sql->execute([$_REQUEST[‘id’]]);
foreach($sql->fetchAll() as $row){
echo ‘<p><img src=“image/‘,$row[‘id’],’.jpg”></p>’;
echo ‘<form action=“cart-insert.php” method=“post”>’;
echo ‘<p>商品番号:‘,$row[‘id’],’</p>’;
echo ‘<p>商品名:‘,$row[‘name’],’</p>’;
echo ‘<p>価格:‘,$row[‘price’],’</p>’;
echo ‘<p>個数:<select name=“count”>’;
for($i=1;$i<=10,$I++){
echo ‘<option value=>”’,$I,’”>’,$I,’</option>’;
}
echo ‘</select></p>’;
echo’<input type=“hidden” name=“id” value=“‘,$row[‘id’],’”>’;
…
echo’<p><input type=“submit” value=“カートに追加”></p>’;
echo’</form>’;
echo’<p><a href=“favorite-insert.php?id=”,$row[‘id’],’”>お気に入りに追加</a><p>’;
}
?>
購入数を指定するためにセレクトボックスとimage画像を表示させるためのタグも挿入している。ここまでの学習内容の範囲なので特に初見のものは出ていないように思われる。
カート追加ボタンが選択されると、cart-insert.phpが実行される。
商品をカートに追加するため、リクエストパラメータ情報用にhiddenのinputタグを配置している。
ここからカートに追加ボタンをクリックしたときに実行されるスクリプトの内容を見ていく。
カート内の商品情報は、セッションデータに$_SESSION[‘product’][商品番号][‘name’]などの形で保存している。nameだけでなく、priceもcountも対応できるので、商品購入に必要な情報はこれで対応できる。
カートを表す変数は$_SESSION[‘product’]ときめ、issetで未定義であることを確認できたら$_SESSION[‘product’]=[]とする。
<?php
session_start();
$id=$_REQUEST[‘id’];
if(!isset($_SESSION[‘product’])){
$_SESSION[‘product’]=[]
}
$count=0;
if(isset($_SESSION[‘product’][$id])){
$count=$_SESSION[‘product’][$id][‘count’];
}
$_SESSION[‘product’][$id]=[
‘name’=>$_REQUEST[‘name’],
‘price’=>$_REQUEST[‘price’],
‘count’=>$count+$_REQUEST[‘count’],
];
echo’<p>カートに商品を追加しました</p>’;
echo’<hr>’;
require ’cart.php’;
?>