Windows: 2011年11月アーカイブ

今日、お客さんにテストしてもらってた CGI で、お客さんから何度も「DB 登録時にシステムエラーが出る」と連絡が来た。
しかし、うちでは何度やっても再現出来ないので、「何か変な使い方してるんじゃねえだろうなあ?」とお客さんを疑い始めたところでハッと気づいた。

Internet Explorer でのみ発生する「Form の二重送信じゃねえの?」と。

で、ソースを見てみたら案の定だ。

今回は、(他人が作った)既存の CGI を改修して新しいサービス用のシステムを作ってるわけで、まあ、特に問題なければ元のソースの内容をなるべく残してるんだけど、Form の Submit のところで、

<input type="submit" name="ADD" value="更 新" onClick="javascrpt:Submit('ADD')">

なんてやってる。
で、JavaScript の方で、

function Submit(ps) {
    document.form.action.value = ps;
    document.form.submit();
}

みたいにして、action という Form 項目に 'ADD' という文字をセットしてから送信処理を行なっているようだ。
これじゃあ、まず type="submit" のボタンを押すことで送信が行われ、更にその時に実行される JavaScript 側でも送信が行われる。つまり二重送信だ。
結果、DB に登録する時に duplicate error が発生してるんだな。

なんでこんなことしてるんやろ?俺が作ったプログラムじゃないから全然わからんわ(^^;

取り敢えず、

<input type="hidden" name="action" value="ADD">
<input type="submit" name="ADD" value="更 新">

にしてみたのだが(元々、<input type="hidden" name="action" value="ADD"> は書かれていた)、これで問題なく動いているようである。今のところ、エラーは発生していない。

ちなみに、こういう現象が発生するのは Internet Explorer だけである。
Form 送信は HTTP のプロトコル的にも(リクエストと一緒だからな)一度だけ行われるもので、他のブラウザ(Firefox や Chrome、Safari など)は二重送信が行われないように、二度目の送信処理は裏でキャンセルするようになっている。
だから、Firefox と Chrome でテストやってた俺んとこじゃ再現出来なかったんだな(^^;

重ねて言うが、二重送信しちゃうのは Internet Explorer だけなのである。

で、ここで、Microsoft 信者は「IE が悪いんじゃない!そういう HTML の書き方がまずいんじゃないか!!」とか言うだろうけど、「Form の二重送信なんかあり得ないんだから、素直に駄目にしておけばいいだけ」なんだよ。
Microsoft には HTTP プロトコルに詳しいヤツがいないんじゃねえかって思うよ、実際。

今日、東京ポッド許可局の10/22のポッドキャスティングを聞いていたら「東京ポッド許可局のサイトは、Internet Explorer については動作保証外にします。Firefox や Safari で見てください」って言うてて笑った。
そう。実はとっくの昔に「Internet Explorer じゃなくたって良い」世の中になってたのである。
つーか、やっぱ、Internet Explorer だけ、変な独自仕様を詰め込んじゃって、インターネット界では特殊な存在になってしまってるんだよね。

まったく、Internet Explorer のおかげで、どれだけ無駄な時間を過ごしたことか・・・

今時 Internet Explorer に固執するのは、変化を望まないXX企業と、「このパソコンにインターネットはついてますか?」的発言をする馬鹿ユーザーくらいしかいねえよ。

さあ、皆、Internet Explorer を捨てて、素敵な未来へ!(笑)
20111116_error.jpg
なんか、自宅PCの様子が最近ヘン。

例えばエディタでスクリプトのソースをちょちょっと直して「名前を付けて保存」をしようとすると、存在してないファイルなのに「このファイルは既に存在します。上書きしますか?」と出る。

確かに、他のフォルダに同じ名前のファイルが存在してるので、「え?」っとなって慌てて書き出す場所を間違ってるのかと調べてみても、やっぱり間違ってないし、そこにそんな名前のファイルは存在していない。

実際、書き出したらちゃんとそのフォルダ上に、その名前のファイルが出来る。
ほら、間違ってない。

こりゃ、ディスク上のメタデータが壊れ始めてるんかねえ???

まあ、重要なデータは事務所と自宅のPCで共有してるんで問題ないけど、そろそろ、エロデータのバックアップとかしとくかなあ。ある意味、一番重要なファイル達だし(笑)
20111104_chkdsk.jpg
今日はただでさえ忙しい日だったというのに、昼前にいきなりのハードディスクトラブルに見まわれ散々な一日であった。(いや、まだ一日は終わってないけどな)

11時すぎのこと。ちょっとした作業を終え、一服しがてらエロサイトを見ていた俺は、琴線に触れる画像に出会い、さっそく保存をしようとしたのであった。ま、保存するわな、普通。

そしたら、全然保存が終わらんわけよ。見てみたら、ファイルエクスプローラーも「反応なし」になってたり。
何か、全体的に動きおかしいし。「クソ、Windows め!」とか思いながら再起動してみたのよ。いや、それが、いつまで経っても再起動しないので、電源ボタン長押しで強引に電源 OFF/ON をしてみたのだ。

そしたら、Dropbox のフォルダにリンクできんとかエラーが出るわけよ。
「ん?」と思って(Dropbox のローカルフォルダを置いている)X ドライブにアクセスしてみたら、「ファイルまたはディレクトリが壊れているため、読み取ることができません」とか言われちゃって。「フォーマットしてください」とか言われる始末。

同じ物理ドライブに作っている Y ドライブにはアクセス出来たので、ファイル管理領域が壊れたんだなあと判断し、「管理者として実行」で立ち上げたコマンドプロンプト上で、

chkdsk x: /f /r

を実行した。

まあ、これが正解で、ほぼ完璧に X ドライブは復旧出来たようだが(ざっと見てるが、今のところ重要なデータは完全復旧出来てるみたいなのでOK)、全工程が終わるのに 6時間もかかった・・・一日丸つぶれだよ(^^;
2.0TBのディスクを、1.0TBごとに2つのパーティションにわけ、それぞれ X, Y ドライブとしてマウントしてるのだ。さすがに、1.0TBの領域のディスクチェックをすると、このくらいの時間かかっちゃうのね。USB 2.0 接続のディスクだしな(^^;

そうそう。
Work という名のディレクトリが丸ごと消えていたが、CHKDSK によって作られた found.000 というフォルダの下に退避されていた。
今、Work の下に全て移した。

これで、本当に完全復旧かな。

このアーカイブについて

このページには、2011年11月以降に書かれたブログ記事のうちWindowsカテゴリに属しているものが含まれています。

前のアーカイブはWindows: 2011年10月です。

次のアーカイブはWindows: 2012年3月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら