[三流君] −−> [プログラマー業務の愚痴] −−> [バックナンバー一覧]
−−> No.159 データの流れ、途中で汚水を流される可能性

データの流れ、途中で汚水を流される可能性


本文(発行内容)


<データの流れ、途中で汚水を流される可能性>

こんにちは、Ken3です。 4月も中盤、新人さんも新環境にも慣れましたか? (新社会人がこのメルマガ読んでるか疑問だけど...) 今日もまた、プログラム系の自分にダメ出しネタです(笑) ※他のメルマガの補足・裏解説みたいになってきた

/* * 1.水の流れとデータの流れを比べるのが好きな私 */

人それぞれ、説明する時のクセって在ると思います。 購読期間が長い読者は、三流作者の言い回しにもなれてきていると思います。 長い間、一緒に作業していると、相手の表現にもなれてきて、 意味が伝わり易い関係になってくると思います。 会社の先輩の変な例えにもそのうちなれてくるのでしょ、、たぶん、、、 前置きが長いよ、何? えっと、私の好きな例え話のパターンがいくつかあって、 ・水の流れとデータの流れを比べるのが好き ・野球のネタ、サッカーネタのスポーツ関係 ・建築関係の話 など、数パターンがあります

/* * 2.Webシステムのデータの流れ */

[No.109 データは上流からキレイに] http://www.ken3.org/backno/backno_guchi21.html#109 では、マスターデータの話を上流工程でまとめておいてね なんて話をしてました。 川の流れじゃないけど、システムはデータが流れて、 そのデータに対して処理を行います。 最近、VBAとASPのメルマガに力を入れて発行してます。 ASP系で、削除処理のサンプルを作ってました。 流れは、 削除データの選択処理 HTMLのフォームで選択 | http://www.ken3.org/cgi-bin/test/test032-1.asp  ↓ POSTで削除IDを送る 削除IDを受取りSQL Delete文の発行 http://www.ken3.org/cgi-bin/test/test032-2.asp とありふれた?流れです。

/* * 3.データチェックの必要性 */

まぁ、テストのプログラムだし、データのチェックを行ってませんでした。 まずサンプルを見てもらいたいのですが、 'IDを条件にSQL DELETE文を作る strSQL = "DELETE From KANSOU " '感想(KANSOU)テーブルを削除するので strSQL = strSQL & " Where ID=" & Request.Form("DELETE_ID") を注目してみて下さい。 ここからIDを受けとってSQLを発行するサンプル test032-2.asp <%@LANGUAGE=VBScript%> <html> <head> <title>削除のSQL文 DELETE文を発行する</title> </head> <body> <h2>削除のSQL文 DELETE文を発行する</h2> test032-2.asp<br> <hr> <% '関数をコールする Call TEST_DELETE_DATA() %> <HR> 終了です。<br> <A href="test032-1.asp">再度削除選択処理へ</a><br> <A href="test029-1.asp">データ確認と登録</a><br> </body> </html> <% '削除処理
Sub TEST_DELETE_DATA()

  'ADO DB Connection オブジェクトを作成する、英文そのままじゃん
  Set db=Server.CreateObject("ADODB.Connection")
  '.Provider?プロバイダー?通信会社?じゃなくって
  'データアクセスにはJet.OLEDB.4.0を使うことを設定
  db.Provider = "Microsoft.Jet.OLEDB.4.0"
  '次に、接続DBの位置を渡すので、Server.MapPathで変換して渡す
  db.ConnectionString = Server.MapPath("db029.mdb")
  'やっとデータベースを開ける
  db.open

  'IDを条件にSQL DELETE文を作る
  strSQL = "DELETE From KANSOU "  '感想(KANSOU)テーブルを削除するので
  strSQL = strSQL & " Where ID=" & Request.Form("DELETE_ID")

  'オマケで画面にデータ表示
  Response.Write "<hr>発行する(した)SQL文は<br><B><font color='green'>"
  Response.Write strSQL & "</font></B><br>です<hr>"

  'SQL文の発行
  db.Execute(strSQL)

  'データベースも閉じようよ
  db.Close
  'お行儀よくオブジェクトも開放しましょう(通常は自動的に解放されるけど)
  Set db = Nothing

