Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
ログイン成功後、IDとユーザー名を各フォームで使用したい
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=17599#CommentId50227
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
魔界の仮面弁士
 (社会人)
投稿日時
2014/6/19 20:38:19
> ※Textbox1はtextのプロパティで「0」を最初から入れています。
> If TextBox1.Text = 0 Then
これは非常にマズイです。
Text プロパティが返すのは 文字列(String 型)です。
しかし上記の比較式では、右辺の「0」が整数値(Integer 型)になっていますよね。
型をあわせるために、右辺も文字列型にして、
『If TextBox1.Text = "0" Then』
と書くようにしましょう。
『If TextBox1.Text = 0 Then』という記述の場合、VB は「=」の両辺を
数値(Double 型)に変換してから比較する仕様になっています。
すなわち上記は、「If CDbl(TextBox1.Text) = 0.0 Then」という意味で
実行されてしまっているということです。
TextBox1 の内容が、初期値に指定した「0」のままであるとか、あるいは
「123」などといった数値として記入されている場合には、現在の
『If TextBox1.Text = 0 Then』でのチェックを通過できます。しかし、もしも
TextBox1 の内容が、「」や「abc」などに変更された場合、
『If TextBox1.Text = 0 Then』のコードのままでは、Double 型への
型変換エラーが実行時に発生してしまうことになります。
> 今の所、ID、パスワード作成時にある程度のセキュリティを高めていると思っています。
それは「作成時」の法則であって、「入力時」の制限ではありませんよね。
本来のIDやパスワードはそういうルールであったとしても、利用者はそれらと異なる文字列を、
【間違えて入力してしまう】(あるいは意図的な誤入力などの)恐れがあります。
その場合に誤動作やエラーが起きぬようにするための対策として
・範囲外の文字が入力できないように、画面側に入力制限を施す
・データベースに渡す前に入力値検査を行うようにする
あるいは
・「'」を「''」に置き換えるか、パラメータクエリーを用いる
といった対処が必要になってくるわけです。
> Private Function CheckUser(id As String, pass As String) As Boolean
この CheckUser 関数は、戻り値として何を返したいのでしょうか?
ログインできたかどうかを、True/False で返したいなら、As Boolean で良いですが、
ログインされたユーザー名を文字列として返したいなら、As String にするべきです。
> Return BBB '「RESULT <> 0」にするとString "横横太郎 " から型 'Boolean' への変換は無効です。とエラー。
いいえ、そうはならないはずです。
もしも『String "横横太郎 " から型 'Boolean' への変換は無効です。』
というエラーが出力されたなら、それは「Return RESULT」と書いた場合でしょう。
「Return RESULT <> 0」としたのなら、エラーメッセージは
『String "横横太郎 " から型 'Double' への変換は無効です。』
となるはずです。
> エラー回避の為にBBBを使用
修正の方向性が間違っています。
RESULT には、ログインしたユーザー名(文字列)を格納したのですよね。
であれば、Function CheckUser の戻り値も As String にしておくべきです。
なお、As Boolean のままにしておきたいのであれば、ログインできたかどうかを確認するため、
「Return Not String.IsNullOrEmpty(RESULT)」などと書くことができます。