信頼はずっと、挑戦はもっと。

お問い合わせ
TEL:03-3496-3888

BLOG コアテックの社員ブログ (毎週月曜~金曜更新中)

LIST OF ARTICLES

記事一覧

  • テクログ

    jQueryとJavaScript3

    今回はjQueryとJavaScriptで入力した文字を精査する処理を 作成したいと思います。 今回は、keypress()・keyup()を使用します。 まず、keypress()・keyup()の書式は $("セレクタ").keypress(function(e) { // 処理A }); $("セレクタ").keyup(function(e) { // 処理B }); keypress()は、キーが押された時に実行したい処理を設定できます。 keyup()は、キーが上がった時に実行したい処理を設定できます。 他にもkeydown()があり、キーが押し下げられた時に実行したい処理を 設定できます。 実行される順序は、基本的にはkeydown()→keypress()→keyup()の順番です。 ただし、押下されたキー、ブラウザ、IMEの状態によっては、 発生しないイベントやイベントの発生順序が異なる場合があるようです。 入力した文字を精査するために、どのキーが押されたかを判別します。 keypress()内でfunction(e)としておりますが、 e.whichでキーコードを取得することができます。 例えば「1」キーを押した場合は「49」を取得します。 この、キーコードを文字に変換してくれるものや 文字を比較してくれるものがJavaScriptに用意されています。 // キーコードを文字に変換 String.fromCharCode(キーコード); // 比較 文字列.match(正規表現); 上記を踏まえて、下記の仕様のサンプルを記載します。 ・数字のみを許可 ・同じ数字は使用不可 ・3桁で終了 $(function(){ $('#number').keypress(function(e) { // キーが押された時 CheckFlg = false; var key = String.fromCharCode(e.which); // 数字以外のキーは許可しない if(!key.match(/d/)){ alert('数字を入力して下さい。'); // 下記で入力文字が消去される return false; } // 同じ数字を許可しない if($(this).val().match(key)){ alert('同じ数字を使用することはできません。'); // 下記で入力文字が消去される return false; } CheckFlg = true; }).keyup(function(e) { // キーが上がった時 // 入力値に問題がない場合 if(CheckFlg){ Number = $(this).val(); // 3桁に達していなければ、何もしない。 if(Number.length != 3) return true; alert('3桁です。'); // 全ての入力文字を消去 $(this).val(''); } }); }); ここで、注意したいのが keypress()・keyup()内で$(this).val()とすれば、 入力文字を取得できるのですが、それぞれのメソッドで取得内容は異なります。 keypress()の場合は、直前に入力した文字は含まれない。 keyup()の場合は、直前に入力した文字も含まれる。 例えば、 最初に「1」を入力 →keypress()では取得できない →keyup()では取得できる 次に「2」を入力 →keypress()では「2」は取得できず、前に入力した「1」のみ取得 →keyup()では「12」を取得できます。 では、また来月お会いしましょう。。。
  • テクログ

    【php】if文四天王

    大根畑にゴボウが1本。php初心者のミネックです。自分がphpを使い初めの頃、社内のスーパーエンジニアのまーさんがこんな事を仰っていました。「phpには、『やりたいな~』と思ったメソッドは、だいたい揃っとるんじゃよ」「じゃからggrば、だいたいの情報は出てくるし、もうホントいかにggrるかじゃよね~。」「ggrスキルはコーダーの実力に直結するのじゃ!」へ~↓ふ~ん↓ぶっ!っと、その時は聞き流し放屁したのですが、仕事を進めていくと、まーさんの仰るとおりになっていったのでした。ので、今回は、phpをやり始めて感心したメソッドを1つ2つご紹介します。あくまで初心者向けなんで、自称中級者どもは、一人でカタカタやってろください。 あなたをifへと誘う!地獄の門番!isset!   isset — 変数がセットされていること、そして NULL でないことを検査する   こいつ、よく見ます。 issetがやられたようだな…is_array!   is_array — 変数が配列かどうかを検査する   アンダースコアが入るからね!アンスコ注意よ!アンスコ! ククク…issetは四天王の中でも最弱…file_exists!   file_exists — ファイルまたはディレクトリが存在するかどうか調べる   へぇ~ディレクトリの存在も調べられるのか…し、知ってたYO! nullごときにやられるとは我ら四天王の面汚しよ…function_exists!   function_exists — 指定した関数が定義されている場合に TRUE を返す   wordpressのプラグインいじってる時に見ました。 おわりに これらのメソッドを使えるようになった時の全能感はヤバかったです。phpって便利だなー。改めて、教えてくださっている先輩方、ありがとうございます。 引用はすべてhttp://jp1.php.net/から
  • テクログ

    cookie.jsで開閉記憶アコーディオン

    こんにちは。先日jQueryのプラグインで、手軽かつ面白いかなと思うものを見つけました。ご存知の方はご容赦ください。   その名も「jquery.cookie.js」JavaScriptで、簡単に!クッキーを扱えるプラグインです。   今回はこれを用いて、「アコーディオンの開閉状態をクッキーで記憶しておく」サンプルを作成してみました。アコーディオンを開いた状態でページを遷移(更新する等)しても開きっぱなしにしておけるアコーディオンです。   画像やCSSはないのでさびしいですが、サンプルはこちら(GoogleChromeでしか試してないので、動かなかったらすみません...)   ↓参考にさせて頂いたサイトはこちら↓『jQueryを使ったスライド開閉メニューをCookieでコントロールする』 では、解説していきます。   ―――――――――――――――――――――――――――――――――――まずはjquery.cookie.jsの使い方です。 *********************************1.クッキーに値を保存する $.cookie('クッキーの名前', '値'); 2.クッキーの値を呼び出す $.cookie('クッキーの名前'); 3.クッキーを削除する $.cookie('クッキーの名前', null);********************************* 以上です。簡単ですよねヽ(´▽`)ノ   保存する際、第3引数にオプションを持たせることで、保存日数等を指定したりもできるようです。 $.cookie('クッキーの名前', '値', {expires: 7});   ※注意 - クッキー削除時の不具合※上記の削除方法だと、クッキーが削除されない場合があるようです。その場合下記に変更すれば良いみたいです。 $.cookie('XXXXX', '',{,expires:-1}); クッキーの値を空にして、有効期限を過去に指定しています。   ↓参考サイト↓『jquery.cookie|null指定でクッキー削除されないケースあり』   ―――――――――――――――――――――――――――――――――――以上を踏まえまして、アコーディオンを実装してみます。   <html> アコーディオンタイトル0 コンテンツ コンテンツ アコーディオンタイトル1 コンテンツ コンテンツ コンテンツ コンテンツ アコーディオンタイトル2 コンテンツ コンテンツ コンテンツ アコーディオンタイトル3 コンテンツ コンテンツ コンテンツ コンテンツ コンテンツ コンテンツ アコーディオンタイトル4 コンテンツ コンテンツ コンテンツ ※クリックするアコーディオンタイトルの箇所にだけ、クラスを振っています。   <css> .accordion_title { cursor:pointer; } ※カーソルをポインタにするCSSのみ記述しています。   <JS(必要なファイルを読み込む)> 使うのは、2つだけです。・通常のjQueryライブラリ(上)、・jquery.cookie.js(下)   ※2012/11現在、jquery.cookie.jsは配布元に置いていない(?)ようです。下記サイトを参考に入手できます。http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1079503625   ここまでがアコーディオンの準備。次がいよいよ、アコーディオンの動きと、クッキーによる開閉記憶の処理になります。   <JS(アコーディオン処理を書く)> $(function() { /**************************/ /*** クッキーの値を設定 ***/ /**************************/ var cookie = ''; //クッキーが存在する場合、変数に値を設定 if($.cookie('accordion') && $.cookie('accordion') != null) { var cookie = $.cookie('accordion'); } /**************************************/ /*** アコーディオンをひとつずつ設定 ***/ /**************************************/ $('.accordion_title').each(function(index) { /*** クッキー情報から、はじめの開閉状態を判断 ***/ //クッキーが存在しない or クッキーにアコーディオンナンバーがない場合、閉じる if($.cookie('accordion') == null || cookie.indexOf(index) == -1) { $(this).next().hide(); //クッキーにアコーディオンナンバーがある場合、開ける } else { $(this).addClass('opend'); $(this).next().show(); } /*** アコーディオンのクリックイベントを登録 ***/ $(this).click(function() { //「opened」クラスがあれば削除、なければ付与 $(this).toggleClass('opend') //アコーディオンを開閉する $(this).next().slideToggle(); //アコーディオンを開いた(「opened」クラスを付与した)場合、 //クッキーにアコーディオンナンバーを登録 if($(this).hasClass('opend')) { cookie += index; $.cookie('accordion', cookie); //アコーディオンを閉じた(「opened」クラスを削除した)場合、 //クッキーからアコーディオンナンバーを削除 } else { cookie = cookie.replace(index, ''); //クッキーにアコーディオンナンバーがない場合、クッキーを削除 if(cookie.length == 0) { $.cookie('accordion', '', {expires:-1}); } else { $.cookie('accordion', cookie); } } }); }); }); $('.accordion_title').each(function(index) {...});によって、一つ一つのアコーディオンタイトルに「0,1,2...」とナンバーを振っています。「そのナンバーがクッキーに保存されているかどうか」で、アコーディオンの開閉状態を判断しています。   処理の流れは以下になります。   1.ページをロード・クッキーの有無を判断・クッキーがあれば、クッキーに保存されているナンバーを読み込む・読み込んだナンバーを元に、アコーディオンの開閉状態を設定する   2.アコーディオンを開ける・クッキーにナンバーを保存(数字の『文字列』としてクッキーに保存)例)「2」「0」「4」の順に開いた場合、cookie += '2';$.cookie('accordion', cookie); cookie += '0';$.cookie('accordion', cookie);cookie += '4';$.cookie('accordion', cookie);  // $.cookie('accordion')は '204' になります。   3.アコーディオンを閉じる → クッキーからナンバーを削除例)「0」「2」の順に閉じた場合、cookie = cookie.replace('0', '');$.cookie('accordion', cookie); cookie = cookie.replace('2', '');$.cookie('accordion', cookie); // $.cookie('accordion')は '4' になります。   ――――――――――――――――――――――――――――――――――― 以上で、開閉状態を記憶するアコーディオンの完成です!   クッキーの保持状態の確認用として、ページロード時と開閉時にアラートを出すサンプルも用意してみましたので、よければご覧になってください。   アラート付きサンプル   ※最後にご注意※このサンプルでは、アコーディオンタイトルが10個以内(「0」~「9」)のものを想定しています。「10」以上になると、クッキーからナンバーを削除する際、「0」と「1」~「9」の区別がつかなくなるためです。   10個以上を実装する場合、クッキーに保存する文字列が以下になるよう処理を変更します。変更前 : '0121011'変更後 : '[0][1][2][10][11]'   これでクッキーから削除する際も、以下のようにすれば問題なく動作するようになります。cookie = cookie.replace('[0]', ''); (参考サイトでは後者になっています)   ―――――――――――――――――――――――――――――――――――cookieがjsで簡単に扱えることが伝われば幸いです。アコーディオン以外にも広く応用できるだろうと思います。 機会があれば、是非使ってみてください!うっちーでした。
  • テクログ

    【PHP】サーバー変数の取得

    どうも、こちらでは初めまして? 技術ブログお初のエリー@ほしこです。 社内にスンバラシイ情報をお持ちの方々が居る中 持ってる情報もしょっぱいものしかない自分が記事を書くのは少し憚れる所がありますが。。。 中身スッカラカンな脳みそをフル回転して書いていこうと思うんで流してやってください。 さて、今回のテーマはPHPで取得するサーバー情報について。です。 PHPでサーバー情報(例えばホスト名etc…)を取得する際に フレームワークの使用なしの場合、ホスト名を取得する方法としては、 以下のように取得するのが一般的だと思います。 $_SERVER['SERVER_NAME']— 変数がセットされていること、そして NULL でないことを検査する Webサーバー経由の場合、上記の方法で取得する事が多々あると思いますが 作成する機能等によってはそうもいかない時もあります。 (例えばサーバー上で実行するバッチ等。) そうした場合の時に、非常に便利なのはphp_uname()というもの。 php_uname — PHP が稼動しているオペレーティングシステムに関する情報を返す ()内の引数はいくつかありますが、先述のホスト名を取得したい場合は以下のように取得できます。 php_uname('u') php_unameについて以前調査していた時も、知られているようで実はそうでもなさそうに(勝手に)感じたので ツラツラ書いてみました~。 また次回までのネタがあると良いのですが…^^; そんな感じでまた~☆
  • テクログ

    トラブルこそ○○○○○

    大根畑にゴボウが1本。Y原(Webコンサル課)です。   IT技術集団コアテックにおいて取り分けITスキルの低い私、Y原ですが、なんの因果か「技術ブログ」などという高尚な企画の記事を書かせて頂く事となりました。   さてと…何を?どう書くんだ??悩んだ結果、まずはGoogle先生に聞いてみる事にしました。「技術ブログ パソコン IT 技術 記事…」しかし記事を検索して見たところで私に理解できる訳もなく、稀に分る内容があったとしても利用規約には「許可なく転載禁止…」と余計な布石が。。許可を得るにも問い合わせる電話番号も無い…   そんな中ある記事を眼にし、昔の事を思い出したので記事にさせて頂きます。   昔昔…私がCTI(Computer Telephony Integration)と言われる商材を二次代理店として扱っていた時の事です。性質上24時間365日動くはずのシステムなんですがコイツが厄介な事に良く故障するんです。15年以上も前の話ですし、当時のPCなので故障して当たり前なんですがね笑ただシステムが停まるとお客様からそれはそれは凄い剣幕で携帯に電話が来るんです。   そんな中で覚えた激怒する相手の対応術(自己流)をご紹介します。   1.すぐ対応する。  当たり前です。  電車が5分遅れると大騒ぎをする我々日本人にとって、システム復旧を待つほど腹ただしい時間は有りません。  会議中だろうが来客中だろうが飯だろうが寝ていようが直ぐ対応する。  そこに就業時間内も時間外も関係ありません。  トラブル対応優先ですね。  ただしひとつ気にしたい点は「謝り過ぎない事」です。  謝り過ぎるとお客様は保障を要求したり、値引きの材料にしてきたりします。  なにより謝り過ぎる事で「お客さんを不安にさせる」事あります。  謝り過ぎるとお客様は「この手のトラブルは滅多に無いの?なんで俺だこんな羽目に?」ってなります。  どんなトラブルでも、たまにある事のように対応するのが一番かと思います。   2.メーカーのせいする  故障電話と分るやいなや「えー!またですか?!ったく(メーカー名)は、どうしようも無いですねぇ…」  「すぐ対応させますのでちょっと待ってくださ~い」  とむしろお客様側の立場にすり替わる方法です。  ただしメーカー側とも密接な関係を保たないと成り立ちません。  またこれもすぐ対応する事には変りません。  しかしこの手法は自身がメーカーであるコアテックでは使えません。   3.ひたすら謝り続ける。  これは、お客様との関係が相当コジレた時に使います。  「使います」というか謝らざるを得ない状況です。  コチラとしては1分1秒でも早く対応したいところですが、  電話口で「どうすんだよ?!」「いつ直せるか言えよ?!」って10分、20分…  そんな時もひたすら謝ったものです。マインスイーパーをやりながら。。   上記(1.)(2.)は、健全な対応といえますが、問題は(3.)です。相手の性格にもよりますが、普段から豆に電話をしたり、逢って会話をする、飲みに行く等など…日頃のコミュニケーションによって事によって避けられる(3.)も有るようです。また(3.)でも、対応次第では、後に良い具合に繋がる場合も多々ありました。   どんな仕事をしても、トラブルは付き物です。表題の「トラブルこそ○○○○…」の後に続く言葉はいろいろあるようです。トラブルの対応次第で、その人の真価が問われたり、自身が成長したり…エンジニアも営業も同じかと思いますし、トラブルの情報共有は組織にとっても欠かせないと思います。   なんか無駄に字数を稼いだだけな感もありますが、技術ブログはもうこれで最後にして下さいm(__)mスイマセンゴメンナサイ…モウシワケゴザイマセンゴメンナサイ…
  • テクログ

    PHP開発者なら知っておきたい基礎知識

    多くのウェブサイトはすべてPHPを使っています。しかしそれが欠点がないのではありません。それでは、私達はどのようにその欠点を改善することができて、コードの最大の性能を発揮できるか?本文はPHPコードの合理化する技巧に関していくつかを紹介しますので、ご参考出来ればと思います。1.echo は print に比べて処理が早い2.できるだけ、__get,__set,__autoloadを使用しないほうがいい3.str_replace関数やpreg_replace関数ではなく、strtr関数を使用する4.includeやrequireはフルパスがいい5.time()ではなく$_SEVER['REQUEST_TIME']を使う6.$row['id']ではなく$row[id]の方が効率である7.forではなくforeachを使う8.if (strlen($foo) < 8)ではなくif (!isset($foo{8}))のように書く9.if 文と switch 文について選択する処理が複数になる場合 switch 文を使う方が効率できである。if 文では、最初から順に判定していくのに対して、switch 文では、いきなり case に飛ぶという違いがある。例えば、判定が多くて、else if をずらずらと書くと、最後の方のelse if を実行するために最初から全部判定していかなければならない。つまり、無駄にCPUを使用することにもなりかねない。ただし、switch(式) の式の値は、整数のみという条件がある。10.ダブルクォーテーションとシングルクォーテーションの違いダブルクォーテーションは括った文字列内に変数があると、変数の内容を反映する。エスケープ文字「¥n」も改行コードとして認識される。シングルクォーテーションは括った文字列内に変数またはエスケープ文字「¥n」があっても、変数名自体を文字列として反映する。そして、シングルクオーテーションのほうが処理速度が早い。11.char 型と varchar 型の違いchar 型のカラムはデータ挿入時に指定サイズ分が記憶領域に確保されるが、varchar 型のカラムでは必要な分のみ確保される。varchar 型のカラムのデータを格納されているデータより大きなサイズのデータに更新しようとしたときに、再度記憶領域のサイズを確保する処理が行われる事がある。12.mysql_pconnect と mysql_connect の比較mysql_pconnectだと、1,2回(リクエスト数が増えると、少し増える。)しかMySQLにコネクトせず、その接続を別リクエストも使える。明示的にクローズできない。mysql_connectは、引数が同じだと、1回目しかMySQLにコネクトしない。最後に自動で接続をクローズする。13.require文とinclude文の違いrequire文は、ループ処理の中に置いて、毎回異なるファイルを読み込むことはできないが、include文は可能。またエラーについて、require()は「Fatal Error」となり処理を停止するが、 include()は「Warning」を出力しながら、読み込むべきファイルが存在しない場合も処理を続行する。14.require_once文についてrequire_once文は、require()関数と同様に、スクリプト内で別ファイルを読み込むことができる。require()関数と異なる点は、require()関数は外部ファイルを取り込む回数に制限がないのに対して、 require_once()関数は外部ファイルを1回だけ取り込む。 15.include_once文についてinclude_once文は、include()関数と同様に、スクリプト内で別ファイルを読み込むことができる。include_once()関数も、require()関数とrequire_once()関数との違いと同様に、 include_once()関数は外部ファイルを1回だけ取り込む。 次回も引き続きPHPについて書こうと思います。