『PHPとMySQL Web開発』の素晴らしい場所収録

5269 ワード

1、SESSIONで作ったカートを配列し、isbn対応本の数を二次元配列として保存する
$new GETはカートに値を入れ、submitは数量を修正し、提出したフォームは、元の配列を遍歴することでisbnに対応して最新の数量を修正します.
配列の運用が巧みである.コレクション
 1   if ($new) {
 2       if (!isset($_SESSION['cart'])) {
 3       $_SESSION['cart'] = array();
 4       $_SESSION['items'] = 0;
 5       $_SESSION['total_price'] = '0.00';
 6     }
 7 
 8     if (isset($_SESSION['cart'][$new])) {
 9       $_SESSION['cart'][$new]++;
10     }else{
11       $_SESSION['cart'][$new] = 1;
12     }
13 
14     $_SESSION['total_price'] = calculate_price($_SESSION['cart']);
15     $_SESSION['items'] = calculate_items($_SESSION['cart']);
16   }
17 
18   if ($_POST['submit']) {
19     foreach ($_SESSION['cart'] as $isbn => $qty) {
20     if ($_POST[$isbn] == '0') {
21       unset($_SESSION['cart'][$isbn]);
22     }else{
23       $_SESSION['cart'][$isbn] = $_POST[$isbn];
24     }
25     }
26     $_SESSION['total_price'] = calculate_price($_SESSION['cart']);
27     $_SESSION['items'] = calculate_items($_SESSION['cart']);
28   }
29 
30 //          
31    function calculate_price($cart){
32     $db = db_connect();
33     $total_prices = 0.00;
34     foreach ($cart as $isbn => $qty) {
35       $query = "select price from books where isbn = '".$isbn."'";
36       $result = $db->query($query);
37       $price = $result->fetch_assoc();
38       $prices = $price['price'] * $qty;
39       $total_prices += $prices;
40     }
41     return $total_prices;
42    }
43 
44 //           
45    function calculate_items($cart){
46     $db = db_connect();
47     $total_qty = 0;
48     foreach ($cart as $isbn => $qty) {
49       $total_qty += $qty;
50     }
51     return $total_qty;
52    }

 
2、number_format()関数-千桁区切りで数値をフォーマットします(これが好きです.価格がはっきり見えます)
最初のパラメータのみが指定されている場合、numberの小数部は削除され、各千桁の区切り文字は英語の小文字カンマです.
2つのパラメータを指定すると、numberは小数点以下の桁数を設定した値に保持し、残りは同じ階に残ります.
4つのパラメータが提供される場合、numberは、decimalsの長さの小数部を保持し、小数点はdec_pointに置き換えられ、千ビット区切りはthousands_sepに置き換えられる.
千桁をカンマで区切るのに慣れていない場合は、次のようにします.
    $chinese_format_number = number_format($number, 2, '.', '');  //1234.57
 
3、MySQLトランザクション、データベース操作が多い場合、データを一致させるために、すべて実行してから実行する必要があります
   $db->autocommit(false); 開始、オートコミットモードのオフ
   $db->commit();まとめて提出する
   $db->autocommit(true); オートコミットモードをオンにする