こんにちは、オイケです。
過去ブログの消費税10%対応プロジェクトの第5回目の記事では、
- SQL文でブログ記事の税込価格を増税後価格への変更を検討し断念
- PHPプログラムを作成し、増税後価格に変更しブラウザに表示実現
しました。
しかし、増税後価格をブラウザに表示することはできたものの、MySQLデータベースに書き戻す方法が判らずじまいで終わってしまいました。
今回の第6回目の記事では、
- 増税後価格をMySQLデータベースに書き戻すPHPプロブラム
を作成します。
PHPプログラムで増税後価格をMySQLに書き戻す方法
これから始めるMySQL入門には、mysqli_xxxxでMySQLデータベースからの読み出し方法が記載されていますが、書き込み方法が見当たりません。
そこで、以下の本を読んでみました。
この本の154ページ目から、PHPからデータベースを操作する方法が記載されています。
この本ではmysqli_xxxxを使わず、PDO(PHP Data Object)クラスを使ってデータベースを操作しているので、第5回の記事で作成したPHPコードをPDOクラスを使ったPHPコードに移植して、PDOクラスを使ってデータベースへの書き込みを追記することにします。
税込価格を増税後税込価格に変更するPHPコード
MySQLデータベースから税込価格を読みだして、増税後の税込価格に変更して、MySQLデータに書き戻すPHPコードは以下のとおりです。
// File Name = access.php <!DOCTYPE html> <html> <head> <title>PHP練習</title> <meta charset="utf-8"> </head> <body> <h1>PHPでMySQLを更新する</h1> <?php ini_set("display_errors", 1); error_reporting(E_ALL); $USER = 'dbuser'; $PW = '非表示にしています'; $dnsinfo = "mysql:dbname=ghexample;host=localhost;charset=utf8"; try { $pdo = new PDO($dnsinfo, $USER, $PW); $sql = "SELECT * FROM jusho"; $stmt = $pdo->prepare($sql); $stmt->execute(null); $res = ""; while($row = $stmt->fetch(PDO::FETCH_ASSOC)) { $pattern = "円"; $cline = $row["address"]; $match_result = preg_match("/[0-9]円/", $cline); if ($match_result == 1) { // 円を区切りにして、$clineを配列$a[]に入れる。 $a = explode($pattern, $cline); $fldcnt = mb_substr_count($cline, $pattern); $newfld = ""; for($i=0; $i<=$fldcnt; $i++) { $fldsent = $a[$i]; $leng_fldsent = $fldsent; $numflag = 0; $numpoint = 0; $j = mb_strlen($fldsent); // 円の左側が数字の場合、一番左の数字の位置を探す while(($j>0) && ($numflag == 0)) { $one_char = mb_substr($fldsent, $j-1, 1); if(preg_match("/\,|[0-9]/u", $one_char)) { $j--; } else { $numflag = 1; } } if($numflag == 1) { $numpoint = $j; } $one_char_2 = mb_substr($fldsent, $leng_fldsent -1); if(preg_match("/[0-9]/", $one_char_2) != 1) { if($i < $fldcnt) { // 円の左側が数字ではない場合は、増税計算せず、円を追加する。 $newfld .= $fldsent . "円"; } else { // $a[$lfdcnt]の場合は、円を追加しない。 $newfld .= $fldsent; } } else { // 金額の左側の文字を抽出 $japa = mb_substr($fldsent, 0, $numpoint); // 現在の税込価格を抽出 $oldprice = mb_substr($fldsent, $numpoint); // 税込価格からカンマ記号を削除 $oldprice_2 = str_replace(",", "", $oldprice); // 増税後の税込価格を算出 $newprice = ((int)($oldprice_2 / 1.08 *1.1)); // 税込価格にカンマ記号を追加 $newprice2 = number_format($newprice); $newfld .= $japa . $newprice2 . "円"; } } $sql_up = "UPDATE jusho SET address=? WHERE idju=?"; $stmt_up = $pdo->prepare($sql_up); $stmt_up->execute(array($newfld,$row["idju"])); $res = "更新しました"; print($res . "<br>"); } } $dbh = null; } catch(PDOException $e) { $res = $e->getMessage(); die(); } ?> </body> </html>
PHPコードの実行結果
学習用データベースghexampleのjushoテーブルに、手作業でピンクで囲んだ箇所のデータを追加しました。
ピンクで囲んだ箇所のaddressフィールドに、税込価格を記載した文章データが入っています。
このaddressフィールドがブログ記事だと仮定して、PHPコードを作成して、税込価格を増税後の税込価格に変更します。
まずは、第5回の記事で説明した、VirtualBoxで仮想サーバーを起動します。
次に、ブラウザを起動し、http://192.168.56.11/~user01/access.phpにアクセスするとPHPコードが実行され、上図の画面が表示されると同時に、MySQLデータベースが更新されます。
上図では「更新しました」が2行表示されているので、2つのIDのaddressフィールドが更新されたことがわかります。
学習用データベースghexampleのjushoテーブルの表示を更新すると上図のとおり、ピンクで囲んだ箇所の半角数字の税込価格が増税後の税込価格に更新されました。
まとめ
PHPのPDOクラスを使って、MySQLデータベースからaddressフィールドの内容を読み出しました。
そして、増税後の税込価格に変更した文章を、PDOクラスを使ってMySQLデータベースのaddressフィールドに書き戻すことができました。
まだ、PDOクラスについては理解できていませんが、以下の本を読みながらコードを書くことでやりたいことを実現できました。
この本は、PDOを使ってデータベースへの接続から基本操作までを解り易く説明しているので、ネットでPDOの使い方を調べただけでは十分に理解できなかったかたにおすすめです。
今回の記事では、学習用MySQLデータベースを使いましたが、今後は、オイケのブログのMySQLデータベースを使って、税込価格を増税後の税込価格への書き換えをやってみます。
では、また。
コメント