MW211 EXIT

devlog
PHP/複数のsubmitボタン
2011年09月19日
同一画面(フォーム)内に複数のsubmitボタンがある場合、
それらのどれが押されたか区別する必要があるが、その方法。

(1) ボタンに表示される文字で識別する方法
┌──────────────────────────────────────┐
│【HTML側の設定】                                                            │
│<input type="submit" name="run" value="実行1"/>                            │
│<input type="submit" name="run" value="実行2"/>                            │
├──────────────────────────────────────┤
│【PHP側の処理】                                                             │
│if (isset($_POST['run'])) {                                                 │
│  switch ($_POST['run']) {                                                  │
│    case '実行1':                                                          │
│      処理1                                                                │
│      break;                                                                │
│    case '実行2':                                                          │
│      処理2                                                                │
│      break;                                                                │
│  }                                                                         │
│}                                                                           │
└──────────────────────────────────────┘

(2) ボタンのname属性で識別する方法
┌──────────────────────────────────────┐
│【HTML側の設定】                                                            │
│<input type="submit" name="run1" value="実行"/>                             │
│<input type="submit" name="run2" value="実行"/>                             │
├──────────────────────────────────────┤
│【PHP側の処理】                                                             │
│switch (TRUE) {                                                             │
│  case (isset($_POST['run1']))                                              │
│    処理1                                                                  │
│    break;                                                                  │
│  case (isset($_POST['run2']))                                              │
│    処理2                                                                  │
│    break;                                                                  │
│}                                                                           │
└──────────────────────────────────────┘
分類:PHP
PHP/submitボタンのname属性
2011年09月18日
うっかり、フォームの送信ボタンを
┌──────────────────────────────────────┐
│<input type="submit" name="submit" value="送信"/>                           │
└──────────────────────────────────────┘
とかってやって、name属性を「submit」に揃えたりすると、
JavaScriptのsubmitコマンドが動かなくなる(以下のようなやつ)。
┌──────────────────────────────────────┐
│this.form.submit();                                                         │
└──────────────────────────────────────┘
競合してしまうようだ(submitメソッドが上書される)。

JavaScriptでsubmitしなければ、問題ないので気にならないことが多いが
はじめから「submit」以外のname属性にするように心がけておいた方がよいだろう。
分類:PHP、注意
PHP/CSVファイルダウンロード
2011年09月17日
基本的に以下のような感じ。
┌──────────────────────────────────────┐
│header('Content-Disposition: attachment; filename="ファイル名.csv"');       │
│header('Content-Type: text/csv;');                                          │
│print "データ1A,データ1B\n";                                                │
│print "データ2A,データ2B\n";                                                │
│exit();                                                                     │
└──────────────────────────────────────┘
「implode(',', $配列)」なんかも有効活用できるね。
分類:PHP
PHP/プルダウンメニューによる実行
2011年09月16日
プルダウンメニューを選択し、実行ボタンで確定する処理の場合、
以下のような実装になる。
┌──────────────────────────────────────┐
│<form>                                                                      │
│<select name="■■">                                                        │
│</select>                                                                   │
│<input type="submit" name="run" value="確定"/>                              │
│</form>                                                                     │
└──────────────────────────────────────┘
しかし、ボタンを省略して、プルダウンのみで確定させてい場合は、
<select>タグに以下のような「onchange属性」をつけて
JavaScriptで「submit()」させればいい。
┌──────────────────────────────────────┐
│<select name="■■" onchange="submit(this.form)">                           │
└──────────────────────────────────────┘
ただしこの場合、POSTパラメータ(もしくはGETパラメータ)に
$_POST['run'](='確定')が渡らない
→ボタンが複数あったりして、こいつで識別したい場合には厄介だ。

これを実現するには、ひと手間(ふた手間?)加える必要が出てくる。
(1) submitを直接実行するのではなく、一旦ユーザ関数を経由するようにする
┌──────────────────────────────────────┐
│<select name="■■" onchange="submit2(this.form)">                          │
└──────────────────────────────────────┘
(2) (JavaScriptの)ユーザ関数で、hidden属性を生成した上でsubmitする
┌──────────────────────────────────────┐
│<script type="text/javascript">                                             │
│  function submit2(inForm){                                                 │
│    // hidden属性の生成                                                     │
│    var e = document.createElement('input');                                │
│    e.type  = "hidden";                                                     │
│    e.name  = "run";                                                        │
│    e.value = "確定";                                                       │
│    inForm.appendChild(e);                                                  │
│    // submit                                                               │
│    inForm.submit();                                                        │
│  }                                                                         │
│</script>                                                                   │
└──────────────────────────────────────┘
本格的にJavaScript記述が必要なので、ちょっとめんどくさいかも。
分類:PHP
PostgreSQL/boolean型
2011年09月15日
PostreSQLにおいてboolean型の項目の値は、
普通にSQL文を実行したり、pg_query()を使ったりすると
「t」(true)か「f」(false)という一文字で取得される。
なので、取得された結果を使う場合、
「if(■ == 't')」とかって判定をしなきゃならない。

でも、PDO(->execute()したり、->fetch()したり)だと
「1」(true)か「」(false)という形で取得される。
つまりこれだと「if(■)」でOKだ。

追記:PHPで「echo TRUE;」ってすると「1」が表示される。
上記の「1」は「=== TRUE」では真だが「=== 1」や「=== '1'」では偽だ。
まぎれもなく、「TRUE」のようだ。

ちなみに、SQL文中のSELECTのWHERE句、INSERTのVALUES句、UPDATEのSET句とかでは
「true」「false」をそのまま使える。
あくまで参照結果の話。

