ASP.NETJavaScriptPHP

eval使用時にJsonでの改行について

1 Mins read

Jsonの項目内の改行コードの記述方法について

サーバーサイドでは\マークはエスケープ文字としてよく利用されている為に
ついつい”\n”の状態にてJsonに含めるとクライアントサイドのeval時にエラーとなる。

なのでエスケープされる場合は”\\n”と2回つけることを忘れべからず!
もちろん多数ある場合も改行コードを上記のように置換処理をすること!

PHPの場合はダブルクォート「”」とシングルクォート「’」でエスケープされる、
されないが変わるので、どちらかに統一するのが望ましい。

これはJsonだけの話ではないが、重要なので記述!
javascript側では受け取ったJsonを展開するときにカッコで囲ってあげること!
例:var a = eval(‘(‘+json+’)’); //このカッコ追加は結構注意!

覚書(^ ^)

Related posts
LinuxMySQLPHP

PHP7 MySql error Uncaught Error: Call to undefined function mysql_real_escape_string()

1 Mins read

PHP7の環境へPHP5系のアプリを移動してみたら案の定動かん。。。

モジュール調べたら「mysql_」系が無くなってて「mysqli_」に代わっているのみたいなのでソース内をgrepして片っ端から直したらなんとか動いた♪

mysql_

から

mysqli_

へ「i」つける!

「mysql_select_db」や「mysql_query」は「i」付けるだけではなく、引数の順番も変わっているから念のため、関連する部分は見直しが必要です。

このタイミングで出来ればオブジェクト指向系に変更することをおススメします。
「mysqli::query」感じ!

あと、なんかunset($this)も使えんようになってたみたい。

時代は進むんだぁ

JavaScript

javascript UI 開発時の心得 'Sencha Ext JS' 'Webix' 'OpenUI5' 'AngularJS'

1 Mins read

お久しぶりです。

ブログ更新が2014年から止まっていますが、筆者は変わらずに開発者もやっています。

ここ数年javascript(以下、js)のライブラリーを使用しAjaxとjsonを合わせたシステム開発で楽しんでおります。サーバーサイドはjson出力できれば何でもよいかなぁ(笑)

Sencha Ext JS Webix OpenUI5 AngularJSなど使用し、一番使い込んでいるのはExt Jsです。

20年近くこの業界におり、要件定義など紙を書く仕事より手を動かすほうが相変らず好きなので、オープン系を中心に色々な言語を経験習得してきています。

どの言語でも初めに勉強する際には日英(英の方が圧倒的に多い)関わらずサンプルを見ながら皆さん勉強し、コピペしながら使い方を覚えていくと思います。他の言語ならサンプルソースを元にしサクサクと勉強、習得、本番システム作成と思い通りの速度で構築していくことが出来るのですが、jsと言う言語については同じような要領で進めてみても開発時に四苦八苦している方やお手上げ状態で涙目になっている方を多く見受けています。

そこで要点について解説したいと思います。

まずキーとなる部分はhtmlで使用され各タグに設定もできる「id」となります。これはcssをリンクする際にも使用できますが、表示されているhtml上で必ずユニークにする必要があり、その特性を生かしjsではもっぱらdomオブジェクトの指定やdomと紐づくjsコンポーネント名として使用され外部クラスからサーチする時など、操作する際に使用されております。

タイトルで上げたjsを含め各種サンプル等では、このidが固定(リテラル)なことが多くサンプルソースを参考にし、サクッと組み合わせても、思うように動かないことが多々あるのですが、その理由の大半がid名を固定のまま使用した結果、重複してしまい動かないというパターンが圧倒的に多い気がします。

ここが心得部分となりますが、jsコンポーネントクラスのインスタンスを作成する際、親クラスで動的にユニークなidを生成しそのidを埋め込む形で子クラスを生成する。(子クラスで生成し親クラスへ送るという逆パターンも状況によりあり)また、そのidを親クラスや上位コンポーネントで記憶しておき子クラスを操作する。それにより名前の衝突を回避でき正常に操作することが可能となります。サンプルのクラスは子クラスを複数持っていることが多く、その全部のidを動的生成へ変更することと、親側で操作する部分も動的生成されたidを使用するように修正する必要があります。よってサンプルのクラスはid=固定(リテラル)で作成されていることが多いので簡単に移植できない状況となっています。

