こんにちは、オイケです。
過去ブログの消費税10%対応プロジェクトの第6回目の記事では、
- 増税後価格を学習用MySQLデータベースに書き戻すPHPプロブラム
を作成しました。
今回の第7回目の記事では、
- 増税後価格をオイケのブログのMySQLデータベースに書き戻すPHPプロブラム
を作成します。
とは言っても、まだ、消費税増税後前なので、XSERVERのオイケのブログのMySQLデータベースを書き換えず、パソコンにMySQLファイルをダウンロードして試行することにします。
XSERVERからMySQLのバックアップ
まずは、XSERVERからMySQLデータベースをパソコンにダウンロードします。
XSERVERのサーバーパネルにログインし、MySQLバックアップをクリックします。
手動バックアップをクリックし、エクスポート実行をクリックします。
上図のとおり、MySQLファイルがパソコンにダウンロードされます。
次に、このMySQLファイルをパソコンの仮想サーバーにインポートします。
パソコンでMySQLファイルをデータベースにインポート
パソコンで仮想サーバーを起動後、ブラウザで、http://192.168.56.11/phpmyadmin/ を開き、ユーザ名とパスワードを入力して、実行をクリックし、phpMyAdminにログインします。
この後、MySQLファイルをデータベースにインポートします。
インポートをクリックします。
ファイル選択をクリックします。
MySQLファイルを選択し、開くをクリックします。
実行をクリックし、MySQLファイルをインポートします。
オイケのブログのMySQLファイル容量は、わずか27MBなのですが、上図のピンクで囲んだ箇所のとおり、「アップロードしようとしたファイルが大きすぎるようです。」というメッセージが出て、MySQLファイルをインポートできません。
phpMyAdminを最新バージョンにアップデートすれば解決するのかもしれませんが、現在、インストールしているphoMyAdminは、これからはじめるMySQL入門に付属しているDVDからインストールしたものであり、バージョンアップの方法がわかりません。
適当にバージョンアップしてphoMyAdmin自体が使えなくなってしまうと困るので、バージョンアップせず、SQLコマンドを使って、MySQLファイルをデータベースにインポートすることにします。
Linuxのコマンドプロントから、
- mysql -u root -p < MySQLファイル名
や
- mysql -D データベース名 -u root -p < MySQLファイル名
を実行してみましたが、上図のとおり、MySQLファイルをデータベースにリストアできません。
その他色々とオプションやユーザ名などを変えてみたのですが、リストアできません。
やっと、次の手順でリストアできました。
MySQLファイルをデータベースにリストアするためには、上図のように事前にCREATE DATABASEコマンドでデータベースを作成しておく必要があるようです。
CREATE DATABASEコマンドでデータベース作成後、Linuxのコマンドプロンプトで、
- mysql -u root -p データベース名 < MySQLファイル名
を実行したところ、上図のとおりエラー表示されなくなったので、リストアできたようです。
リストアしたデータベースの内容確認
XSERERのオイケのブログのMySQLデータベースをパソコンにダウンロードして、パソコンの仮想サーバーにリストアできたと思われます。
次に、本当にリストアできたのかを確認します。
これから、ID番号1481番のブログ記事内の税込価格を増税後価格に変更するので、まずは、ID番号1481番のブログ記事タイトルを表示してみます。
上図のとおり、
- SELECT post_title from wp_posts WHERE ID = 1481;
を実行した結果、ブログ記事タイトルが表示されたので、無事、MySQLファイルをデータベースにリストアできたことがわかります。
上図は、
- SELECT post_content from wp_posts WHERE ID = 1481;
の実行結果です。
ピンクで囲んだ箇所が、消費税8%の税込価格です。
この後、PHPプログラムでMySQLデータベースのID番号1481番のブログ記事内の税込価格を消費税10%の税込価格に書き換えます。
税込価格を増税後税込価格に変更するPHPコード
// File Name = price_replace.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 = 'root'; $PW = '●●●●'; $dnsinfo = "mysql:dbname=●●●●;host=localhost;charset=utf8"; $id_num = 1; $id_arr[1] = 1481; $pattern = "円"; try { $pdo = new PDO($dnsinfo, $USER, $PW); $sql = "SELECT * FROM wp_posts"; $stmt = $pdo->prepare($sql); $stmt->execute(null); $res = ""; # $row = $stmt->fetch(PDO::FETCH_ASSOC); while($row = $stmt->fetch(PDO::FETCH_ASSOC)) { $id_cnt = 0; $id = $row["ID"]; $cline = $row["post_content"]; $match_result = preg_match("/[0-9]円/", $cline); while($id_cnt < $id_num) { $id_cnt++; if($id == $id_arr[$id_cnt]) { 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 = floor($oldprice_2 / 1.08 *1.1); // 税込価格にカンマ記号を追加 $newprice2 = number_format($newprice); $newfld .= $japa . $newprice2 . "円"; } } $sql_up = "UPDATE wp_posts SET post_content=? WHERE ID=?"; $stmt_up = $pdo->prepare($sql_up); $stmt_up->execute(array($newfld,$row["ID"])); $res = "更新 ID= " . $row["ID"] . " " . $row["post_title"]; print($res . "<br>"); } } } } $dbh = null; } catch(PDOException $e) { $res = $e->getMessage(); die(); } ?> </body> </html>
MySQLデータベース内の全ての投稿記事に対して、税込価格を増税後税込価格に変更する処理を行うと時間が掛かってしまうので、上のPHPコードでは、17行目のとおり、ID番号1481番に対してのみ処理を行うことにしています。
PHPコードの実行結果
ブラウザを起動し、http://192.168.56.11/~user01/price_replace.phpにアクセスするとPHPコードが実行され、上図の画面が表示されると同時に、MySQLデータベースが更新されます。
上図は、
- SELECT post_content from wp_posts WHERE ID = 1481;
の実行結果です。
ピンクで囲んだ箇所が、期待どおり、消費税10%の税込価格に書き換えられています。
まとめ
私のような、PHP、SQL文、MySQLデータベースのことを全くしらない者でも、本のネットで勉強して、ブログ記事内の税込価格を消費税10%の税込価格に変更するPHPコードを作ることができました。
初めてPHPコードを実行して、ブラウザに文字が表示された時や、オイケのブログのMySQLファイルを自分のパソコンの仮想サーバーにリストアできた時は感動しました。
10月1日になったら、今回作成したPHPコードをアレンジして、XSERVER内のオイケのブログのMySQLファイルに対して実行してみようと思います。
但し、オイケのブログで紹介している企業の税込価格が消費税増税に伴い価格改定されてしまったら、全て手作業で税込価格を変更することになりますが。
一応、今回をもって、過去ブログの消費税10%対応プロジェクトを終了にしようと思います。
これからPHPやMySQLを勉強しようと思うかたへのおすすめ本を、本プロジェクトの過去記事内で紹介していますが、最後にもう1冊紹介します。
この本は、これまで紹介した本では物足りなくて、もっと詳細を知りたいかたにおすすめです。
527ページまでもあるので、私はまだ、知りたいことが載っているページしか読んでいません。
では、また。
コメント