PHP で select タグの multiple オプションを POST で受ける方法とその応用

select タグのオプションに multiple を付けた場合、selectタグのnameオプションを「name=”select[]”」のように書く。

<form method="post" action="******.php">
  <select name="select[]" multiple>
    <option value="opt_1">option1</option>
    <option value="opt_2">option2</option>
    <option value="opt_3">option3</option>
    <option value="opt_4">option4</option>
    <option value="opt_5">option5</option>
    <option value="opt_6">option6</option>
  </select>
</form>

そして受け側で

print_r($_POST);

としてみると以下のような配列で受け取れる。

Array
(
  [select] => Array
    (
      [1] => option1
      [2] => option2
      [3] => option3
    )
)

さらにこれはselectタグに限らず、ほかのinputタグなどでも応用できる。

<form method="post" action="******.php">
  <input type="text" name="hoge" value="ほげほげ" />

  <input type="text" name="hoge1[u]" value="うがうが" />
  <input type="text" name="hoge1[d]" value="どんどん" />
  <input type="text" name="hoge1[p]" value="ぴよぴよ" />

  <input type="text" name="hoge2[]" value="もげもげ" />
  <input type="text" name="hoge2[]" value="うらうら" />
  <input type="text" name="hoge2[]" value="むだむだ" />
</form>

とすると、、、

Array
(
  [hoge] => ほげほげ
  [hoge1] => Array
    (
      [u] => うがうが
      [d] => どんどん
      [p] => ぴよぴよ
    )

  [hoge2] => Array
    (
      [0] => もげもげ
      [1] => うらうら
      [2] => むだむだ
    )
)

となる。

う~ん。PHPさん、、、、、ちょっと無理矢理感が・・・・・

あれ?あれ?これは、はいぱ~・てきすと・とらんすふぁ・ぷろとこる の仕様ってこと???




投稿日:
カテゴリー: PHP技術系

jQuery.getJSON( url, data, callback )の第2引数([data])について

jQueryのJSONを取得するgetJSONメソッドの第二引数である[data]についてなんだけど、

data
------------------------------
	Map
	キーと値の組み合わせ

とか

[data] : サーバに送信するパラメータ。キーと値のペア(ハッシュ)。(オプション)

とか書かれてもサル並みの脳みそしかない俺にはわからんのですよ。

これなんだろうなぁ~とGoogle先生と格闘していたら、カスにもわかるように明確に書いているところを見つけたましたよ。

ズバリ↓です。

jQuery | お勉強の軌跡

http://extra.pxt.jp/studylog/ja/javascript/jquery/index.html


第二引数の data にオブジェクトを渡すと、URLの後ろにGETパラメータとして付加されます。上記の例の {a:12,b:14} を指定した場合、?a=12&b=14が付加されます。

つまり、PHPならJSON生成ファイル側で↓のようにうけとればよろし。

$hogehoge = $_get["a"];
$piyopiyo = $_get["b"];

ってか↓とかさ、もちっと丁寧に書けよ。わかんね~よ

jQuery.getJSON( url, data, callback ) – jQuery 日本語リファレンス

http://semooh.jp/jquery/api/ajax/jQuery.getJSON/+url,+data,+callback+/

日付や時間を正規表現で検索したい

いまさらながらに正規表現を勉強したのでまとめてみた。

なお、サンプル作製にあたり、以下のサイトを参考にした。

といっても、トライアンドエラーの試行錯誤が必要だったけど・・・・

正規表現サンプル集

http://hodade.adam.ne.jp/seiki/

PHP 基礎編9 – 正規表現、マッチ、置き換え、ereg、eregi、eregi_replace – SAK Streets

http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/php_k09.htm

カッコに囲まれた値の検索(すべての文字)

\(.+?\)

検索結果:
○ (1234)
○ (abcd)
○ ( 1234 )
○ ( 12 34 )
○ ( abcd )
○ ( ああああ )