追記:以下でも入力可能みたい
・trueなら「TRUE」「't'」「'true'」「'y'」「'yes'」「'1'」
・falseなら「FALSE」「'f'」「'false'」「'n'」「'no'」「'0'」
分類:PHP、PostgreSQL
PostgreSQL/insertしたレコードのIDを取得
2011年09月14日
insertしたデータのシーケンシャルIDを取得する方法は以下の通り。
#selectと取得するとその間に割り込みの危険性があるからこの方法で
┌──────────────────────────────────────┐
│$pg_db = pg_connect('host=ホスト名 port=ポート名 dbname=DB名                │
│ user=ユーザ名 password=パスワード);                                        │
├──────────────────────────────────────┤
│$sql = "INSERT INTO 表 (列) VALUES ('値') RETURNING id";                    │
│$pg_result = pg_query($pg_db, $sql);                                        │
│$row = pg_fetch_array($pg_result);                                          │
└──────────────────────────────────────┘
ここで「$row['id']」を参照する。

INSERT文のSQL発行と同時にSELECT文のSQLを発行して取得したようなイメージ。
「RETURNING」句を使うのがミソ。
SELECT句と同じような指定になる。

一方、PDOの場合は以下のような感じになる。
┌──────────────────────────────────────┐
│$dbh = new PDO(DSN名, ユーザ名, パスワード);                                │
├──────────────────────────────────────┤
│$sql = "INSERT INTO 表 (列) VALUES ('値')";                                 │
│$sth = $dbh->prepare($sql);                                                 │
│$sth->execute();                                                            │
└──────────────────────────────────────┘
ここで「$dbh->lastInsertId('シーケンスオブジェクト名')」を参照する。

シーケンスオブジェクト名とは、「表名_id_seq」みたいなやつ。
AutoNumber的な項目をCREATE文実行すると自動で作成されるみたい。
MySQLの場合はこれが不要(「()」でいい)らしい。
分類:PostgreSQL
秀丸エディタ/正規表現における最長一致の原則
2011年09月13日
例えば、「『」と「』」で囲われた文字列を検索(置換)する場合の正規表現は
以下の通り。
┌───┐
│『.*』│
└───┘
「.*」は最強のワイルドカードだ。

でも、これだと「『あ』『い』『う』」を「『ん』」に置換したい場合、
「『ん』『ん』『ん』」としたくとも「『ん』」だけになってしまう。
秀丸エディタの正規表現は、最長一致の原則に則っているからだ。
(「あ』『い』『う」が「.*」とみなされてしまうのだ)

「『ん』『ん』『ん』」としたい場合には、以下を使う。
┌─────┐
│『[^』]+』│
└─────┘
「[^■]」は「否定」なわけだが(「+」は繰り返し)、
見方を変えれば「否定」(の繰り返し)って準ワイルドカードでもあるのだ。
分類:秀丸エディタ
MicrosoftExcelの小ネタ(3)
2011年09月12日
「ScrollLock」キーをONにすると、
「↑、↓」で画面全体を一行上下させることができる。
この時、選択しているセルの位置は上下に移動しない。
(隣のセルを選択せずに選択中のセルをそのまま選択し続ける)

「PageUp、PageDown」だとひと固まり(一頁)分画面が上下するが、
「ScrollLock」+「↑、↓」の場合は、一行ずつ上下する。

ちなみに、「Ctrl」+「ScrollLock」+「↑、↓」で
「PageUp、PageDown」と同等の動きになる。

「ScrollLock」キーは基本的に「OFF」にしておいた方がいいみたい。
分類:Excel
Excel/提出資料のカーソル位置合わせ
2011年09月11日
複数のシートをもつExeclブックについて、
全シートを左上のセルにカーソル位置をあわせる方法。

(1) 「ctrl」を押しながら「PageDown」を連打して最後のシートに移動する。
    →マウスで最後のシートを選択してもいい
(2) 「ctrl」を押しながら「Home」と「PageUp」を交互に連打して
    先頭シートまで進む(最後は「Home」)。

つまり、こんな感じ(慣れれば自然に操作できてしまう)。
  「ctrl」+「PageDown」
    :(繰り返し)
  「ctrl」+「PageDown」
  「ctrl」+「Home」
  「ctrl」+「PageUp」
    :(繰り返し)
    :(繰り返し)
  「ctrl」+「Home」
  「ctrl」+「PageUp」
  「ctrl」+「Home」

ビジネス文書で各シートのカーソル位置が統一されていると、好感度アップ間違いなし。
「Home」キーとかがないノートパソコンキーボードだと、
いろいろなキーを駆使しなければならなくややこしいのでマクロの方が楽かも。
分類:Excel
Safari向けのJavaScriptコーディング
2011年09月10日
JavaScriptの記述領域を目立たせるために、コメントで囲ってみた。

例えば、以下のように。
┌──────────────────────────────────────┐
│<script type="text/javascript"><!-- /*──────────────────*/│
│※JavaScriptのソースをここに記述                                            │
│※JavaScriptのソースをここに記述                                            │
│※JavaScriptのソースをここに記述                                            │
│/*──────────────────────────────*/--></script>│
└──────────────────────────────────────┘

Safariだけダメだったorz。

┌──────────────────────────────────────┐
│/*──────────────────────────────*/--></script>│
└──────────────────────────────────────┘
を
┌──────────────────────────────────────┐
│--></script><!--──────────────────────────── -->│
└──────────────────────────────────────┘
にすれば、SafariもOKだった。

コメント記述についてシビアみたいだ。
分類:ブラウザ
前へ 1 2 3 次へ