• 検索結果がありません。

PowerPoint プレゼンテーション

N/A
N/A
Protected

Academic year: 2021

シェア "PowerPoint プレゼンテーション"

Copied!
60
0
0

読み込み中.... (全文を見る)

全文

(1)

オープンソース協議会 – IBM i

2015年度 第1回勉強会

PHP on IBM i 実践 ~後編~

2015/7/17

株式会社オムニサイエンス

田中昌宏・加邉真也

(2)

アジェンダ

 会社紹介

 サンプルソースの概要

 データベース更新の基礎

~休憩~

 jQueryの基礎

 jQueryの基本的な使い方

 PDF出力

 サンプルソース解説

(3)

会社紹介

(4)

会社紹介

会 社 名

所 在 地

社 員 数

事 業 内 容

株式会社オムニサイエンス

1987年6月18日

東京都千代田区内神田1-5-4 ミヤコビル7F

40名

・システム受託開発/ソリューション販売/技術サポート

・技術者派遣サービス

株式会社オムニサイエンス システム開発部 田中昌宏・加邉真也 [email protected] [email protected] 03-5217-2311

オープン

IBM i

(5)
(6)

サンプルソースの概要

 機能イメージ

1.商品マスタ一覧 商品マスタ 2.新規登録 更新処理 CL(RPG) 3.更新 4.削除 5.PDF出力(一覧) 商品マスタ

IFS

※IFS上に商品画像をアップロード

(7)

サンプルソースの概要

 画面イメージ(デモ)

(8)

サンプルソースの概要

 ポイント

• バリデーションチェック

サーバーサイド(PHP)でバリデーションのチェックを行っています。

• トランザクション制御

データベース更新処理の途中でエラーが発生した場合、

ロールバック処理を行っています。

• jQuery

jQueryを用いてAjax、オブジェクト操作を実装しています。

• PDF出力

TCPDF + FPDIを用いて、テンプレートからPDFを出力しています。

(9)

サンプルソースの概要

 前提となる環境

サーバー

クライアント

ハードウェア

IBM Power Systems

IBM i ( System i、i5、iSeries )

オペレーティングシステム

i5/OS V5R4 以降

Webサーバー

Zend Server for IBM i Version5.1 以降

PHP 5.3 以降

(10)

サンプルソースの概要

 使用するライブラリー等

ライブラリ

説明

jQuery 1.11.2

Javascriptを容易に記述できるように設計されたjavascripライブラリで

す。

DataTables 1.10.6

HTMLのテーブルにソートやページング、フィルタリングなどの動きをつ

けるjQueryのプラグインです。

Bootstrap 3.3.4

見た目を整えたり、レスポンシブなWebデザインを簡単に作成できる

CSSのフレームワークです。

DataTableBootstrap

DataTablesの見た目をBootstrapに合わせたデザインに変更できる

DataTablesのプラグインです。

TCPDF

PHPでPDFを作成するPHPライブラリーです。

FPDI

PHPで既存のPDFファイルを読み込む為のライブラリです。

(11)

サンプルソースの概要

 処理詳細

• 商品マスタ一覧画面(shouhin.php)

検索条件入力・検索クリック Ajaxリクエスト・レスポンス 商品マスタ 一覧表示PHP shouhin_listAjax.php SQL レスポンスされたJSONデータを グリッドに一覧表示する 削除ボタン Ajaxリクエスト・レスポンス 商品マスタ削除処理 shouhin_delete_ajax .php ストアドプロシージャ SHN001P 商品マスタ更新CL SHN001C SQL 新規登録・更新処理 削除モードで実行 【RPG処理】※削除モード 渡された商品コードをキーに 商品マスタをCHAINしてDELETE

(12)

サンプルソースの概要

登録 or 更新ボタン Ajaxリクエスト・レスポンス バリデーション/存在 チェック shouhin_registercheck .php バリデーションエラーの場合、 エラー内容を表示 Ajaxリクエスト・レスポンス 商品マスタ更新処理 shouhin_register_ajax .php ストアドプロシージャ SHN001P 商品マスタ更新CL SHN001C 商品マスタ SQL 商品マスタ更新RPG SHN001R

