Blockchain code Metaverse VR

Unity×VR×Blockchain(262)

スポンサーリンク

//tips

//php理解

カートに表示する数量を変更するkazu_change.phpのスクリプトを見直す。

var_dump($max);が1なのでこの数字が$kazuの中に入るはず。

Foreach内の中身を再度検証していく。

まずPHPでデータベースに接続するために$dbh=new PDO($dsn,$user,$password);を使用し、その引数に必要なデータベース情報$dsn='mysql:dbname=shop;host=localhost;charset=utf8’;などを定義している。

PDO::ATTR_ERRMODEのPDO::ERRMODE_EXCEPTION を設定すると例外を表示してくれる。setAttributeで接続後のオプションとして設定。

$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 code,name,price,gazou FROM mst_product WHERE code=?’;ではmst_product テーブルにあるcode,name,price,gazouデータを、特定の値を検索して一致したものだけを取得するwhereの条件のもと取得する。

?の部分には入力欄で記入された条件が入ることになるが、その前にPrepareメソッドの中にsql文を埋め込むことでsqlの実行準備を行っている。

$stmtにsq操作lが実行できるPDOstatementインスタンスが作成される。

そのインスタンスに対して、execute(値)でexecuteメソッドの引数に?部分を入れる。この際に引数の値は配列として渡される。複数の?と設置することがあるので、その場合は?の並びの順番に配列内の数字が代入される。

foreach($cart as $key=>$val){

$sql='SELECT code,name,price,gazou FROM mst_product WHERE code=?';
$stmt=$dbh->prepare($sql);
$data[0]=$val;
$stmt->execute($data);

Sqlスクリプトをexecuteで実行した結果はPDOStatementクラスのfetchメソッドで取得することができる。

フェッチモードとは、PDOでデータベースからデータを取り出した際の「配列の形式を指定するモード」のことで様々な種類がある。

https://blog.senseshare.jp/fetch-mode.html

今回はFETCH_ASSOC:【配列のキー】カラム名のみを取得している。

$rec=$stmt->fetch(PDO::FETCH_ASSOC);

$pro_name[]=$rec['name'];
$pro_price[]=$rec['price'];

var_dump($rec);とすると、下記が取得できた。

array(4) { ["code"]=> string(1) "1" ["name"]=> string(12) "にんじん" ["price"]=> string(3) "100" ["gazou"]=> NULL }

もう少し良くみてみると接続切断の$dbh=null;がforeach内に組み込まれていたので修正。foreachの外に出した。

ただ、ここはkazuの中身には影響しなかった。

$kazu=$_SESSION['kazu’];の由来となるのは、入力内容を受け取る$post=sanitize($_POST);以下の部分。

$post=sanitize($_POST);

$max=$post['max'];

for($i=0,$i<$max;$i++;){

$kazu[]=$post['kazu'.$i];
}

$_SESSION['kazu']=$kazu;

header('Location:shop_cartlook.php');
exit();

一旦header部分をコメントアウトして遷移させないようにし、ログを表示させる。

$post=sanitize($_POST);
var_dump($post);

とするとarray(2) { ["kazu0"]=> string(1) "1" ["max"]=> string(1) "1" }となり、

<input type="text" name="kazu<?php print $i;?>" value="<?php print $kazu[$i];?>">

<input type="hidden" name="max" value="<?php print $max;?>">

for($i=0;$i<$max;$i++){の;の記載ミスが確認できたので修正。

これで無事に問題を解決できた。,や.などのミスにも注意する。

次はカートから商品を削除する。

まずはチェックボックスを追加。
<input type = "checkbox" name="sakujo<?php print $i;?>”>、

配列の削除の方法はarray_spliceメソッドを使用し、

array_splice($変数名,何番目を削除するか,幾つ削除するか);

という引数を記入していく。

ただ、こうすると前から順番がずれていってしまうので後ろから削除して本来の順番を変えないようにする。

逆にカウントするのはfor($i=99;0<=$i;$i-)としてループごとに一つずつ値を減らすようにすれば良い。

<?php
session_start();
session_regenerate_id(true);

require_once('../common/common.php');

$post=sanitize($_POST);

var_dump($post);

$max=$post['max'];

var_dump($max);

for($i=0;$i<$max;$i++){

$kazu[]=$post['kazu'.$i];

}

$cart=$_SESSION['cart'];

for($i=$max;0<=$i;$i--){

if(isset($_POST['sakujo'.$i])==true){
array_splice($cart,$i,1);
array_splice($kazu,$i,1);
}
}

$_SESSION['cart']=$cart;
$_SESSION['kazu']=$kazu;

header('Location:shop_cartlook.php');
exit();

?>

これでチェックしたアイテムを数量変更ボタンを押すことで削除できるようになった。

人気の記事

1

皆さん、ついに、エアラインでも、サブスクリプションが始まったのはご存じですか? まだ実験段階ですが、ANAが、定額全国住み放題サービスを提供する「ADDress」と組んで、国内線を4回まで定額利用可能 ...

2

無料でネットショップを開けるアプリとして多くの人に驚きを与えたBASE株式会社が、2019年10月25日東証マザーズに上場しました。2020年2月時点で90万店を超えるショップを抱えるまでに成長してい ...

3

2011年にサービスを開始してから圧倒的な成長率を誇るインテリア通販サイト 【FLYMEe/フライミー】を皆さんご存じでしょうか。 「自分のイメージするインテリア、本当に欲しいインテリアがどこにあるの ...

4

ついに、noteの月間アクティブユーザー数が4400万人(2020年3月時点)に到達しました。 そもそも、「note」とは、クリエイターが、文章やマンガ、写真、音声を投稿することができ、ユーザーはその ...

5

ボードゲームカフェが1日2回転で儲かるという記事をみつけたので興味を持ち、調べてみました。 まずは、需要がどれくらいあるのか、市場のようすからみていきましょう。 世界最大のボードゲーム市場はドイツで、 ...

-Blockchain, code, Metaverse, VR
-, ,

Copyright© BUSINESS HUNTER , 2023 All Rights Reserved Powered by AFFINGER5.