2016-10-31 5 views
-4
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    Dim con As New MySqlConnection("host=localhost; username=root; password=; database=wh_db") 
    Dim cmd As New MySqlCommand 
    Dim dr As MySqlDataReader 

    con.Open() 
    cmd.Connection = con 
    cmd.CommandText = " select pass from user where pass ='" & oldpass.Text & "'" 

    dr = cmd.ExecuteReader 
    If dr.HasRows Then 

     cmd.Connection = con 
     cmd.CommandText = " UPDATE user SET pass ='" & newpass.Text & "' where user = '" & user.Text & "'" 

    Else 
     MsgBox("Password is not correct") 

    End If 
End Sub 
+2

どのようなエラーが表示されますか?また、実際にSQLインジェクションを防ぐためにパラメータを使用する必要があります。 – topshot

+1

誰かがデータベースから利用可能なパスワードを入力でき、パスワードを変更できるようになります...パスワードをハッシュすることをお勧めします。 –

+0

不明確、投票を終了する。 – halfer

答えて

1

私はしばらくの間、MySQLを使用していませんが、これを見てください。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 

    Dim dr As MySqlDataReader 

    Using con As New MySqlConnection(yourConnectionString), 
      cmd As New MySQLCommand("SELECT pass FROM user WHERE pass = @pass", con) 

     cmd.Parameters.Add("@pass", MySqlDbType.VarChar).Value = oldpass.Text 

     con.open() 

     dr = cmd.ExecuteReader 

    End Using 

    If dr.HasRows Then 

     Using con As New MySqlConnection(yourConnectionString), 
       cmd As New MySQLCommand("UPDATE user SET pass = @pass WHERE user = @user", con) 

      cmd.Parameters.Add("@pass", MySqlDbType.VarChar).Value = newpass.Text 
      cmd.Parameters.Add("@user", MySqlDbType.VarChar).Value = user.Text 

      con.open() 

      cmd.ExecuteNonQuery() 

     End Using 

    Else 
     MsgBox("Password is not correct") 
    End If 
End Sub 

更新しない理由は、更新するように指示していないためです。また、Usingを実装しました。SQLインジェクションを停止するためのパラメータも見てください。

両方の文をステートメントに分けて、SELECTコマンドとUPDATEコマンドの両方で同じオブジェクトを再利用しようとするのではなく、もっと良いと思っています。

+0

私は助けてください助けてください –

+0

それより少し多くの情報を私に与える必要があります。エラーは何ですか? – Bugs

関連する問題