End Sub
%>
読者さんの一言:キタナイなぁ(笑)なんてお思いだと思いますが、続けると、 'IDを条件にSQL DELETE文を作る strSQL = "DELETE From KANSOU " '感想(KANSOU)テーブルを削除するので strSQL = strSQL & " Where ID=" & Request.Form("DELETE_ID") と フォームからPOSTされたDELETE_IDを使用しているのですが、 パラメータなしで直接呼ばれると、エラーが発生します。 (通常はTest032-1.asp で削除データ選択、032-2で実行の作りになってます) http://www.ken3.org/cgi-bin/test/test032-2.asp を直接起動すると、 発行する(した)SQL文は DELETE From KANSOU Where ID= です Microsoft JET Database Engine エラー '80040e14' クエリ式 'ID=' の 構文エラー : 演算子がありません。 /cgi-bin/test/test032-2.asp, 行 47 と、SQL文の作成が、 strSQL = strSQL & " Where ID=" & Request.Form("DELETE_ID") なので、 IDの条件が渡っていないので、実行時エラーで止まります。 削除データの選択処理 HTMLのフォームで選択 | http://www.ken3.org/cgi-bin/test/test032-1.asp  ↓ POSTで削除IDを送る 削除IDを受取りSQL Delete文の発行 http://www.ken3.org/cgi-bin/test/test032-2.asp の流れを、上流を無視して、途中からプログラムが起動したためです。 キレイナデータしか来ないと思って、システムを作成すると、落とし穴があります。 まぁ、こんな実行時エラーはかわいいもので、 もっと怖いのが、違うパラメータが送られて来た時です。 ※途中で汚水を流された時です・・・  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 想像し易いように、問題点は、 'IDを条件にSQL DELETE文を作る strSQL = "DELETE From KANSOU " '感想(KANSOU)テーブルを削除するので strSQL = strSQL & " Where ID=" & Request.Form("DELETE_ID") と SQL文を作成してます。 ID無しは、 If IsEmpty(Request.Form("DELETE_ID")) でチェックできるのですが、 IDしか来ないと思って作成している坊ちゃんプログラムに 簡単なHTMLを作成して "10 Or ID < 20"を渡してみます。 <HTML> <FORM ACTION="http://www.ken3.org/cgi-bin/test/test032-2.asp" METHOD="POST"> DELETE_ID <INPUT TYPE="text" SIZE="20" NAME="DELETE_ID" VALUE="10 Or ID < 20"><br> <INPUT TYPE="submit" VALUE="テスト実行"> </FORM> </HTML> ↑こんな感じで、簡単な入力用のHTMLを作成する。 http://www.ken3.org/cgi-bin/test/test049-1.html でテストできます(ローカルHDからでもできます) テストを実行すると、 プログラムは下記のように正常終了 ~~~~~~~~~~~~~~~~~~~~~~~~~~↑ 発行する(した)SQL文は DELETE From KANSOU Where ID=10 Or ID < 20 です と、追加された文字列を使用したSQL文を発行してくれました。 ※汚水を受取り、そのまま処理してしまった [No.110 プログラマーの好奇心?] [No.111 プログラマーの心、「いっちょやってみるか?」] http://www.ken3.org/backno/backno_guchi22.html#110 で、私も書いているのですが、チョット見れば、HTMLのフォームを探るのは簡単だし、 データが壊れる/壊せるなんて意識しないで、軽い気持ちでデータ書き換えてテスト、 なんてことは、チョット好奇心の在るユーザーならすると思います。 自分のパソコン内部だけで動くプログラム から WebやLan上で複数ユーザーが動かすプログラムを作るときは、 いろいろと考えなきゃなぁ・・・とあらためて思いました。

/* * 3.終わりの挨拶(次回はアルのか?(爆)) */

よくわからなかったけど、何か言いたかったの? ・作者はデータの流れの例えを水の流れで書くクセがある ・HTMLのフォームデータは簡単に途中から作成できる  (汚水を途中から流すことが簡単にできる) って話でした。 読み直すとあれ?何の話だったのだろう? でも、せっかく書いたから発行しちゃえ(爆) 何か読者の心に残れば、うれしいです。 *私の独り言をうまく消化してくださいね。 もう四月も中盤かぁ、そろそろ派遣かなぁのKen3でした。 ~~~~~~~(↑オイオイ) -------------------- 読者からのお便り紹介 -------------------- In message "uhcd.sys 確認。", いちにいさん wrote... >やっぱ、OS毎入れ換えんとダメやね。 >色々と絡みがありそうだし。 >一体何処が違うんやろ。はぁ〜。 > >んじゃ。派遣がんばってね。(女の子が沢山居る職場(笑)) ---- 女の子がたくさん居る職場かぁ・・・ ※たくさん居てもイイ思いで無かったしなぁ(実話(笑)) http://www.ken3.org/etc/500yen/job.html に転職・SOHO・派遣の情報載せつつ、自分でも探そうとしてるけど、 女の子が多い、そんな条件が検索できるといいね(オイオイ) 社員数100名とかじゃなくて、 男性90名女性10名、男性60名女性40名とか? えっ、女の子にKen3は相手にされないからイミ無いって(笑) まぁ、そんな男女比は置いといて(そんなの載ってないよ)、 たまに平均年齢24.3歳の若い会社とかアピールしてるよね。 人との出会いは何かの縁だから、。。。



ページフッター

ここまで、読んでいただきどうもです。ここから下は、三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、

リンクや広告など

項目別に本音?それとも建て前?的な記事をまとめました。

気になったジャンル↓を選択してください。
[ルーキー rookies]・・・ 新人さん達 初心者さんへ
[学ぶ study]・・・学習、技術の取得
[仕様書 doc]・・・仕様書・設計書関係の話
[共同作業 team]・・・チーム、グループ作業
[プログラムは心? spirit]・・・プログラマー 心・気質・魂

[掲示板デビューしようぜ bbs]・・・掲示板関係の話、質問者・回答者の気持ちほか
[昔はできた seo]・・・三流式の効果無しSEOとアフィリエイト
[仕事や作業、転職 job]・・・仕事や転職、評価、作業など
[その他 etc]・・・その他 分類外の記事

※↑文章の味付けが変わっていて、お口に合うかわかりませんが。。。
※※読んで、気分を悪くされたらスミマセン。

Blogとリンク:[三流君の作業日記]/ [愚痴(Bookmark)]/ [広告Blog(Bookmark)]



[三流君(TOP ken3.org へ戻る)] / [プログラマー業務の愚痴] / [バックナンバー 一覧]