2008年11月21日金曜日

javascriptによるformの値を取る方法

javascriptによるformの値を取る際、
radioボタンやcheckboxは一度for文で回す必要がある。
複数ある中から、ひとつを探すわけだから当たり前か・・わからんかった。

以下サンプルソース

<form action="#" name="fName">
 <input name="radioName" value="0" type="radio">
 <input name="radioName" value="1" type="radio">
 <input name="radioName" value="2" type="radio">
 <input name="radioName" value="3" type="radio">
</form>


if(document.fName.radioName.length) {
  for(var i=0; i <>
   if(document.fName.radioName[i].checked) {
      alert("document.fName.radioName[i].value");
   }
  }
}

2008年11月20日木曜日

PHP:$_SERVER サーバ環境変数

PHPでは、サーバに関する環境変数はグローバル変数$_SERVERに格納されます。
HTTP_REFERERやREMOTE_ADDR、PHP_SELFなどスクリプト構築において欠かせない変数群を簡単に取得できるので、それぞれ暗記しておいて損はないです。

$_SERVER['GATEWAY_INTERFACE'] CGIのバージョン
$_SERVER['SERVER_NAME'] サーバ名
$_SERVER['SERVER_SOFTWARE'] サーバID
$_SERVER['SERVER_PROTOCOL'] プロトコル名・リビジョン(HTTP/1.0)
$_SERVER['REQUEST_METHOD'] リクエストの種類(HEAD・POST・GET・PUT等)
$_SERVER['QUERY_STRING'] クエリーを格納
$_SERVER['DOCUMENT_ROOT'] サーバのルートディレクトリ
$_SERVER['HTTP_ACCEPT'] Acceptヘッダの内容
$_SERVER['HTTP_ACCEPT_CHARASET'] Accept-Charasetヘッダの内容(eucなど)
$_SERVER['HTTP_ACCEPT_ENCODING'] Accept-Charasetヘッダの内容(gzipなど)
$_SERVER['HTTP_ACCEPT_LANGUAGE'] Accept-Languageヘッダの内容(jpなど)
$_SERVER['HTTP_CONNECTION'] Connectionヘッダの内容(Keep-Aliveなど)
$_SERVER['HTTP_HOST'] Hostヘッダの内容
$_SERVER['HTTP_REFERER'] 現在のページへのリンク元のURLを格納。
※ブラウザによっては設定しない場合や'Hidden-Referrer'などと設定する場合があり、必ずしも取得できるとは限らない。
$_SERVER['HTTP_USER_AGENT'] User_Agentヘッダの内容
(compatible; MSIE 6.0; Windows NT 5.0など)
$_SERVER['REMOTE_ADDR'] クライアントのIPアドレス
$_SERVER['REMOTE_PORT'] クライアントマシンで使用されているポート番号
$_SERVER['SCRIPT_FILENAME'] 実行中のスクリプトの絶対パス
$_SERVER['SERVER_PORT'] サーバで使用されているポート番号
$_SERVER['SERVER_SIGNATURE'] サーバのバージョン・ヴァーチャルホスト名
$_SERVER['PATH_TRANSLATED'] 実行中のスクリプトの物理パス
$_SERVER['SCRIPT_NAME'] 実行中のスクリプトのパス
$_SERVER['REQUEST_URI'] 指定されたURI
$_SERVER['PHP_SELF'] 実行中のスクリプトのドキュメントルートに対する相対パス
※PHPスクリプトなどで、自身にフォームを送信したい場合などにactionにこの変数を設定することが多い。

コピペですいません。
元ネタありがとうございます。
STUDIO WING

2008年11月12日水曜日

phpによるメール

// カレントの言語を日本語に設定する
mb_language("ja");
// 内部文字エンコードを設定する
mb_internal_encoding("UTF-8");

// 件名
$subject = 'メールのタイトル';
// 本文
$mailbody = 'メールの内容';