各ライブラリには動的にidを生成するお手軽メソッドが存在することが多いので、そのメソッドを使用することをお勧めします。(例:Ext.id())

当たり前ですが世の中、何かを識別するには必ずユニーク名が最後に必要となります。マイナンバーが何処まで使用できているのかわかりませんが日本では人の区別を姓名や生年月日、市区町村などで見分けているようですが、その曖昧さのせいで間違って他人の年金を管理するなどエンジニアとしては考えられない状況が昔からあるようです。コンピュータの世界では近年macadressを使用して生成するキー、uuidを使うことが多いですかね。しかし、uuidですら天文学的にはユニークを保証できないのですが(笑)

話をjsに戻して、最近の言語、C#、VB.Net、Java、PHP、Rubyなどではあまり使用しないスレッド処理(非同期)の概念がAjaxとjsonでは求められ考えながら作りこむのが大変面白いです。昔、C言語でWindows API Messageを使用しフックされてから動作させるアプリを思い出します。

あと、jsは動的にクラス継承、メソッド、プロパティ、メンバ変数を増やしていけるスクリプト言語なので、他の言語のようにコンパイルエラーで問題点を簡単に炙り出せない。エンジニアがjsの特性を理解し、より明確なドキュメント化やカプセル化をしないとチーム単位で開発スピードを上げるのが大変そうです。

この動的に色々やれる部分は、昔、C#、Javaではシリアライズとデシリアライズとしていくつか作ったことあります。動的にクラスをテキスト化しサーバー間を通して送り先サーバーでテキストからメモリ上のインスタンスとしてクラス化し送り先のJavaでそのまま動作させるということももちろんできますし、データベースからモデルを読み込み動的にJavaクラスをインスタンス化することもできます。これはSOAPという技術でも使用されたり、同じ原理でJavaのStrutsも動いており、Strutsに関しては、この部分の脆弱性を危惧する声が大きいのも話題となっていますね。

少し話が脱線しました(笑)

js楽しいのでイチ押し言語です。

心得「id」は動的に生成する!でした。

ApachePHPSQLServerWindows ServerWindows7パソコンのこと

Windows7 Apache2.4.4 PHP5.4.22 SQL Server 2008R2接続 開発環境構築について

1 Mins read

■環境クライアント
Windows7(x64)
LAMPP 1.8.2(x86)
UTF-8

■接続先サーバー
Windows Server 2008R2(x64)
Microsoft SQL Server 2008 (SP3) – 10.0.5500.0 (X64)
UTF-8

■クライアント環境 SQL Server Native Client

[MicrosoftR SQL ServerR 2012 SP1 用 Feature Pack]から
[JPN\x64\sqlncli.msi] Or [JPN\x86\sqlncli.msi]をダウンロードする。

クライアントOSの環境に合わせる。今回はWindow7x64なので場合は[JPN\x64\sqlncli.msi]をインストールする。

また、接続先はSQL Server 2008R2だが下位互換があるため、最新版の2012用を使用する。

http://www.microsoft.com/ja-jp/download/details.aspx?id=35580

■クライアント環境 Drivers for PHP for SQL Server

Microsoft Drivers 3.0 for PHP for SQL Server

今回は
・PHP5.4系
・SQL Server 2008R2
・Native Client 2012用
なので、「Microsoft Drivers 3.0 for PHP for SQL Server」を使用する。
環境により「Microsoft Drivers 2.0 for PHP for SQL Server」と使い分けること。

以下から、ダウンロードしてくる
http://www.microsoft.com/en-us/download/details.aspx?id=20098

回答後のファイルの中からPHP5.4用のextensionを使用する

PHPのスレッドセーフ Or Noneスレッドセーフにより
「php_pdo_sqlsrv_54_ts.dll」 Or 「php_pdo_sqlsrv_54_nts.dll」を使い分ける

あとはPHP.iniに以下を記載する(今回はスレッドセーフ版使用)
extension=php_sqlsrv_54_ts.dll
extension=php_pdo_sqlsrv_54_ts.dll

phpinfoで確認して使用する

PDO&UTF-8指定で接続!

チームを強化する

サービスの
サブスクリプションの利点を説明するテキストを追加します。