MW211 EXIT

devlog
HTML/変更できないチェックボックス
2011年10月07日
チェックボックスを表示するものの内容を変更させたくない場合がある。
たとえば、情報を呼び出して承認する画面とかでだ。

こんな場合は、readonly属性を使うらしい。
┌──────────────────────────────────────┐
│<input type="checkbox" checked="checked" readonly="readonly"                  
                                                    name="name" value="true"/>│
└──────────────────────────────────────┘

しかし、これだと画面操作としてチェックをつけたり、はずしたりすることは可能だ。
だが、ユーザインタフェースの観点から、チェックを変更できない方がいいと思う。
そこで、disabled属性をつける。
ただし、これだと値も無効になってしまうようなので、hidden属性も併用する。
┌──────────────────────────────────────┐
│<input type="checkbox" checked="checked" disabled="disabled"/>              │
│<input type="hidden" name="name" value="true"/>                             │
└──────────────────────────────────────┘

ただこれだと、チェックボックスが薄く表示されてしまう。
確かに変更は頑として受け付けない態度が見えるが、
チェックボックス自体が無効っぽい印象を受ける。(意見には個人差があります)
それが嫌な場合以下のようにonclickを無効にする方法がある。
┌──────────────────────────────────────┐
│<input type="checkbox" checked="checked" onclick="return false;"/>          │
│<input type="hidden" name="name" value="true"/>                             │
└──────────────────────────────────────┘
分類:HTML
PHP/定数二重定義回避
2011年10月06日
定数を既に定義しているのに二重に定義してしまうと以下の警告が発生する。
┌──────────────────────────────────────┐
│Notice: Constant 定数 already defined in …」                               │
└──────────────────────────────────────┘

これを回避する方法は以下の通り。
┌──────────────────────────────────────┐
│if (!defined('定数')) {                                                     │
│  define('定数', 値);                                                       │
│}                                                                           │
└──────────────────────────────────────┘
変数でいうところの「isset()」が定数では「defined()」になるというわけ。
分類:PHP
HTML/未回答のラジオボタン
2011年10月05日
┌───────────┐
│回答:●はい  ○いいえ│
└───────────┘
ラジオボタンといえばこんな感じだが、初期値を未回答としたい場合がある。
┌───────────┐
│回答:○はい  ○いいえ│
└───────────┘

これで選択されないままだと未回答としたいのだが、この場合submitされると
POST(GET)パラメータ上に、この項目自体($_POST['回答'])がなくなってしまう。

これを回避するには以下のようにダミーのラジオボタンを設置すればいい。
┌──────────────────────────────────────┐
│<input type="radio" name="回答" value="はい"/>                              │
│<input type="radio" name="回答" value="いいえ"/>                            │
│<input type="radio" name="回答" value="" checked="checked"                  │
│                                                    style="display:none;" />│
└──────────────────────────────────────┘
分類:HTML
HTML/formで送信されるもの
2011年10月04日
form内において、submit時に(キーと値が)送信される項目は以下の通り。
┌──────────────────────────────────────┐
│<input type="submit"   name="キー" value="値"/>                             │
├──────────────────────────────────────┤
│<input type="hidden"   name="キー" value="値"/>                             │
├──────────────────────────────────────┤
│<input type="text      name="キー" value="値"/>                             │
├──────────────────────────────────────┤
│<input type="password" name="キー" value="値"/>                             │
├──────────────────────────────────────┤
│<input type="checkbox" name="キー" value="値" checked="checked"/>         *1│
├──────────────────────────────────────┤
│<input type="radio     name="キー" value="値" checked="checked"/>         *1│
├──────────────────────────────────────┤
│<select name="キー">                                                      *1│
│  <option value="値" selected="selected"></option>                          │
│</select>                                                                   │
├──────────────────────────────────────┤
│<textarea name="キー">値</textarea>                                         │
├──────────────────────────────────────┤
│<input type="file" name="キー"/>                                          *2│
└──────────────────────────────────────┘
  *1:checkbox、radio、selectは選択されている項目のみ送信される。
  *2:値はアップロードされるファイルにあたり、
      「<form method="post" … enctype="multipart/form-data">」みたいに
      「enctype」の指定が必須です

以下はinputタグとはいえ、(キーと値が)送信されない。
┌──────────────────────────────────────┐
│<input type="button"  name="キー" value="値"/>                              │
├──────────────────────────────────────┤
│<input type="image"   name="キー" value="値" src="画像ファイル"/>           │
├──────────────────────────────────────┤
│<input type="reset"   name="キー"/>                                         │
└──────────────────────────────────────┘

ちなみに、以下のようにsubmitボタン的にしてみても、(キーと値は)送信されない。
┌──────────────────────────────────────┐
│<input type="button" name="キー" value="値" onclick="this.form.submit()"/>  │
└──────────────────────────────────────┘
checkboxとかが選択したもののみ送信されるのだから、
buttonも押されたもののみが送信されるのかと思ったのだが違うみたい。
(もしかして方法が違うのかも)
分類:JavaScript
PHP/ZIPファイルに圧縮してダウンロード
2011年10月03日
「PEAR」の「Archive_Zip」が実装されていることが前提条件。
┌──────────────────────────────────────┐
│C:\xampp\php>pear list                                                      │
│INSTALLED PACKAGES, CHANNEL PEAR.PHP.NET:                                   │
│=========================================                                   │
│Archive_Zip                0.1.1       beta                                 │
└──────────────────────────────────────┘
「Archive_Zip」クラスの「create()」メソッドを使えば、
ZIPファイルが圧縮生成される。
┌──────────────────────────────────────┐
│// ZIPファイル生成                                                          │
│require_once('Archive/Zip.php');                                            │
│$zip_file = 'xxxx/xxxx.zip';                                                │
│$newArchiveZip = new Archive_Zip($zip_file);                                │
│$newArchiveZip->create('oooo/ooo1.txt','oooo/ooo2.txt',…);                 │
│// ダウンロード                                                             │
│header('Content-Disposition: attachment; filename="ダウンロードファイル名"'); 
│header('Content-Type: application/octet-stream');                           │
│header('Content-Length: '.filesize($zip_file));                             │
│readfile($zip_file);                                                        │
└──────────────────────────────────────┘
生成されるZIPファイルは「xxxx/xxxx.zip」、
圧縮されるファイルたちは「oooo/ooo1.txt」など(複数指定できる)
なお、「Content-Length:」はダウンロード時の進捗表示のために
全体サイズを指定している。
分類:PHP、PEAR
PHP/一意な一時ファイル名
2011年10月02日
一時的なワークファイルとかに名称をつけたい場合、
以下のような方法があります。
┌───────┬──────────────────────────────┐
│date('YmdHis')│秒単位(「u」をつければマイクロ秒もありだが…)               │
├───────┼──────────────────────────────┤
│time()        │UNIX秒単位                                                  │
└───────┴──────────────────────────────┘

っておい、以下のような便利な関数があるじゃないか。
┌──────────────────────────────────────┐
│tempnam(パス,接頭辞)                                                        │
└──────────────────────────────────────┘
ちなみに接頭辞はWindowsの場合、3文字(3バイト)までらしい。
分類:PHP
前へ 1 2 3 次へ