• 商品詳細画面(shouhin_register.php)

エラー無しの場合、更新処理を実行 【RPG処理】※登録・更新モード パラメータで渡された画面入力値を基に、 商品マスタを WRITE or UPDATE ※登録時のみ、商品コードの存在チェック行う 商品マスタ SQL

IFS

商品画像をIFSフォルダにアップロード

(13)

Ajaxリクエスト・レスポンス

サンプルソースの概要

PDF出力実行 PDF出力処理 pdf.php 商品マスタ PDF生成OKの場合、ダウンロード要求 PDFダウンロード downloadpdf.php レスポンス リクエスト SQL TCPDF + FPDI でPDFファイルを生成 ダウンロードを開始 テンプレートのPDFを読み込み、 商品マスタ一覧 テンプレート

• PDF出力

(14)

サンプルソースの概要

 プログラム構成(Web)

omniwork ajax ajaxファイル common common.php config.php msg.php image lib phplib PDF fpdi ipag00303 tcpdf Weblib Bootstrap DataTables DataTableBootstrap Jquery osc temp 画面PHPファイル ajax ajax通信で使用するファイルを格納しています。 common PHPで共通でインクルードするファイルを格納しています。 image システムで使用する画像を格納しています。 lib システムで使用するライブラリを格納しています。 temp PDFダウンロードファイルを一時的に格納しています。

(15)
(16)

データベース更新の基礎

 バリデーションチェック

• バリデーションチェックの重要性

Webシステムにおける、フォームに入力された内容のチェックは非常に

重要です。

「マスターに存在するか?」等の論理的なチェック以前に

入力された値(バリデーション)自体の属性や桁数などチェックが必要です。

最終的にデータベース更新の前に必ず全ての項目について、

バリデーションのチェックを行うようにします。

• チェックの流れは以下の通りです。

ブラウザでのチェックは突破される危険性があります。

サーバー(PHP)でのチェックはデータ整合性の最後の砦ですので、

必ず行うようにしましょう。

ブラウザでの バリデーション チェック サーバー(PHP)での バリデーション チェック (必須) データベース 更新

(17)

データベース更新の基礎

例) PHP(サーバー)での正規表現を用いた、取り得る値のチェック

preg_match('正規表現', チェックしたい値); でチェックします

共通関数として作成すると便利です

<?php

//数値チェック関数(ユーザー関数)

function checkNum($data) {

if(

preg_match('/^[-+]?¥d+(¥.¥d+)?$/', $data)

){

return true;

}

return false;

}

//入力値が数値か?

if (isset($_POST['num'])){

if(checkNum($_POST['num'])){

$errmsg='numは数値ではありません';

}

}

(18)

データベース更新の基礎

当サンプルに含まれるPHP(サーバー)でのバリデーションチェック関数の種類と内容

・checkByte

IBM i 上でのバイト数を返す

※全角文字の場合、SI/SOを考慮

・checkMaxLenNum

数値(整数部、小数部)のレングスチェック

・checkMaxLen

文字列のレングスチェック

・checkNuturalNum

値が数値(0~9)で構成されているかのチェック

・checkPositiveNum

値が数値(0~9)と"."小数点で構成されているかのチェック

・ IsHalfWidthText

値が半角文字のみで構成されているかのチェック

・ checkAlphaNum

値が英数字(記号不可)のみで構成されているかのチェック

(19)

データベース更新の基礎

参考) ブラウザでのバリデーションチェック

サーバーに入力データを送信する前にブラウザ側でバリデーションをある程度

制御することは可能です。

1.MaxLength(最大入力文字数)、IMEモード(全角or半角)の設定等

2.キー入力制御

入力フィールドでキーが押された時のイベントをJavascriptで制御し、

特定の文字のみを入力される等・・・

3.Javascriptでのバリデーションチェックや値の変換

作成するアプリケーションの要件に合わせて、サーバー(PHP)でのチェック

と組み合わせて使用する。

(20)

データベース更新の基礎

 トランザクション制御

• トランザクションとは

データベースに対する複数の操作(挿入、更新、削除)を