// メール送信
mb_send_mail("info@hogehoge.com",$subject,$mailbody);

------------------------------------------------------------------------------------
------------------------------------------------------------------------------------
「info@hogehoge.com」の部分が宛先メールアドレス。
「$subject」の部分が件名。
「$mailbody」の部分が本文。

文字化けの問題が以外に多いということなので、
念のため記述。

元ネタコピペです。

2008年11月11日火曜日

.htaccessの小技編 - 特定のファイルだけ守る

アクセス制限をかけるときに使う「.htpasswd」ファイルや、掲示板やアクセス解析CGIなどが出力するログファイルなどは、通常ですと、ブラウザーで直接アクセスすると、見れてしまいます。しかし、「.htaccess」の設定により、特定のファイルをHTTPで見れないようにすることができます。

<Files ~ "\.log$">
deny from all
</Files>

上の例では、拡張子が「.log」のファイルを見れないようにします。これを応用して、たとえば、「.htaccess」と「.htpasswd」を見れないようにするには、

<Files ~ "^\.(htaccess|htpasswd)$">
deny from all
</Files>

と記述すればいいのです。この記述は、正規表現によるパターンマッチを使っています。難しい言葉ですが、具体例を見て、応用してください。なお以下の例では、上記の例での1行目だけを記載しております。1行だけでは、有効になりませんので、必ず、3行記述するようにして下さい。

■ 特定の拡張子のついたファイルをすべて見れなくする。
<Files ~ "\.dat$">
これは拡張子が「.dat」であるすべてのファイルが見れないようになります。たの拡張子のファイルを見れないようにするには、「.dat」の部分を書き換えてください。

■ 指定したファイルだけ見れなくする。
<Files ~ "^access\.log$">
これは、「access.log」というファイルだけが見れないようになります。他のファイル名にしたいときは、「access\.log」の部分を書き換えてください。ただ、「.」(ドット)の前には、必ず「\」を入れてください。

■ ワイルドカードを使う
<Files ~ "^foo\.*$">
これは、ファイル名のはじめが「foo」で始まって、すべての拡張子をもったファイルが見れなくなります。たとえば、「foo.dat」「foo.log」「foo.jpg」「foo.gif」は、すべて対象となります。ただ、「foo」のように拡張子を持たない場合には、適応されません。

■ 一文字ワイルドカードを使う
<Files ~ "^access?\.dat$">
これは、「access」の次にくる一文字がなんであろうと、適応されます。ただし、ファイル名の最後は「.dat」である必要があります。たとえば、「access1.dat」「access2.dat」「accessA.dat」はすべて適応されます。ただし、「?」の部分が2文字になると適応されません。たとえば、「access11.dat」がそうです。この場合には、 とする必要があります。

■ 複数の文字列を同時に指定する。
<Files ~ "\.(gif|jpg|png)$">
これは、拡張子が「.gif」「.jpg」「.png」であるファイルのみを見れなくします。その他の拡張子を加えたいばあいには、「|」(パイプ)で区切って加えてください。

上であげた例で、見慣れない文字が入っていますが、それぞれについて意味をみていきましょう。
~ パターンマッチであるという意味です。「=」でないことに注意してください。「~」より右側に記述したルールにマッチしたファイルを適応するということです。
^ファイル名の先頭であることを指示します。たとえば、と記述すると、ファイル名のどこかに「access」という文字列が入っていれば、OKとなります。しかし、 と記述すると、ファイル名の先頭が「access」であるファイルのみが適応されます。
$ファイル名の最後であることを指示します。たとえば、と記述すると、ファイル名の最後が「access」となっているファイルのみが適応されます。したがって、「access.log」のようなファイル名は適応されません。
*ワイルドカードです。
?一文字ワイルドカードです。
\ 「.」「\」「|」「$」のような記号文字は、指示子内では、特別な意味を持ってしまいます。したがって、このような文字を純粋に指定したい場合には、その文字の効果を無効にするために「\」を記述します。たとえば、と記述すると、「$」はファイル名の最後という指示を持った記号ですので、純粋に「access$」というファイル名に適応できません。この場合には、「$」の効果を無効にするために、「\」を前に入れて を記述します。
(foo|bar) 括弧内に、「|」で区切って記述すると、その中に記述された文字列のいづれかという意味となります。この場合には、「foo」もしくは「bar」という意味となります。


