//tips
//php理解
商品を削除してカートが空になった場合、商品が入っていないことを明示する。
if($max==0){
print'カートに商品が入っていません。<br/>';
print '<br/>';
print '<a href="shop_list.php">商品一覧へ戻る</a>';
exit();
}
また、カートが最初から空の場合は、$_SESSIONの中にcartもkazuも存在しないので、問題が生じる。issetで有無を確認する処理も追加する。
try{
if(isset($_SESSION['cart'])==true){
$cart=$_SESSION['cart'];
$kazu=$_SESSION['kazu'];
$max=count($cart);
}else{
$max=0;
}
if($max==0){
print'カートに商品が入っていません。<br/>';
print '<br/>';
print '<a href="shop_list.php">商品一覧へ戻る</a>';
exit();
}
ここからは同じ商品をカートに入れないようにする方法を考えていく。
テキスト入力を受け取け、格納される$pro_codeと同じ商品コードを$cartで見つけたら、商品一覧に戻るようにする。
$cartの配列内から項目をチェックするにはin_arrayメソッドを使用し、
in_array(‘ピーマン’,$yasai);
のように$yasai配列の中にピーマンが値として存在しているかを調べる。
すでにカート内にデータがあった場合に探せば良いので、下記のようになる。
if(isset($_SESSION['cart'])==true){
$cart=$_SESSION['cart'];
$kazu=$_SESSION['kazu'];
if(in_array($pro_code,$cart)==true){
print'その商品はすでにカートに入っています。<br/>';
print'<a href="shop_list.php">商品一覧に戻る</a>';
exit();
}
}
数量の入力部分にも対策を施す必要があるのでそちらも確認していく。
現在はマイナスでの入力や数字以外での入力の場合の対処ができていない。
なので正規表現で半角数字のみに限定する。
正規表現はこのようにできるのでpreg_match('/^[0-9]+$/',$pro_price)==0)、forループの中に内容を組み込む。
for($i=0;$i<$max;$i++){
if(preg_match('/^[0-9]+$/',$post['kazu'.$i])==0){
print '数量に誤りがあります。';
print'<a href="shop_cartlook.php">カートに戻る</a>';
exit();
}
$kazu[]=$post['kazu'.$i];
}
数字の大きさも規定したいので下記のように追加。
for($i=0;$i<$max;$i++){
if(preg_match('/^[0-9]+$/',$post['kazu'.$i])==0){
print '数量に誤りがあります。';
print'<a href="shop_cartlook.php">カートに戻る</a>';
exit();
}
if($post['kazu'.$i]<1||10<$post['kazu'.$i]){
print '数量は一個以上十個までとなります。';
print'<a href="shop_cartlook.php">カートに戻る</a>';
exit();
}
$kazu[]=$post['kazu'.$i];
}
Htmlのテーブルで囲むことで見た目がかなり改善されるのでそちらも実施。
カートの中身<br/>
<br/>
<form method="post" action="kazu_change.php">
<table border="1">
<tr>
<td>商品</td>
<td>商品画像</td>
<td>価格</td>
<td>数量</td>
<td>小計</td>
<td>削除</td>
</tr>
<?php
for($i=0;$i<$max;$i++){
?>
<tr>
<td><?php print $pro_name[$i]; ?></td>
<td><?php print $pro_gazou[$i];?></td>
<td><?php print $pro_price[$i];?>円</td>
<td><input type="text" name="kazu<?php print $i;?>" value="<?php print $kazu[$i];?>"> </td>
<td><?php print $pro_price[$i]*$kazu[$i];?>円</td>
<td><input type = "checkbox" name="sakujo<?php print $i;?>"></td>
</tr>
<?php
}
?>
</table>
ここからは注文を受け付ける段階に入っていく。
顧客情報の登録フォームなどを作成し、顧客情報の管理も行う必要がある。
<a href="shop_form.html">ご購入手続きへ進む</a><br/>
を追加し、注文フォームを作成していく。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>注文フォーム</title>
</head>
<body>
お客様情報を入力してください。<br/>
<form method="post" action="shop_form_check.php">
お名前<br/>
<input type="text" name="onamae" style="width:200px"><br/>
メールアドレス<br/>
<input type="text" name="email" style="width: 200px"><br/>
郵便番号<br/>
<input type="text" name="postal1" style="width: 50px">-
<input type="text" name="postal2" style="width: 80px"><br/>
住所<br/>
<input type="text" name="address" style="width: 500px"><br/>
電話番号<br/>
<input type="text" name="tel" style="width: 150px"><br/>
<input type="button" onclick="history.back()" value="戻る"><br/>
<input type="submit" value="OK" ><br/>
</form>
</body>
</html>
顧客情報の入力画面はできたので入力情報チェックのスクリプトを作成していく。
上記に記載した内容を正規表現で確認していく必要がある。
定番の正規表現は下記のように定型化されていることを覚えておく。
https://blog.codecamp.jp/php_regular_expression
https://qiita.com/ken97/items/9276f59f3148bb8fbe67