実行している途中に仮にエラー発生したとしても、

データの整合性を保証するデータベースシステムのメカニズムです。

複数のデータベース操作を一つの処理単位(トランザクション)とし、

確定(コミット) or 元に戻す(ロールバック)という考え方を基本とします。

(21)

データベース更新の基礎

 PHP on IBM i でのトランザクション処理 1.ジャーナルの作成と開始(IBM i コマンド) トランザクション処理を行うには、IBM i 側でジャーナルを開始しておく 必要があります。 ジャーナルとはIBM i 上で、データベースの更新履歴を記録する仕組みです。

/*ジャーナルレシーバーの作成*/

CRTJRNRCV JRNRCV(OMNIWORK/OMNJRNRCV)

/*ジャーナルの作成*/

CRTJRN JRN(OMNIWORK/OMNJRN) JRNRCV(OMNIWORK/OMNJRNRCV)

DLTRCV(*YES)

/*物理ファイルのジャーナル開始*/

STRJRNPF FILE(OMNIWORK/SHNMST) JRN(OMNIWORK/OMNJRN)

IMAGES(*BOTH) OMTJRNE(*OPNCLO)

(22)

データベース更新の基礎

2.PHPでデータベース接続後にトランザクションを開始

以下のオプションを指定して、トランザクションを開始します。

・自動コミットをOFF

・分離レベルを指定して、トランザクションを開始

<?php

//データベースへの接続

$db=db2_connect('*LOCAL', '', '',

array('i5_naming'=>DB2_I5_NAMING_ON,

'i5_libl'=>'QGPL QTEMP OMNIWORK'));

//自動コミットをOFF

db2_autocommit($db, DB2_AUTOCOMMIT_OFF);

//分離レベルを指定してトランザクションを開始

db2_exec($db, 'SET TRANSACTION ISOLATION

(23)

データベース更新の基礎

3.コミット or ロールバック

db2_commit, db2_rollbackの何れかが発行されると、トランザクションが終了します。

db2_commitを発行せずにdb2_closeすると自動的にrollbackされます

・・・前ページより

//データベースの更新①

db2_exec($db, 'DELETE FROM SHNMST');

// ロールバック

db2_rollback($db);

//再度、分離レベルを指定してトランザクションを開始

db2_exec($db, 'SET TRANSACTION ISOLATION

LEVEL READ COMMITTED');

//データベースの更新②

db2_exec($db, "INSERT INTO SHNMST VALUES('00002','佐藤',29)");

// コミット

db2_commit($db);

(24)

データベース更新の基礎

参考) PHP→RPGで更新処理を行う場合

"COMMIT"定義が必要です

(25)

データベース更新の基礎

参考) トランザクションの分離レベル

複数のユーザーが同じデータベースに対して操作を行う場合に、

データアクセスを制御し、望ましくない現象を発生させないようにすることも、

トランザクションの重要なメカニズムです。

これをトランザクションの分離レベルといいます。

分離レベルには以下の4つの指定があります。

SET TRANSACTION

ISOLATION LEVEL

xxxx

略称

ダーティーリード

反復不能読み取り

ファントムリード

READ UNCOMMITTED

UR

ありえる

ありえる

ありえる

READ COMMITTED

CS

安全

ありえる

ありえる

REPEATABLE READ

RS

安全

安全

ありえる

SERIALIZABLE

RR

安全

安全

安全

並行性が高い 整合性が高い

(26)
(27)
(28)
(29)
(30)
(31)

jQueryはオープンソースのJavaScriptライブラリの一つで、

JavaScript上で動作します。

他のprototype.jsなどのライブラリと比較して、

非常に軽量で高速であることが特徴で、現在最も利用されている

ライブラリです。

ライブラリとは、よく使う機能をいくつも纏めてあるものを示します。

jQueryを利用することで、シンプルなコードでWebページに効果や

アニメーション、ユーザインターフェース要素などを追加でき、

Ajaxによる通信も容易に実装できるようになります。

また、様々な機能を実現する豊富な対応プラグインも公開されています。

jQueryの利用にはJavaScriptの基礎知識が必要です。

