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

コロナによる需要変化 コロナパンデミックの影響で、人々は外に出られなくなり、自宅で過ごす時間が増えました。 この自粛ムードの中、下記のようなビジネスの需要変化が引き起こされています。 【利用者減少】 ...

2

米国レストランの決済時に毎日お世話になっていた「Square」のビジネスモデルについて本日はふれていきたいと思います。 「Square」とは、ネットにつながったモバイル端末と専用のカードリーダーを用意 ...

3

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

4

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

5

ナイキのSNKRSが、なぜこれほどまでに人気なのか?調べてみました。 きっかけは米国での友達との会話。彼は自分のシューズをみせて、「これ20万円もしたんだぜ。」と語ってくれました。 あまり靴に興味がな ...

-Blockchain, code, Metaverse, VR
-, ,

Copyright© BUSINESS HACKER , 2021 All Rights Reserved Powered by AFFINGER5.