blackwolf96
blackwolf96
Benvenuti, in questo tutorial, vedremo come loggare su una nostra applicazione in VB .NET registrandosi sul proprio sito, e quindi usando un database remoto.
Il programma che andremo a realizzare, sarà composto da 2 parti, una risiedente sul server remoto, e l’ altra su normali PC dove si vorrà accedere.
Lo script remoto, non è altro che una semplice pagina in php che estrae gli account dal db locale (del sito web) e li inserisce in un file di testo, ovviamente criptati!
All’ avvio del form esegue la pagina in php su un controllo webbrowser non visibile, scarica il file di testo ed inserisce gli account su un db sqlite locale (ovviamente senza decriptarli). In fine, quando premiamo il pulsante di login legge l’ account inserito dal db locale.
Script remoto
Bene, è giunto il monmento di creare lo script in PHP. Copiate il codice seguente in un nuovo file chiamato “GetAcco.php” e caricatelo sul vostro server remoto tramite FTP.
<?php/*************************************** Get accounts from DB by BlackWolf9***************************************
Creatore: BlackWolf Sito: https://blackwolf96blog.wordpress.com/ Link articolo: Data 05/04/2011 Script PHP che ricava user e password da un database e li inserisce in un file di testo criptandoli */ $host = “localhost”; // Host del DB $user = “root”; // User del db $pass = “123456”; // Password DB $dbname = “Sito”; // Nome DB $conn = mysql_connect($host, $user, $pass) or die (“Errore durante la connessione”); //Connetti al db mysql_select_db($dbname)or die (“Errore nel selezionare il database”); // Selezionalo $ky = ‘v1a6f1ga56df1h54sj78h9fj4fg5h1k8’; // 32 * 8 = 256 bit key $iv = ‘agas6d5h4f65gj1g7h8k4hjl64jk5l41’; // 32 * 8 = 256 bit iv $sqlquery = “SELECT `Username`, `Password` FROM `”.$dbname.”`.`Account`”; // Query che ricava gli account dal DB $result = mysql_query($sqlquery); $number = mysql_numrows($result); $settingsfile = fopen(“accounts”, “w”); //Apri il file $i = 0; if ($number < 1) { print “<center>Non è stato aggiunto alcun account</center>”; } else { while ($number > $i) { $Username = mysql_result($result, $i, “Username”); //Ricava user $Password = mysql_result($result,$i,”Password”); //e password $frase = encryptRJ256($ky, $iv,$Username).”♥”.encryptRJ256($ky, $iv, $Password).”\n”; //Cripta user e password ricavate fputs($settingsfile, $frase); //Inseriscile nel file $i++; } } fclose($settingsfile); //Funzioni di Criptazione e decriptazione function decryptRJ256($key,$iv,$string_to_decrypt) { $string_to_decrypt = base64_decode($string_to_decrypt); $rtn = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $string_to_decrypt, MCRYPT_MODE_CBC, $iv); $rtn = rtrim($rtn, “\4”); return($rtn); } function encryptRJ256($key,$iv,$string_to_encrypt) { $rtn = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $string_to_encrypt, MCRYPT_MODE_CBC, $iv); $rtn = base64_encode($rtn); return($rtn); } ?> |
Il programma principale
Bene, adesso dobbiamo creare il programma in VB NET. Cercate di creare un form come quello che segue,
e nella visualizzazione codice inseguite il codice qui di sotto. Vi ricordo che potrete anche scaricare tutto il progetto che ho usato io in fondo all’ articolo ;D . In particolare dovrete creare:
Ecco il codice:
‘*************************************** Get accounts from DB by BlackWolf ***************************************’Creatore: BlackWolf
‘Sito: https://blackwolf96blog.wordpress.com/ ‘Link articolo: ‘Data 05/04/2011 ‘*/ Imports System.IO Imports System.Data.SQLite Public Class LoginWindow Dim sKy As String = “v1a6f1ga56df1h54sj78h9fj4fg5h1k8” ’32 chr shared ascii string (32 * 8 = 256 bit) Dim sIV As String = “agas6d5h4f65gj1g7h8k4hjl64jk5l41” ’32 chr shared ascii string (32 * 8 = 256 bit) Private Sub Logga(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles login.Click Dim SQLconnect As New SQLite.SQLiteConnection() ‘ inizializza connessione al db access locale Dim SQLcommand As SQLiteCommand SQLconnect.ConnectionString = “Data Source=Accounts.db;” SQLconnect.Open() SQLcommand = SQLconnect.CreateCommand SQLcommand.CommandText = “SELECT * FROM ‘Accounts’ WHERE `Password`= ‘” & Criptazione.EncryptRJ256(sKy, sIV, pass.Text) & “‘ AND `Username`= ‘” & Criptazione.EncryptRJ256(sKy, sIV, user.Text) & “‘” ‘query che ci permette di ricavare gli account Dim SQLreader As SQLiteDataReader = SQLcommand.ExecuteReader() While SQLreader.Read() MsgBox(“Benvenuto ” & user.Text) ‘ login avvenuto End While SQLcommand.Dispose() SQLconnect.Close() End Sub Private Sub MeLoad(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ‘Esegue lo script in PHP in un webbrowser minimizzato, scarica il fiel di testo con gli account e li inserisce in un db access locale If My.Computer.FileSystem.FileExists(“accounts”) Then My.Computer.FileSystem.DeleteFile(“accounts”) End If My.Computer.Network.DownloadFile(“http://localhost/accounts”, “accounts”) ‘ Sostituite localhost con l’ indirizzo del vostro sito dove è caricato lo script in PHP Dim sr As New StreamReader(“accounts”) Dim stringa() As String Do While sr.Peek() >= 0 stringa = Split(sr.ReadLine(), “♥”) ‘Separatore di accounts e password adduser(stringa(0), stringa(1)) Loop sr.Close() WebBrowser1.Navigate(“http://localhost/GetAcco.php”) ‘ Sostituite localhost con l’ indirizzo del vostro sito dove è caricato lo script in PHP End Sub Private Sub adduser(ByVal username As String, ByVal password As String) Dim SQLconnect As New SQLite.SQLiteConnection() Dim SQLcommand As SQLiteCommand SQLconnect.ConnectionString = “Data Source=Accounts.db;” SQLconnect.Open() SQLcommand = SQLconnect.CreateCommand SQLcommand.CommandText = “DELETE FROM ‘Accounts’ ;” ‘ Elimina i precedenti account e ne inserisce di nuovi SQLcommand.CommandText = “INSERT INTO Accounts (Username, Password) VALUES (‘” & username & “‘, ‘” & password & “‘);” SQLcommand.ExecuteNonQuery() SQLcommand.Dispose() SQLconnect.Close() End Sub End Class
|
Il codice è abbastanza commentato, quindi non dovreste avere problemi ;D.
Il progetto originale e la pagina web la potete scaricare da qui: http://www.mediafire.com/?y3ik4aosdwj675f
Se ho mancato qualcosa, commentate!!
BlackWolf
Dopo lo scorso articolo su come effettuare una connessione MySql con Visual Basic .Net, adesso vediamo come creare una form per loggarsi in un programma con MySql. Per prima cosa eseguiamo queste query (spiegazioni nell’ articolo precedente):
Questa per chi non ha seguito lo scorso articolo e quindi non ha creato il database:
CREATE DATABASE `provaguida` |
E questa da effettuare in entrambe i casi:
CREATE TABLE `Account` ( `Username` TEXT NOT NULL, `Password` TEXT NOT NULL, `Ruolo` INT NOT NULL ) COLLATE='latin1_swedish_ci' ENGINE=MyISAM ROW_FORMAT=DEFAULT;
|
Ora che abbiamo creato la tabella “Account” dobbiamo creare il progetto in Visual Basic. File >-nuovo progetto>Applicazione windows form. Diamo il nome Login with MySql e aggiungiamo alla form i seguenti componenti:
E cerchiamo di disporli in questo modo (ovviamente non è obbligatorio):
Doppio click sul pulsante login ed inseriamo il seguente codice:
Dim username As String = “”Dim password As String = “”Dim ruolo As Integer
If TextBox1.Text = “” Then MsgBox(“Inserisci l’ username”) Exit Sub End If If TextBox2.Text = “” Then MsgBox(“Inserisci la password”) Exit Sub End If Try Dim ipdatabase As String = “127.0.0.1” ‘ indirizzo ip database Dim pswdatabase As String = “” ‘ password database Dim iddatabase As String = “root” ‘ username database Dim nomedatabase As String = “provaguida” ‘ nome database Dim stringaconn = “DRIVER={MySQL ODBC 3.51 Driver};SERVER=” & ipdatabase & “;DATABASE=” & nomedatabase & “;UID=” & iddatabase & “;PASSWORD=” & pswdatabase & “;OPTION=3” Dim connessione As New OdbcConnection(stringaconn) connessione.Open() Dim comando As New OdbcCommand() comando.Connection = connessione comando.CommandText = “SELECT `Username`, `Password`, `Ruolo` FROM `account`WHERE `Password`='” & TextBox2.Text & “‘LIMIT 0, 1000;” Dim reader As OdbcDataReader reader = comando.ExecuteReader While reader.Read ruolo = CStr(reader(“Ruolo”)) username = CStr(reader(“username”)) password = CStr(reader(“password”)) End While ‘catch errore di connessione Catch errore_di_connessione As System.Data.Odbc.OdbcException MsgBox(“Non sono riuscito a connettermi perchè: ” + errore_di_connessione.Message) Finally End Try If TextBox1.Text = username And TextBox2.Text = password Then If ruolo = “1” Then ‘ determinazione del ruolo MsgBox(“Admin”) ElseIf ruolo = “2” Then MsgBox(“Guest”) ElseIf ruolo = 0 Then MsgBox(“Qualcosa non va con gli account, contattare l’ amministratore”) End If Else MsgBox(“Username o password errati”) Exit Sub End If
|
In alto a tutto, prima di
Public Class Form1
Inserite: Imports System.Data.Odbc.
Se provate ad eseguire il codice, ovviamente il programma vi dirà che l’ username o la password da voi inserita non è corretta perché dobbiamo creare ancora degli utenti.
Come facciamo:
Innanzitutto aggiungiamo un bottone alla form e denominiamolo “Gestione Account”
All’ interno dell’ evento click del bottone aggiungiamo: Gestione_account.Show()
Ovviamente per un senso logico alla nostra applicazione, non metteremo il pulsante Gestione account in un form di login. Qui è fatto solo per esempio (ovvio!!).
Dobbiamo creare un nuovo form, in alto: progetto>aggiungi windows form>windows form. Diamogli il nome di “gestione account” e clicchiamo su aggiungi.
In questo nuovo form, aggiungiamo i seguenti elementi:
Doppio click sul pulsante “Aggiungi account” ed inserire:
Dim ruolo As StringIf RadioButton1.Checked = True Thenruolo = “1”
ElseIf RadioButton2.Checked = True Then ruolo = “2” Else MsgBox(“selezionare il ruolo dell’ account”) Exit Sub End If Dim ipdatabase As String = “127.0.0.1” ‘ indirizzo ip database Dim pswdatabase As String = “” ‘ password database Dim iddatabase As String = “root” ‘ username database Dim nomedatabase As String = “provaguida” ‘ nome database Dim connectionstring = “DRIVER={MySQL ODBC 3.51 Driver};SERVER=” & ipdatabase & “;DATABASE=” & nomedatabase & “;UID=” & iddatabase & “;PASSWORD=” & pswdatabase & “;OPTION=3” Dim conn As New OdbcConnection(connectionstring) Dim nonqueryCommand As OdbcCommand = conn.CreateCommand() Try conn.Open() Catch errore_di_connessione As System.Data.Odbc.OdbcException MsgBox(“Non sono riuscito a connettermi perchè: ” + errore_di_connessione.Message) Finally nonqueryCommand.CommandText = “INSERT INTO `account` (`Username`, `Password`, `Ruolo`) VALUES (‘” & TextBox1.Text & “‘, ‘” & TextBox2.Text & “‘,'” & ruolo & “‘);” nonqueryCommand.ExecuteNonQuery() MsgBox(“L’ account: ” & TextBox1.Text & ” è stato inserito con successo”) End Try
|
E nel pulsante “Rimuovi account”:
Dim ipdatabase As String = “127.0.0.1” ‘ indirizzo ip databaseDim pswdatabase As String = “” ‘ password databaseDim iddatabase As String = “root” ‘ username database
Dim nomedatabase As String = “provaguida” ‘ nome database Dim connectionstring = “DRIVER={MySQL ODBC 3.51 Driver};SERVER=” & ipdatabase & “;DATABASE=” & nomedatabase & “;UID=” & iddatabase & “;PASSWORD=” & pswdatabase & “;OPTION=3” Dim conn As New OdbcConnection(connectionstring) Dim nonqueryCommand As OdbcCommand = conn.CreateCommand() Try conn.Open() Catch errore_di_connessione As Odbc.OdbcException MsgBox(errore_di_connessione.Message) Finally nonqueryCommand.CommandText = “DELETE FROM `account` WHERE (`Password`='” & TextBox2.Text & “‘ AND `username`='” & TextBox1.Text & “‘)” nonqueryCommand.ExecuteNonQuery() MsgBox(“L’ account: ” & TextBox1.Text & ” è stato eliminato con successo”) End Try
|
In alto a tutto, prima di
Public Class Gestione_account
Inserite: Imports System.Data.Odbc.
E questo è tutto :-P, semplice vero? Per dubbi o chiarimenti non esitate a commentare.
Ah un ultima cosa, il file del progetto lo potete trovare qui: http://www.mediafire.com/?dw82r2pis2d1xrb
Esso è stato realizzato con visual studio 2010, e con net framework 4.0.
BlackWolf96
Devi effettuare l'accesso per postare un commento.