Archive for 8 月, 2010

input type=”image”で指定した画像が表示されない

by fujii | 8 月 26th, 2010 

input type=”image”とか。初めて見ました。
いや使いたくて使ったわけじゃないです。仕事で改修することになったページで仕方なく。じゃなけりゃこんな気持ち悪い要素使いません。
inputに画像を指定するときに使うらしいんですが、こんなもの使わなくたってinput type=”submit”かaタグ使って、バックグラウンドで画像指定すればそれでいいじゃん。
まあシステム屋さんが作ったみたいなので仕方ないですが。
ちなみにinput type=”image”の使い方はこちら。
http://www.tagindex.com/html_tag/form/input_image.html
サンプルソースをコピペするとこんな感じ。
<input type=”image” src=”button.gif” alt=”送信する”>
srcで指定した画像が表示されるそうです。
さて、ここからが問題ですが、今回改修したシステムではtype=”image”で画像が設定されていました。この画像を変えたかったわけです。
なのでsrcを新しい画像のパスに変えました。
これで大丈夫・・・・と思ったら何かがおかしい。
画面をリロードしてみると、確かに最初は新たに指定した画像が出てくるんですが、画像上にポインタを持ってくると、なんと古い画像に変わる!
いや有り得ないでしょwwww
一瞬キャッシュかと思ったんですが、どうもそうではないらしい。キャッシュ削除しても起こるし。
いろいろ試してみたんですが、原因が分かりました。
まず元々はこんなコードだったんです。
<input type=”image” name=”button” src=”button.gif”>
これをこう変えた。この時点ではマウスオーバー時に画像が古いものになる。
<input type=”image” name=”button” src=”button2.gif”>
そして正常に表示されるようになったのがこれ。
<input type=”image” name=”button2″ src=”button2.gif”>
・・・つまり、srcで指定した画像名(から拡張子を抜いたもの)と、nameの文字列が一致していないと不具合が起こる可能性があると。
いや、理屈は分かんないですよ?リファレンスにもそんなこと書いてないし。nameとか無関係そうだし。
でも上の現象を見てみると、そうとしか思えない。
まあよっぽどのことがない限りこんな要素使わないのでこれ以上深入りするつもりもないですが、もし理屈を簡単に説明できる人がいたら、コメントとかで教えてくれると嬉しいかも。簡潔に。

more from " input type=”image”で指定した画像が表示されない "...

Comments Off

javascriptのCDATAセクション

by fujii | 8 月 25th, 2010 

XHTMLにjavascriptを直接埋め込むときには、よくCDATAセクションを使います。
—————————–
<script type=”text/javascript”>
//<![CDATA[
//]]>
</script>
—————————–
こんな感じで。 でも、CDATAを使わずに普通にコメントアウトしているものもよく見かけます。
—————————–
<script type=”text/javascript”>
<!–
//–>
</script>
—————————–
このあたりどう違うのか今まで知らなかったので調べてみました。
http://ja.wikibooks.org/wiki/JavaScript_XML
簡単にまとめると、
・ほとんどのブラウザがscript要素に対応しているので、コメントアウトは現在ほとんど意味がない
・スクリプト中で「<」や「&」を使う場合はCDATAセクションを使わないと無理
ということのようです。
ついでに、下のような書き方もあるけど、これはCDATAセクションに対応してないブラウザでエラーが出るのでNGだそうです。
—————————–
<script type=”text/javascript”>
<![CDATA[
]]>
</script>
—————————–
つまりこのエントリの最初に書いたコードのように、CDATAセクションはコメントアウトすると。
これがXHTML中にjavascriptを埋め込むときのベストな方法のようです。
まあ、外部jsとして読み込むのがホントは一番いいんですけどね。あくまで埋め込むときの方法ということで。

more from " javascriptのCDATAセクション "...

MTで画像がアップロードできない

by fujii | 8 月 24th, 2010 