カッコに囲まれた値の検索(半角数字)

\(\d+?\)

検索結果:
○ (1234)
× (abcd)
× ( 1234 )
× ( 12 34 )
× ( abcd )
× ( ああああ )

カッコに囲まれた値の検索(半角数字のみ+スペース含む)

\([\s\d]+?\)

検索結果:
○ (1234)
× (abcd)
○ ( 1234 )
○ ( 12 34 )
× ( abcd )
× ( ああああ )

日付の検索

\d{4}[-/._]\d{1,2}[-/._]\d{1,2}

検索結果:
○ 2011/01/01 
○ 2011/1/1 
× 2011 / 01 / 01 
× 2011 / 1 / 1 
○ 2011-01-01
○ 2011-1-1 
× 2011 - 01 - 01 
× 2011 - 1 - 1 
○ 2011.01.01 
○ 2011.1.1 
× 2011 . 01 . 01 
× 2011 . 1 . 1 
○ 2011_01_01 
○ 2011_1_1 
× 2011 _ 01 _ 01 
× 2011 _ 1 _ 1 
× 2011//01/01 
× 2011--01-01
× 2011..01.01 
× 11/01/01 

時間の検索(欠点あり)

[\s]([0-9]|[0-1][0-9]|[2][0-3])(:|-|\.)([0-9]|[0-5][0-9])(:|-|\.)([0-9]|[0-5][0-9])[\s]

※時間文字列の前に空白スペースが入ってしまう。

検索結果:
○ 2011/01/01 11:11:11
○ 2011-01-01 11-11-11
○ 2011.01.01 11.11.11
× 2011/01/01 11 11 11
○ 2011/01/01 21:11:11
× 2011/01/01 25:11:11
○ 2011/01/01 01:01:01
○ 2011/01/01 0:0:0
○ 2011/01/01 1:1:7
○ 2011/01/01 1:1:7 ←最終文字が半角空白
× 2011/01/01 1:1:70
○ 2011/01/01 23:59:59
○ 2011/01/01 00:00:00

時間の検索(欠点あり)

\d{1,2}?(:|-|\.)\d{1,2}(:|-|\.)\d{1,2}

※「△」の文字列は日付部分もマッチしてしまう。

検索結果:
○ 2011/01/01 11:11:11
△ 2011-01-01 11-11-11
△ 2011.01.01 11.11.11
× 2011/01/01 11 11 11
○ 2011/01/01 21:11:11
○ 2011/01/01 25:11:11
○ 2011/01/01 01:01:01
○ 2011/01/01 0:0:0
○ 2011/01/01 1:1:7
○ 2011/01/01 1:1:7 ←最終文字が半角空白
○ 2011/01/01 1:1:70
○ 2011/01/01 23:59:59
○ 2011/01/01 00:00:00

jQuery プラグインの jquery.validate.js を使って入力チェック機能を仕込んでみた。

このエントリでは、私が WordPress + Contact Form 7 + jquery.validate.js という環境を構築中にハマったところがあったので備忘録を兼ねて書いておく。

なお、私が参考にしたサイトを張っておく。基本的なところは先達者が詳しく書いてくれているので先に一読されることをお勧めする。

jquery.validate.js 公式:

http://bassistance.de/jquery-plugins/jquery-plugin-validation/

jQueryでフォームの入力チェックする、jquery.validate.js とエラーの日本語化:Goodpic:

http://www.goodpic.com/mt/archives2/2008/06/jqueryjqueryval.html

まず、重要なところから書くと

jquery.validate.js の バージョン1.8.0「jquery-validation-1.8.0」はIEでまともに動かない!!

ということで、

すぐに最新版のバージョン1.8.1「jquery-validation-1.8.1」にバージョンアップしよう。

また、Contact Form 7 ではformタグにid属性が付与されないが、class属性がデフォルトで付与されているので、class属性値を指定することで問題なく動作する。

なお、Contact Form 7 タグでjquery.validate.jsを使用する際には、[text* name 15/15 id:name class:required]というように記述するのが一般的だが、私は以下のようなjsファイルを別途作成、ロードさせた。

ActivePerl 付属の PPM で Perlモジュール をインストールす場合の注意事項

Windows に ActivePerl をインストールした場合、Perlモジュールを追加するには、通常はActivePerl付属の PPM (Perl Package Module) を使います(Windowsの場合、CAPNモジュールのインストールがかなり面メンドクサイ為)。

ただし、このPPMですが、GUIからパッケージを検索すると重要なモジュールのほとんどがでてきません。ただし、コマンドプロンプトで直接打ち込むことで、ほとんどのモジュール( DBD::mysql や Image::Magick など)がインストール可能です。

コマンドプロンプトで以下のように打ち込みます。

ppm install DBD-mysql

※たとえば「DBD::mysql」の場合は「DBD-mysql」と打ち込みます。「Image::Magick」の場合は「Image-Magick」となります。




Redmine を Windows 環境に インストール する手順

先日、Windows環境にRedmineをインストールした。

多少ハマったところもあったので、備忘録を兼ねて、作業手順をアゲておきたいと思う。

なお、MySQL を使う場合には事前にMySQLをインストールしておくこと。

  • インストール先:WindowsXP SP3
  • Redmineバージョン:1.1.0
  • Rubyバージョン:1.8.7
  • Railsバージョン:(たぶん2011/1/24時点の最新版)
  1. Redmineをインストールするサーバをインターネットに繋いでおく。
    • ※gemインストールを行うので必須。
  2. Ruby(One-Click Ruby Installer for Windows) をダウンロードする。
    • ※ダウンロードサイト:http://rubyinstaller.org/
    • ※※最新版(2011/1/24現在 Ver1.9.2)のRubyでは動かないとのことなので、rubyinstaller-1.8.7-p330.exe を使用。
  3. redmine-1.1.0をダウンロードする。
  4. 任意の場所にredmine-1.1.0を展開して配置する。
    • ※ここでは「C:\redmine」にインストールしたと仮定して書き進める。
  5. Ruby(One-Click Ruby Installer for Windows) のインストールする。
  6. コマンドプロンプトで「gem install rails –include-dependencies」と打つ。
    • ※2~3分かかる。
  7. コマンドプロンプトで「gem install -v=0.4.2 i18n」と打つ。
  8. コマンドプロンプトで「gem uninstall rack」と打つ。
    • ※rackのバージョンが高すぎるので再インストールしてバージョンを落とす。
    • ※いろいろと聞いてくるが[Y]でOK。
  9. コマンドプロンプトで「gem install –version ‘= 1.0.1’ rack」と打つ。
    • Version 1.0.1 をインストールする。
  10. MySQLを使う場合はデータベースを作成する。
  11. SQLiteを使う場合にはコマンドプロンプトで「gem install sqlite3-ruby」と打つ。
  12. 「C:\redmine\config\database.yml.example」をリネームしてdatabase.ymlを作成する。
  13. database.ymlの中身を書き換える。
    • ※おそらくみればわかる。
    • ※SQLiteの場合は前述のサイトを参考のこと。
  14. 「C:\redmine\config\additional_environment.rb.example」をリネームしてadditional_environment.rbを作成する。
  15. additional_environment.rbに以下の文字列を追加する。
    • config.action_controller.session = { :key => “_myapp_session”, :secret => “[ここに30文字以上のランダムな文字列を追加する]” }
  16. コマンドプロンプトを開き、Redmineを展開したフォルダにディレクトリ移動する。
  17. コマンドプロンプトで「rake db:migrate RAILS_ENV=production」と打つ。
    • ※モリモリっと表示されるが速すぎて読めないので気にしない。
  18. コマンドプロンプトで「rake load_default_data RAILS_ENV=production」と打つ。
  19. コマンドプロンプトで「ruby script/server -e production」と打って、Redmine を起動させる。
  20. 別PCのブラウザに「http://サーバ名:3000」と打つとRedmineのトップページが表示される。

 
 