jQueryの基礎

(32)

1.オブジェクト操作の記述簡略化

例えば・・・

上記のようなラジオボタンから、選択されている要素の値を取得する場合

<input type="radio" name="fruit" value="リンゴ" checked> リンゴ

<input type="radio" name="fruit" value="いちご"> いちご

<input type="radio" name="fruit" value="みかん"> みかん

//JavaScriptで記述すると・・・

var fruit = document.getElementsByName("fruit");

for(var i=0; i<fruit.length; i++){

if (fruit[i].checked) {

val = fruit[i].value;

break;

}

}

jQueryの基礎

(33)

上記のように jQueryを利用することで、オブジェクト操作の

ロジック記述を簡略化することが可能です。

2.タブやカレンダーの実装

jQuery UI(プラグイン) を利用してタブやカレンダーなどの

実装が容易に行えます。

//jQueryで記述すると

var val = $('[name="fruit"]:checked').val();

jQueryの基礎

(34)

3.Ajaxの実装

Ajaxとは

JavaScriptを用いて非同期でサーバーと通信を行い、

その結果から動的にHTMLを書き換える技法を指します。

リクエスト→レスポンスの度に、ページ全体の読込が発生

Ajaxを使わない場合

jQueryの基礎

(35)

JavaScriptがバックグラウンドでサーバーと通信を行い、

結果ページの一部を書き換える

→ページ全体の読込が発生しない

Ajaxを使った場合

jQueryの基礎

(36)

「画面に入力したコードのマスタ存在チェックをしたい」

「画面に入力したコードの名称を取得して表示したい」

例えば、上記のような処理を実装する場合、

データベースの参照が必要となります。

つまり、サーバー側の処理(php)ということです。

従来ではサーバー側の処理(php)を実行するには、

画面遷移(submit)が必要でしたが、

Ajaxを使用することで、画面遷移することなく、サーバー側の処理(php)

を実行して、結果を画面(html)に反映させることが可能になります。

レスポンスに優れたWebシステム構築にはAjaxは必須の技術です。

jQueryの基礎

(37)

4.グリッドの実装

jQuery DataTables(プラグイン) 等を利用して実装します。

上記のような"表"を一から<table>タグのみで作成するのは非常に

困難です。

グリッドを使えば"表"はもちろん、列での並び替え(ソート)や

ページ制御といった機能が容易に実装できます。

jQueryの基礎

(38)

1.ライブラリの読み込み

jQueryライブラリをサーバーのディレクトリに配置し、

JavaScriptの外部ファイルとして指定します。

<head>

<script src="配置したパス/jquery-1.11.2.js" type="text/javascript"></script>

~中略~

</head>

(39)

2.jQueryの記述部と実行タイミング

jQueryはJavaScriptですので、

<script type="text/javascript">~</script>の中に記述します。

一般的に、

$(function () { ~ });の中にjQueryの処理を記述していきます。

<script type="text/javascript">

$(function () {

// この中にjQueryの処理を書く

});

</script>

jQueryの基本的な使い方

(40)

$(function () { ~ });の中に記述された内容は、

そのページの読み込みが完了した時点で実行されます。

上記の例ではページの読み込みが完了した時点で、

入力フィールド(shain_cd)にフォーカスをあてています。

※ id="shain_cd"はhtml内で一意となる識別を指定しています

<script type="text/javascript">

$(function () {

$("#shain_cd").focus();

//読み込みが完了した時点で実行されます

});

</script>

</head>

<body>

<input type="text"

id="shain_cd"

name="shain_cd">

</body>

</html>

(41)
(42)

3.オブジェクト操作

※ <div>~</div>は一つのブロックを定義するタグです

※ id="errmsg"はhtml内で一意となる識別を指定しています

【結果】

~中略~

<script type="text/javascript">

$(function () {

$("#errmsg").html("エラーメッセージ").css("color", "red");

});

</script>

</head>

<body>

<div id="errmsg"></div>

</body>

</html>

jQueryの基本的な使い方

(43)

基本形)

jQueryオブジェクト . 処理メソッド;

