none
¿cómo puedo resolver lo siguiente? RRS feed

  • Pregunta

  • Hola buenas,

    Tengo el siguiente código:

    Option Explicit On
    Option Strict On
    Imports MySql.Data.MySqlClient
    Imports System.Text
    Imports System.Security.Cryptography
    
    '//Inicio de Windows
    Imports System
    Imports System.ComponentModel
    Imports System.Diagnostics
    Imports System.Drawing
    Imports System.IO
    Imports System.Runtime.CompilerServices
    Imports System.Windows.Forms
    Imports System.Net
    
    
    Public Class Login
    
        Private Screens As New List(Of Panel)
        Private ActiveScreenIndex As Integer
        Private NextActiveScreenIndex As Integer
        Private NextButton As Boolean
        Private EffectStep As Integer = 10
        Dim f As Stream
    
        ' Apis  
        Private Declare Function SendMessage _
            Lib "user32" _
            Alias "SendMessageA" ( _
                ByVal hwnd As Integer, _
                ByVal wMsg As Integer, _
                ByVal wParam As Integer, _
                ByRef lParam As Object) As Integer
    
        Private Declare Function ReleaseCapture Lib "user32" () As Integer
        ' constantes / variables  
        Private Const WM_NCLBUTTONDOWN As Integer = &HA1
        Private Const HTCAPTION As Integer = 2
    
        Private Sub Console_KeyDown( _
            ByVal sender As Object, _
            ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    
            If e.KeyCode = Keys.Escape Then Me.Close()
    
        End Sub
        Private Sub InisioSesion_MouseDown( _
        ByVal sender As Object, _
        ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
    
            If e.Button = Windows.Forms.MouseButtons.Left Then
                ' pasar el formulario como parámetro  
                Mover_Formulario(Me)
            End If
        End Sub
    
        Sub Mover_Formulario(ByVal frm As Form)
    
            ReleaseCapture()
    
            'cambiar el puntero  
            Me.Cursor = Cursors.Hand
    
            Dim ret As Integer = SendMessage( _
                                        frm.Handle.ToInt32, _
                                        WM_NCLBUTTONDOWN, _
                                        HTCAPTION, 0)
            '  reestablecer el cursor al soltar  
            Me.Cursor = Cursors.Default
        End Sub
    
    #Region " Ecriptación SHA1"
        Public Function GenerateHash(ByVal SourceText As String) As String
            Dim provider As New SHA1CryptoServiceProvider()
    
            Dim data As Byte() = System.Text.Encoding.ASCII.GetBytes(SourceText)
            data = provider.ComputeHash(data)
    
            Dim sha1 As String = String.Empty
    
            For i = 0 To data.Length - 1
                sha1 += data(i).ToString("x2").ToLower()
            Next
            Return sha1
        End Function
    #End Region
    
        Private Sub Comprueba_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Comprueba.Click
            '//Verifica, que el Usuario.Text y La Contraseña.Text Estén escritas.
            If Username.Text = "" Or password.Text = "" Then
                MessageBox.Show("¡Deben llenarse todos los campos!")
                Verifica(Me.Controls)
            Else
    
            End If
            If CheckBox1.Checked = True Then
                My.Settings.Username = Username.Text
                My.Settings.Password = password.Text
                My.Settings.Save()
                My.Settings.Reload()
            End If
    
            '//Ejecutamos la conexión al Servidor MYSQL Phpmyadmin
            '//* ---------------------------------------------------------------------*
            '//"Server=" si es en tu ordenador seria Local host de estar en un hosting usa el link directo
            '// o IP donde esta hosteado, tu base de datos.
            '//'Id=root es el usuario que se crea por defecto en “Phpmyadmin” de XAMPP puedes usar cual quiera otro
            '// cuando instalaste xampp si está en un hosting pon el usuario.
            '//Password= Usa la contraseña que creaste al instalar xampp o la de tu host.
            '//Port=3306 Normal mente, en Xampp y otros host de MYSQL viene por defecto el puerto 3306 recomendado no cambiarlo.
            '//database= Nombre dela base de datos que creaste.
            Dim mMySQLConnectionString As String = "server=mi server; user id=USER; password=MI PASS; port=3306; database=NOMBREDB; Encrypt=true"
    
    
            '//Declaramos que Conexión sea MysqlConnection de esta manera será más cómodo. 
            '//MysqlConnection es la variable dela conexión al servidor.
            Dim Conexion As MySqlConnection
    
            '//Declaramos que dr sea MysqlDataReader de esta manera será más cómodo.
            '//Ejecuta consultas en la base de datos mayormente usado para eso “Data Reader”
            Dim dr As MySqlDataReader
    
            '//Declaramos que Comando sea MysqlCommand de esta manera será más cómodo.
            '//Este componente del Mysql, es muy importante que lo conozcas se usa para hacer también consultas en la base de datos y leer las tablas.
            Dim Comando As New MySqlCommand
    
            '//Declara que conexión da igual a nueva MysqlConnection.
            Conexion = New MySqlConnection()
            Conexion.ConnectionString = mMySQLConnectionString
            Try
    
                '//Abrimos la conexión existente
                Conexion.Open()
    
                '//Ejecutamos el Comando que es Mysqlcomand y Seleccionamos id usuario y password y fecha de registro en la base de datos  de la tabla usuarios comprueba el usuario
                '// y contraseña que sean las mismas que en la base de datos.
                 Comando.CommandText = "SELECT id,username,password,membership_id,mem_expire,trial_used,email,fname,lname,token,newsletter,userlevel,created,lastlogin,lastip,access,active,tipolicencia,modolicencia,nlicencia,registro,caduca,descripcion,TipoProducto,banned FROM users WHERE username = ?username AND password = ?password"
    
    
                '//Comprueba que el Usuario.Text y la Contraseña.Text que escribió sean correctas al Usuario que intenta acceder.
                Comando.Parameters.Add(New MySqlParameter("?username", Username.Text))
                Comando.Parameters.Add(New MySqlParameter("?password", GenerateHash(password.Text)))
                'MessageBox.Show("El valor de la password es: " & GenerateHash(Contraseña.Text))
                '//Ejecuta Data Reader consulta en la base de datos.
                Comando.Connection = Conexion
                dr = Comando.ExecuteReader
    
    
                If dr.HasRows Then
                    dr.Read()
    
                    Select Case UCase(dr(23).ToString)
    
                        Case Is = "Ninguno" 'No tiene comprado ninguno
                            PictureBox5.Visible = True
                            Ninguno.Visible = True
    
                        Case Is = "Gold" 'Versión Pro
                            PictureBox5.Visible = True
                            atencion.Visible = True
    
                        Case Is = "Plus" 'Versión Plus
                            PictureBox5.Visible = True
                            atencion.Visible = True
    
                        Case Is = "Premium" 'Versión Premium (Actual producto)
    
                    End Select
    
    
                    Select Case UCase(dr(24).ToString) '// Donde indica 24 significa donde esta el banned, nunca contar id, siempre usuario hasta banned empezando por 1
    
    
                        Case Is = "0" 'Cuenta inactiva
                            alerta.Visible = True
                            activacion1.Visible = True
                            activacion2.Visible = True
                            licenciac.Visible = False
                            licenciac1.Visible = False
                            cuentah.Visible = False
                            cuentah2.Visible = False
    
                        Case Is = "1" 'Licencia caducada. Renovar
                            alerta.Visible = True
                            licenciac.Visible = True
                            licenciac1.Visible = True
                            cuentah.Visible = False
                            cuentah2.Visible = False
                            activacion1.Visible = False
                            activacion2.Visible = False
    
                        Case Is = "2" 'Licencia bloqueada
                            alerta.Visible = True
                            cuentah.Visible = True
                            cuentah2.Visible = True
                            licenciac.Visible = False
                            licenciac1.Visible = False
                            activacion1.Visible = False
                            activacion2.Visible = False
    
                        Case Is = "4" 'Modo de prueba 30 días
                            Form2.gestionarcuentaON.Visible = False
                            Form2.Label2.Visible = False
                            Form2.Nombre_arriba.Visible = False
                            Form2.gestionarcuentaOFF.Visible = True
                            Form2.ampliarsus.Visible = True
                            Form2.Label4.Visible = True
    
                            Me.Hide()
                            Form2.Show()
                            Prueba30.Show()
    
                        Case Is = "5" 'Caduca en menos de 10 días (Modo Prueba)
                            Form2.gestionarcuentaON.Visible = False
                            Form2.Label2.Visible = False
                            Form2.Nombre_arriba.Visible = False
                            Form2.gestionarcuentaOFF.Visible = True
                            Form2.ampliarsus.Visible = True
                            Form2.Label4.Visible = True
    
                            Me.Hide()
                            Form2.Show()
    
                        Case Is = "6" 'Caduca en menos de 10 días (versión de pago)
                            Form2.gestionarcuentaON.Visible = False
                            Form2.Label2.Visible = False
                            Form2.Nombre_arriba.Visible = False
                            Form2.gestionarcuentaOFF.Visible = True
                            Form2.ampliarsus.Visible = True
                            Form2.Label4.Visible = True
    
                            Me.Hide()
                            Form2.Show()
    
    
                    End Select
                    Select Case UCase(dr(24).ToString)
                        Case Is = "3" 'Arranca el formulario (versión de 365 días)
                            Me.Hide()
                            Dim Usuario As String
                            Usuario = dr(1).ToString
                            MyCuenta.Text = "Cliente: " + Usuario
                            Dim ID As Integer
                            ID = CInt(dr(0).ToString)
                            'Form1.nlicencia.Text = ID
                            'Form1.nlicencia.Text = Usuario
                            'Form2.Nombre_arriba.Text = CStr(ID)
                            Form2.Nombre_arriba.Text = Usuario
    
                            Form2.Nombre_arriba.Visible = True
                            Form2.Label2.Visible = True
    
                            Dim banned As Integer
                            banned = CInt(dr(24).ToString)
                            Form2.Show()
    
    
                    End Select
    
    
    
                Else
                    MsgBox("Nombre de usuario o contraseña incorrecta")
    
                    Username.ResetText()
                    password.ResetText()
                    Comprueba.Focus()
    
                End If
            Catch myerror As SystemException
                MessageBox.Show("No hay conexión con el servidor. Verifica si hay nuevas actualizaciones.")
    
            Catch ex As Exception
                MessageBox.Show("Error: ")
    
            Finally
    
                Comando.Parameters.Clear()
                Conexion.Close()
    
            End Try
    
            If My.Computer.Network.IsAvailable Then
                'MessageBox.Show("El equipo tiene conexión a internet")
                'Iniciando_Servicios.Show()
            Else
                MessageBox.Show("El equipo no esta conectado a internet")
            End If
    
    
        End Sub

    Mi problema es el siguiente.

    El programa deja acceso mediante el case es decir, el número. Bien el problema que tengo ahora es el siguiente. Donde pone Premium, plus y tal no se como hacer para que si el usuario se descarga por ejemplo el .exe y el .exe es la versión premium y su cuenta es Plus! que le diga o salte un label indicando que esta no es su versión y se tiene que descargar su versión desde la web. Es decir, lo que quiero que también se restrinja desde Premium y plus al igual que el case ya que si no es su cuenta premium y este en 3 no le deje paso ya que el 3 es como acceso full pero su versión de cuenta es Plus!.

    Por otro lado si no fuera mucha molestia, si os fijáis en los últimos campos donde pone registro - caduca de la DB, quiero hacer que cuando llegue la fecha de caduca, cuando llegue en esa fecha se le cambie el case is al 1, que seria de renovar la cuenta y también que se le ponga en 

    Case Is = "Ninguno" 'No tiene comprado ninguno

    ya que al caducar se restablezca ese campo a ninguno pero en los cases de números, se le ponga al 1.

    Espero que me hayan entendido, si no, haganmelo saber.

    Espero una respuesta. ¡GRACIAS!

    sábado, 14 de julio de 2012 15:24

Respuestas

  • podrias cortar la ejecucion si haces

    Select Case UCase(dr(23).ToString) Case Is = "Ninguno" 'No tiene comprado ninguno PictureBox5.Visible = True Ninguno.Visible = True

    Return Case Is = "Gold" 'Versión Pro PictureBox5.Visible = True atencion.Visible = True Case Is = "Plus" 'Versión Plus PictureBox5.Visible = True atencion.Visible = True Case Is = "Premium" 'Versión Premium (Actual producto) End Select

    con ese return sales y evitas el resto del codigo


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    sábado, 14 de julio de 2012 18:29

Todas las respuestas

  • podrias cortar la ejecucion si haces

    Select Case UCase(dr(23).ToString) Case Is = "Ninguno" 'No tiene comprado ninguno PictureBox5.Visible = True Ninguno.Visible = True

    Return Case Is = "Gold" 'Versión Pro PictureBox5.Visible = True atencion.Visible = True Case Is = "Plus" 'Versión Plus PictureBox5.Visible = True atencion.Visible = True Case Is = "Premium" 'Versión Premium (Actual producto) End Select

    con ese return sales y evitas el resto del codigo


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    sábado, 14 de julio de 2012 18:29
  • Entiendo,

    Entonces Return lo que hace es no dejar acceso si la tabla no marca Premium. Como ves actualmente sería premium, entonces dejaría acceso.

    El return lo pongo en versión plus, en ninguno y gold?

    Espero una respuesta,

    Gracias

    sábado, 14 de julio de 2012 19:19
  • otra pregunta Leandro,

    Me podrías explicar que puedo hacer en este código para que en tal tabla vaya restando los días? te lo agradecería.

    Gracias

    viernes, 27 de julio de 2012 8:48
  • no entendi

    como es eso de restar los dias ?

    o sea si tienes un datetime podrias usar el AddDays(-1) para restar un dia a esa fecha y despues podrias enviar ese resultado a la db por el parametro, pero no se si es eso a donde apuntas

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    viernes, 27 de julio de 2012 11:51
  • Si! es eso, como lo hago? me puedes pasar un código e indicarme donde puedo introducirlo en la parte del código de arriba?

    En la tabla caduca es lo que quiero que vaya restando, si puede ser tambien, puedo decirle que en el form2.label2 y tal vaya mostrando los días restantes y cuando vaya faltando días, el vaya clasificando del 1 al 2??

    Fijate en el código para que veas, si ya falta por ejemplo 10 días 

    Case Is = "6" 'Caduca en menos de 10 días (versión de pago)

    pues que el vaya pasando a los números y cuando llegue a 0 días lo ponga el case en 1.

    Espero una respuesta,

    Gracias leandro



    • Editado Symantecc viernes, 27 de julio de 2012 19:46
    viernes, 27 de julio de 2012 19:39
  • Leandro cuando puedas indicame el código y si no me explique bien indicamelo.

    Gracias

    viernes, 27 de julio de 2012 20:08
  • Hola Leandro,

    Pudiste encontrarme cierto código para realizar estas cosas?

    Solo necesito que cuando vayan faltando días vaya a poner solo el case is en su casilla correspondiente, 

    Gracias.

    viernes, 27 de julio de 2012 23:22
  • Hola Leandro,

    Pudiste crear el código?

    Saludos y espero una respuesta

    lunes, 30 de julio de 2012 8:17