以上

MySQL-5.5.8-win32 のインストール時に「Error Nr. 1364」というエラーが出る。

 


↑のApply security settings の部分で以下のようなエラーが出る。

The security settings could not be applied to the database because the connection has failed with the following error.



Error Nr. 1364

Field ‘authentication_string’ doesn’t have a default value



If a personal firewall is running on your machine, please make sure you have opened the TCP port 3306 for connections. Otherwise no client application can connect to the server. After you have opened the port please press [Retry] to apply the security settings.



If you are re-installing after you just uninstalled the MySQL server please note that the data directory was not removed automatically. Therefore the old password from your last installation is still needed to connect to the server. In this case please select skip now and re-run the Configuration Wizard from the start menu.

文面通り、ファイヤウォールに正しく穴を開けても、ファイヤウォールを停止しても、だめ。

んでよくよくエラー文を調べてみると・・・

「authentication_string」なる場所にNULLデータを書き込もうとしてエラーが出ているんじゃねぇか?と気付くわけだ。

そこで、↓のサイトを参考に、「my.ini」を修正する。

「レコード挿入時の #1364 – Field doesn’t have a default value」

http://pentan.info/sql/mysql/strict_mode.html

sql-mode=”STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”

この部分の「STRICT_TRANS_TABLES」を消す。つまり・・・

sql-mode=”NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION”

とする。また、設定ファイルを変更したあとには必ずMySQLを再起動すること。

ただし気をつけないといけないことがある。



この「MySQL Instance Configuration Wizard」だが、どうやら「my.ini」を書き換える処理をしているらしい。

そこで、この↓のエラーダイアログを出したまま、「my.ini」を書き換えて、同じくエラーダイアログを出したまま、MySQLサービスを再起動してみる。



そうしたら問題解決。

だが、そもそもこのエラーがなぜでているのか?

‘authentication_string’ なるものに何を書き込む必要があるのか?

はっきりわかっていないので、継続調査が必要である。






追記 By 2011/3/20

arc殿曰く

http://awoni.net/personal-site/mysql

によると



注意:現在最新のバージョンである 5.5.8 では「Enable root access from remote machines」にチェックをするとインストールの最後で Error Nr. 1364 「Field ‘authentication-string’ doesn’t have a default value」というエラーが発生するので、チェックをしないようにしてください。



とのことです

5.5.9でも同様でした。

との事。
arc殿、感謝です。

RoboForm Everywhere って?