記述例)

$()

は、指定されたセレクタのjQueryオブジェクトを返します。

"#errmsg"

が、セレクタです。

html内で "errmsg" をidに持つ要素(タグ)を

jQueryオブジェクトとして操作する為の記述です。

#(idセレクタ)以外にも様々なセレクタがあります。

主要なセレクタ

$("#errmsg")

.html("エラーメッセージ").css("color", "red");

$("#abc")

idセレクタ

# シャープ記号

$("input")

タグセレクタ

<>を付けずに記載します

(44)

.html

は、jQueryオブジェクトが持つメソッドの一つです。

("HTMLの内容")を引数として、htmlを編集することができます。

.css

は、

("プロパティ名", "値")を引数として、スタイルシートを設定できます。

.(ピリオド)で繋げて複数のメソッドを記述可能です ※メソッドチェーン

jQueryオブジェクトには様々なメソッドが用意されています。

他の主要なメソッド

$("#errmsg")

.html("エラーメッセージ").css("color", "red")

;

.val()

オブジェクトの値を取得又は、設定します

.attr()

オブジェクトの属性を取得又は、設定します

.submit()

オブジェクトをサーバーに送信します

.click()

オブジェクトがクリックされた時の動作を指定します

※.click(function(){ ~ } で記述します

jQueryの基本的な使い方

(45)
(46)

PDF出力

サンプルソースではTCPDFとFPDIという2つのPHPライブラリを使用して、

あらかじめ作成したPDFをテンプレートとし、値を埋め込むという手法で

PDFを作成しています。

1.ライブラリファイルの読み込み

2.PDFの設定

3.フォントの設定

4.テンプレートファイルの読み込み

5.テンプレートに値を代入

6.任意の場所にファイルを保存

(47)

PDF出力

require_once '../lib/phplib/PDF/tcpdf/tcpdf.php';

require_once '../lib/phplib/PDF/fpdi/fpdi.php';

ライブラリの読み込み

tcpdf.phpとfpdi.phpを読み込みます

//FPDIのインスタンスを取得

//横向きA3サイズ 座標単位mm

$pdf = new FPDI("L","mm","A3");

$pdf->SetMargins(0, 0, 0);

//用紙の余白を0に設定

$pdf->SetCellPadding(0);

//セルパディングを0に設定

$pdf->SetAutoPageBreak(false);

//自動改ページをfalseに設定

$pdf->setDisplayMode(100);

// ズームを100%に設定

$pdf->setPrintHeader(false);

// ヘッダを使用しない

$pdf->setPrintFooter(false);

// フッタを使用しない

PDFの設定

FPDIをインスタンス化して、PDFの設定をします。

(48)

PDF出力

//フォントの設定

$font_path = '../lib/phplib/PDF/ipag00303/ipam.ttf';

//addTTFfontにIPAのttfファイルのパスを入れます

$font_name = $pdf->addTTFfont($font_path);

//addTTFfontの返り値をSetFontの第一パラメータにいれます。

$pdf->SetFont($font_name, ‘’, 10);

//第二パラメータはスタイル、第三はサイズです

フォントの設定

IPAフォントを使ってフォントを設定します。

IPAフォントはサイトからダウンロードします。http://ipafont.ipa.go.jp/

$pdf->AddPage();

//ページの追加

//テンプレートの読み込み

$pdf -> setSourceFile('../lib/phplib/PDF/tcpdf/Template/shouhinlistPDF.pdf');

//読み込んだテンプレートの1ページ目を取得

$tplIdx = $pdf->importPage(1);

//読み込んだテンプレートの1ページ目をテンプレートとして使用

$pdf->useTemplate($tplIdx);

テンプレートの設定

テンプレートに使うPDFを指定します

(49)

PDF出力

//$yにはy座標の数値が入っています。

$pdf->writeHTMLCell(10, 0, 25, $y, $value['SHSHCD']);

テンプレートPDFに値を代入

長さ、高さ、X座標、Y座標を指定してテンプレートPDFに値を代入します。

//テンポラリに保存するファイル名

$filename ='shouhin'.date('YmdHis').'.pdf';

$pdffile='../temp/'.$filename;

//tempディレクトリに保存

$pdf->Output($pdffile, 'F');

任意の場所にファイルを保存

保存するパスを指定して、Outputでファイルを保存します。

(50)
(51)

サンプルソースの解説

if($productcode === ''){

$pcodeErr = MSG7;

//エラーメッセージはmsg.phpに定数で定義

$res = 1;

}

1.バリデーションチェック

ブランクチェック

登録・更新の直前にajaxでバリデーションチェックのファイル(shouhin_registercheck.php)を呼んでます。

チェックに引っかかった場合に$resの変数に1を代入し、$~Errの変数にメッセージを付けてブラウザに

返します。

if(!(checkAlphaNum($productcode))){

$pcodeErr = MSG7_2;

$res = 1;

}

英数字チェック

*checkAlpaNum関数はパラメータに渡された値がA~Zか0~9で構成されている場合にtrue、

(52)

サンプルソースの解説

if(!(checkMaxLen($productcode,5))){

$pcodeErr = MSG7_1;

$res = 1;

}

長さチェック

if($stockprice !== '' && !(checkPositiveNum($stockprice))){

$spriceErr = MSG9;

$res = 1;

}

数値チェック

*checkPositiveNum関数はパラメータに渡された値が0~9または.(ドット)で構成されている場合にtrue、

それ以外が入っている場合はfalseを返します。

*checkMaxLen関数は全角が入っている場合のシフトインシフトアウトを含んだByte数を考慮して

文字の長さをチェックします。パラメータにはチェックしたい値とそのMAXByte数を渡します。

MAXByte数以内であればtrue,超えていればfalseを返します。

(53)

サンプルソースの解説

if(!(checkMaxLenNum($unitprice,7,2))){

$upriceErr = MSG10_1;

$res = 1;

}

少数チェック

*checkMaxLenNum関数は整数部分の桁数と少数部分の桁数をチェックします。

パラメータにはチェックする値と整数の桁数、少数の桁数を渡します。

チェックする値が指定された桁数以内であればtrue、超えていればfalseを返します。

(54)

サンプルソースの解説

if("PHP" == 0){

echo('TRUE');

}

if(null == 0){

echo('TRUE');

}

if("" == false){

echo('TRUE');

}

①緩やかな比較(==や!=)でなく、厳密な比較(===や!==)でチェックすること。

バリデーションチェックを行う時のポイント

緩やかな比較でチェックした場合、値の型まで考慮して比較されないので予想外の値がチェックを

通ってしまう場合があります。DB更新前のチェックは厳密な比較で行うことが望ましいです。

(例)==でチェックした場合、以下のif文が全てtrueとなってしまいます。

①入力チェックはサーバー側で行うこと

HTMLタグで入力制限を記述したり、Javascriptで入力チェックを行うこともできますが、ブラウザ側の

タグ記述やscriptはユーザーが簡単に書き換えることが出来てしまいます。

DB更新系の処理などでチェックをブラウザ側だけに任せてしまうと、ありえない値を入れられてしまい、

致命的なエラーに繋がってしまう可能性もありますので、入力チェックは極力サーバー側で処理をする

ことが望ましいです。

(55)

サンプルソースの解説

2.トランザクション制御

サンプルソースではDBの登録・更新時にトランザクション制御を行っています。

画像保存処理の結果に応じてコミットロールバックを制御することによって、DBが更新されたのに画像

が保存されていないという状態を防ぐことができます。

DB接続 AutoCommitをOFFにする トランザクションの開始 CLでDBを更新 画像保存処理 保存できたか? コミット ロールバック YES NO ※DBの更新処理が取り消される

(56)

サンプルソースの解説

$db2con = cmDbCon();

DB接続

$rs = db2_autocommit($db2con,DB2_AUTOCOMMIT_OFF);

AutoCommitをOFFにする

*db2_autocommitにDBコネクションとDB2_AUTOCOMMIT_OFFを渡してAutoCommitをOFFにします。

*cmDbCon関数を使ってデータベースに接続します。

db2_exec($db2con, 'SET TRANSACTION ISOLATION LEVEL READ COMMITTED');

トランザクションの開始

(57)

サンプルソースの解説

//コールするプロシージャをSQLで記述

$stmt = db2_prepare($db2con, "CALL SHN001P(?,?,?,?,?,?,?,?,?)");

// ストアドへのパラメータバインド

$retBool = db2_bind_param($stmt, 1, "param1", DB2_PARAM_OUT);

$retBool = db2_bind_param($stmt, 2, "param2", DB2_PARAM_OUT);

$retBool = db2_bind_param($stmt, 3, "param3", DB2_PARAM_OUT);

$retBool = db2_bind_param($stmt, 4, "param4", DB2_PARAM_OUT);

$retBool = db2_bind_param($stmt, 5, "param5", DB2_PARAM_OUT);

$retBool = db2_bind_param($stmt, 6, "param6", DB2_PARAM_OUT);

$retBool = db2_bind_param($stmt, 7, "param7", DB2_PARAM_OUT);

$retBool = db2_bind_param($stmt, 8, "param8", DB2_PARAM_OUT);

$retBool = db2_bind_param($stmt, 9, "param9", DB2_PARAM_OUT);

//プロシージャの実行

$ret = db2_execute($stmt);

CLでDBを更新

*db2_preapre、db2_bind_param、db2_execteを使ってCLを実行します。

(58)

サンプルソースの解説

画像保存処理

*<input type=‘file’>でアップロードされたファイルはPHPの$_FILES配列に情報が格納され、サーバー

のテンポラリにファイルが一時的に保存されます。

move_uploaded_fileでテンポラリに保存されているファイルを任意のディレクトリに移動しています。

move_uploaded_fileは保存の成功時にtrue、失敗した時にfalseを返すので、その返り値で判定を

行い、コミットロールバックを行っています。

$image_name = $_FILES['image']['name'];

//アップロードファイル名

$image_tmp_name = $_FILES['image']['tmp_name'];

//テンポラリに保存されたファイル

$temp =explode(".",$image_name);

//ファイルの拡張子を取得

$newfilename = $successfulimage. ‘.’.end($temp);

//保存ファイル名を生成

//テンポラリに保存したファイルをimageフォルダへ移動

$moveres = move_uploaded_file($image_tmp_name,"../image/shouhinimg/$newfilename");

//画像の保存に失敗した場合はロールバック処理、成功した場合はコミット処理

if($moveres === false){

db2_rollback($db2con);

}else{

db2_commit($db2con);

}

(59)

サンプルソースの解説

cmDbClose($con);

DBの切断

(60)

第1回(07/17 金): PHP on IBM i 実践 ~後編~

第2回(09/25 金): PowerRuby入門

第3回(11/20 金): node.js入門 ※仮タイトル

第4回(01/15 金): タイトル未定

第5回(03/18 金): タイトル未定

時間 : 毎回15:30~17:30 (120分)

2カ月に一度開催、全5回の勉強会を実施します。

勉強会の実施

参照

関連したドキュメント

●Gartner Magic QuadrantにてクラウドHCM Suiteにおけるリーダーの評価.. Copyright © 2022 Nomura System Corporation Co, Ltd. All Rights Reserved.. Copyright © 2022 Nomura

支援要請入力詳細 13ページ 患者受入入力詳細 14ページ 支援可能スタッフ3.

and Kristjan Vassil (2010) Internet voting in Estonia : a comparative analysis of four elections since 2005 : report for the Council of Europe”Report for the Council of Europe.

2021年1月15日にHa Tay Pharmaceutical Joint Stock Company(

がん化学療法に十分な知識・経験を持つ医師のもとで、本剤の投与が適切と判断さ

日医かかりつけ医機能研修制度 令和 年度応用研修会 「メタボリックシンドロームからフレイルまで」 飯島勝矢 Tamakoshi A ら. Obesity

(Immuno Checkpoint Inhibitor Proper use Support team

剣道部 柔道部 硬式野球部 卓球部 水泳部 ラグビー部 ソフトテニス部 テニス部 ハンドボール部 サッカー部 バドミントン部