MTで画像をアップしてたら、画像がアップできなくなりました。いきなり。
具体的には、画像投稿のポップアップが開くには開くんだけどずっとローディング状態。
そして1分くらいすると、Internal Server Errorの表示。
さっきまでできてたのに何で・・・と思いつついろいろ調べ、サーバーのエラーログも見てみたところ、
Premature end of script headers: mt.cgi
という1行のみの表示。いや、分からんって。
とは言えこれしか手がかりがないので、このエラーメッセージを軸に調べてみたら、ちゃんとした解決法が見つかりました。
http://www.apstars.com/blog/211movable_type4/xampp_1.php
http://chocota.ddo.jp/2009/03/movabletype.html
このあたり。
サムネイル作成に使っているImageMagicライブラリをGDライブラリに変えると。
具体的には、mt-config.cgiの末尾の行に「ImageDriver GD」と書き足すだけです。
実はこの方法を調べてる間に並行して、SixApartにも画像をアップできない旨を問い合わせてたんですが、回答で以下のリンクを斡旋されました。
Movable Type > よくある質問 > 画像ファイルをアップロードすると 500 エラーが発生します。
http://www.movabletype.jp/faq/image-500.html
普通によくある質問に載ってんじゃん。なんで検索して引っかかんないの。
ていうかImageMagicで動かない場合があるって認識してんならさっさとGD採用しろよボケが、っていう話ですが。
確かにImageMagicのほうが多機能ですが、GDでできないほど複雑な画像処理なんてしないだろうに。
とりあえず解決したので満足。

more from " MTで画像がアップロードできない "...

Comments Off

接続状態が「限定または接続なし」になる

by fujii | 8 月 23rd, 2010 

無線で会社のネットに繋げようとして出たエラー。
ネットワークの状態を見ると、「インターネットやネットワークリソースにアクセスできない可能性があります。ネットワークで、コンピュータにネットワークアドレスが割り当てられなかったことが原因です。」と書いてある。
パッと見で解釈したらIP設定がおかしいのかな?と思える文章だけど、以前接続したときと特に設定は変えていないはず。
じゃあ何が悪いの・・・と思いつつ検索。なんかそれっぽいのがあった。
http://dynabook.com/assistpc/faq/pcdata/003260.htm
ここに書いてあった「回避方法」で接続のプロパティをいじると、表示が変わった!だが接続できない!意味ねええええええええ
ただ黄色のビックリマーク強制的に消しただけじゃねーか。
結局、周りの人に聞いてみたところ、無線ルータを以前のものと変えたのでパスワードも変わったよと言われる。
自分が管理してない無線はいつの間にか変わっていることがあるので気をつけようね!というオチ。

more from " 接続状態が「限定または接続なし」になる "...

PHPで画面のURLを取得する

by fujii | 8 月 21st, 2010 

現在画面のURLを取得する方法。
http://d.hatena.ne.jp/notintrade/20071213/1197557773
というわけで、
$_SERVER['REQUEST_URI']
を使って難なく取得。
ただし、このコードだとドメイン部分は取得できません。
$_SERVER["HTTP_HOST"]
こっちのコードを使えば、http://を抜いたドメイン部分(例えば”hogehoge.com”という文字列)が取得できます。
ちなみにjavascriptだと「location.href」でURLが取得できます。こちらはPHPとは違い、http://から始まり、頭から尻尾まで全てのアドレスが取得されます。
あとたまに便利なのが「location.hash」で、これはページのアンカーを取ってきます。同じページの中で、アンカーによって処理を分岐させたい場合に便利。
if(location.hash){//アンカーがあれば{}内の処理を実行
if(location.hash==”#hoge”){
hogefunc();//アンカーが#hogeのときに実行される部分
}else if(location.hash==”#fuga”){
fugafunc();//アンカーが#fugaのときに実行される部分
}
}

more from " PHPで画面のURLを取得する "...

MTでページャを実装する

by fujii | 8 月 20th, 2010 