以前からロボフォーム(http://www.roboform.com/jp/)を愛用していて、サブノートを使い出したので追加ライセンスを買おうと思ったわけですよ。

そしたら追加ライセンスが¥2400なり。一方、新規購入を見たところ¥1250とな。

意味分らん。

追加購入より新規購入のほうが安いならだれも追加ライセンスなんぞ買わんぞな。

ロボフォーム・エブリウェアライセンス」とか書いてあるけど、とくにこれに関する説明も書いていないし、たぶん使えるだろうと気にせず買うたわけですよ。

そしたらなんと活性化できない!!

よく見たら「おまえのPCに入っているのはロボフォーム・デスクトップだからロボフォーム・エブリウェア入れろカス!!」といわれたぞな。

なんだと、コノヤロウ!!

さらに送られてきたメール良く見たら「ロボフォームエブリウェアライセンス(有効期限 2011-12-25)」と書いてあるではないか!!

なに~~~!!

1年間限定・・・だと・・・?

くそう・・・・間違えた・・・・失敗した・・・・

ってかさ・・・・この RoboForm Everywhere なるものの説明は日本語ページにはな~~んにも書いてない。

そもそも日本語のダウンロードページにロボフォームエブリウェアなんてものは無いのだ。

この不親切さ、もともと日本の企業が作っているソフトウェアではないし、本体のローカライズはそれなりに使えるレベルになっているので文句はないのだが、これはちょっと無いだろうと思うわけです。

どう見たってこれ間違えるよ。

せめてライセンス購入ページのところに「エブリウェアライセンスではデスクトップ版は活性化できません」と書いておいて欲しかった。

しかし、¥1250を捨てるのは惜しかったので、RoboForm Everywhere なるものをダウンロード(http://www.roboform.com/download)してインストールした結果、機能的にはデスクトップ版と変わらないことが判明。

さらにこちらも日本語ローカライズされているから、まぁ¥1250は無駄にはならなかった。

でも期間無制限版が¥2400、1年間期限付き版が¥1250、微妙だなぁおぃ。

ちなみに俺はクレジットで払うつもりでいたのでUSDを選択。¥1250→$9.95になりました。いま円高だからかなりお得だね。

あとね、バージョン6からバージョン7にバージョンアップするのが有料になったみたいです。

氏ねカス!!

YouTube“限定公開”の落とし穴

YouTubeにおいて知り合いにだけに動画を公開したい場合につかう“限定公開”モード。

これに落とし穴があります。

それは、以下の通り

  1. 発信者が限定公開中のURLを関係者のみに知らせる(つまり関係ない人間には見せない=限定公開)。
  2. 関係者がそのURL(もしくはブログ貼り付け用コード)をYouTube以外の動画まとめサイトやブログに貼り付ける。
  3. Googleのクローラが動画まとめサイトやブログをインデックス化して(限定公開にしているにもかかわらず)検索に動画が引っ掛る。
  4. YouTubeで「外部貼り付け禁止」をしていても、外部サイト側から動画を見ると、以下の通り閲覧は禁止できるが、YouTubeへ誘導されでしまうので限定公開にしている意味が無い。
  5. YouTube限定公開

    つまり(2)が防止できない限り、“限定公開”でなくなってしまうのでURLを送付する際には注意が必要です。

    回避策としては“非公開”にすることですが、閲覧ユーザがYouTubeのアカウントを取得する必要があるのと、動画管理者がYouTubeでユーザの閲覧許可をしなければならないため、非常に運用性に欠けます。

    (4)の画面でYouTubeへの画面遷移がなければ、まだマシなのですが、このいらん親切が“限定公開”モードを台無しにしています。(2)で関係者にたいして「限定公開の為、取り扱いには注意」とする運用面でケアしかないのでしょうか???

IE8 で PDF を開くと「このタブは回復されました」となってタブが閉じてしまう

IE8 上で Adobe Reader を使って PDF を開くと「このタブは回復されました。このWEBページには問題があるためInternet Explorerはタブを閉じ、再度開きました」

SQLITEが古くてIEが落ちる

となってタブが閉じてしまい、PDFが開けないという不具合が発生します。

この理由は、SQLite.DLL のバージョンが古いため発生しますので、最新版の SQLite.DLL に差し替えてください。

SQLite.DLL の場所は以下の通り。

C:\WINDOWS\system32\sqlite.dll

最新版の SQLite.DLL は以下のページからダウンロードすることができます。

http://www.sqlite.org/download.html

ZIPファイルをダウンロードして SQLite.DLL を system32 フォルダに上書きしてください。

<追記>

なお Adobe Reader はインストール先フォルダにも sqlite.dll を所持しており、system32 にも sqlite.dll がある場合は system32 を優先して使用する仕様になっているようです。つまり、system32 のsqlite.dll をは無くとも Adobe Reader はインストール先フォルダの自分の sqlite.dll を使用するため、system32 に sqlite.dll が無くとも動作します。従って、system32 の sqlite.dll を使用していないのであれば、消してしまったほうがよいのかもしれません。