元ネタコピペです。

2008年11月7日金曜日

javascriptでフォームをチェック [fValidator]

かなり便利なjavascriptのフォームチェック。

fValidatorからfValidator.jsをダウンロードし、さらにmootools.jsをダウンロードします。
フォームを普通に書き、必須項目の場合はclassにfValidate['required']を付与するだけです。
またrequiredのほかにも以下のようなオプションがあるので、項目に合わせ適宜付与してください。

required必須項目
alphaアルファベット
alphanumアルファベットと数字
integer数字
date日付(mm/dd/yyyyの形)
phone電話番号
emailE-mail
urlURL


例) class="fValidate['required','email']" メールチェック 兼 入力チェック。

最初に初期化をする必要があります。

window.addEvent("domready", function() {
var exValidatorA = new fValidator("formのid名");
});


最初なんでか動かず。
mootools.js
fValidator.js
のセットだと確実に動く。


コピペですんませんがskuare.netさん、ありがとう。
カスタマイズする際はここが参考になる。
Chris McMichael

POSTに関するセキュリティー

POSTの際に、エスケープしないと色々と危険な話。

どうやら、ただhtmlspecialchars を使うだけでなく、
第二引数にENT_QUOTESをいれて シングルクォートもエスケープしなさいと。
ついでに文字コードもビシッと設定。

$hoge= htmlspecialchars($_POST['size'], ENT_QUOTES, mb_internal_encoding("UTF-8"));


mb_internal_encoding


追記:2008/11/11
htmlspecialcharsでmb_internal_encodingしたらエラーでた。
消したら直ったので、理由は調べてない。

2008年11月6日木曜日

正規表現 一覧

文字や数字の種類
.(ドット) 改行文字を除く任意の1文字
[a-z0-9] [ ]の中の任意の1文字(小文字大文字は別として扱う)
[^a-z0-9] [ ]の中にない任意の1文字
[ぁ-ん] ひらがな
[ァ-ヶ] 全角カタカナ
[ヲ-゚] 半角カタカナ
\w アルファベット、数字又は下線
\W アルファベット、数字、下線以外
\d 数字
\D 数字以外[^0-9]と同じ
\s 空白文字(スペース、タブ、改行)
\S 空白文字以外
\n 改行
\r リターン(復帰)
\t タブ
\d バックスペース
\o033 8進数で「033」の文字
\x1b 16進数で「1b」の文字
\cx 制御文字
文字数を指定
? 直前の文字が0個または1個
* 直前の文字が0個以上
+ 直前の文字が1個以上
{x} 直前の文字がx個
{x,} 直前の文字がx個以上
{x,y} 直前の文字がx個以上y個以下
?? 直前の文字が0個または1個(最短一致)
*? 直前の文字が0個以上(最短一致)
+? 直前の文字が1個以上(最短一致)
{x}? 直前の文字がx個(最短一致)
{x,}? 直前の文字がx個以上(最短一致)
{x,y}? 直前の文字がx個以上y個以下(最短一致)
文字の位置を指定
^ 行頭
$ 行末
\b 単語の区切り
\B 単語の区切り以外
その他
\ メタ文字のエスケープ( \\ → "\"自身を表わす)
( ) グループ化
\\1,\\2…… 後方参照(グループ化した項目を後で参照する)
$& マッチした文字列全体
$` マッチした文字列の前にある全ての文字列
$' マッチした文字列の後ろにある全ての文字列