MTにはページャ機能がありません。デフォルトでは。
デフォルトでページャ機能ないブログシステムってありえないでしょ、と思いつつ仕事なのでどうにか使わないといけない。
このあたりはMT使う人が結構悩むポイントらしく、ページャを実装するプラグインがいくつか配布されています。
今回は「Paged Archives Plugin」というものを使ってみました。
http://www.aldenbates.com/plugins/pagedarchives.html
上記リンクからダウンロードしたものを解凍して、できたフォルダをMTのpluginフォルダへ。
実際の使い方ですが、普通に文章で書くと分かりにくいのでサンプルコードを。
—————————–
<MTEntries category=”ほげほげ”>
<MTPAEntry>
<p class=”date”><$mt:EntryDate format=”%Y/%m/%d”$></p>
<h4><$mt:EntryTitle$></h4>
<p><$mt:EntryBody$></p>
</MTEntries>
<MTPAEnd>
<div>
<span class=”prev”><MTPAPreviousPage text=”&lt;前のページへ”></span>
<span class=”list”><MTPAPageList></span>
<span class=”next”><MTPANextPage text=”&gt;次のページへ”></span>
</div>
—————————–
基本的には、<MTEntries>の後に<MTPAEntry>、そして</MTEntries>の後に<MTPAEnd>を入れることで使えます。
実際にページャのリンクを表示させるのはその下のdivで囲んだ部分。
<MTPAPreviousPage>で前ページへのリンクを、<MTPANextPage>で次ページへのリンクを表示させます。ともにtextオプションでリンクの文字列を指定。
<MTPAPageList>は、googleのページャのように「1 2 3 4 5 …」という数字をページの数だけ表示させます。
いろいろ試してみましたが、エントリのループは必ずしも<MTEntries>だけしか使えないというわけではないらしく、サンプルコードのようにカテゴリで絞り込んでも正常に動作しました。同様にタグの絞込み、あるいはカテゴリとタグの両方の絞込みでも使えます。

more from " MTでページャを実装する "...

submitボタンをクリックして開く画面を別ウインドウにする

by fujii | 8 月 19th, 2010 

aタグで別画面を開くんなら普通にtarget=”_blank”なんですが、submitでできるか不安だったので一応調べてみることに。
http://questionbox.jp.msn.com/qa638877.html
http://q.hatena.ne.jp/1180361362
・・・普通にtarget(略)でできるみたいです。
が、コード追加しても別ウインドウで開きません。なにこれ。
若干青ざめながらもうちょっと調べてみると、サンプルコードまで書いてあるとこがありました。
http://www.tagindex.com/html_tag/form/form_target.html
「form要素にtarget=””を追加すると・・・」ということらしいです。なるほど。
自分のコードをよく見てみるとsubmit設定してるinput要素にtarget書いてました。前の参考リンクにもちゃんと「formに書く」って書いてあるのに見逃してたっていう。
サンプルコード書いてくれないと見落とすよ。
というわけでサンプルコード。こんな感じ。
<form action=”hogehoge.php” method=”POST”>
<input type=”submit” value=”hogehoge” />
</form>

more from " submitボタンをクリックして開く画面を別ウインドウにする "...

Comments Off

mysql_queryの返り値確認

by fujii | 8 月 18th, 2010 

例えばmysql_queryでselect文を実行して、取得したデータがあるかないかで分岐したいとき。
当初は
if(!$res){//返り値がなかったときの処理
}
なんてやってたんですが、どうもうまくいかない。
http://okwave.jp/qa/q3896489.html
http://www.php.net/manual/ja/function.mysql-query.php
このへん見てたら、失敗したらfalseを返すって書いてあるので大丈夫な気がしなくもなかったんですが、よく考えるとselect文自体は成功してるからfalseは返ってこない
のか。
仕方ないのでmysql_num_rowsを使いました。
http://www.php.net/manual/ja/function.mysql-num-rows.php
このへんを参考に、下のような感じで。
if(mysql_num_rows($res)==0){
//返り値がなかったときの処理
}
これだと、結果が0件だったときに{}内の処理が実行されます。

more from " mysql_queryの返り値確認 "...

WordPress SEO fine-tune by Meta SEO Pack from Poradnik Webmastera