giovedì 29 novembre 2012

Vb.net - Selezione della cella di un DataGridView con il tasto destro del mouse

Ciao a tutti!
Oggi vi mostrerò una cosa che mi ha fatto letteralmente impazzire, ovvero la selezione di una cella di un elemento DataGridView, in Visual Basic 2010, con il tasto destro, allo scopo di far comparire un menù contestuale.

Ecco a voi il codice. Per motivi di spazio ho separato pezzi della stessa riga con il carattere _ andando a capo:

1.  Private Sub DataGridView1_MouseClick(sender As DataGridView,_
                    e As System.Windows.Forms.MouseEventArgs)_ 
                    Handles DataGridView1.MouseClick
2.      If e.Button = Windows.Forms.MouseButtons.Right Then
3.          sender.ClearSelection()
4.          Dim ht As DataGridView.HitTestInfo = sender.HitTest_
                (e.X, e.Y)
5.          If ht.ColumnIndex <> -1 And ht.RowIndex <> -1 Then
6.              sender.Item(ht.ColumnIndex, ht.RowIndex).Selected_

                    = True
7.              ContextMenuStrip1.Show(MousePosition.X,_

                    MousePosition.Y)
8.          End If
9.      End If
10. End Sub
 
Prima di tutto trascinate nella vostra form il controllo ContextMenuStrip che faremo comparire al click. DataGridView1 è il nome del vostro controllo griglia e sender è il riferimento ad esso.


Spiegazione del codice:
 
  • riga 2: imponiamo la condizione che il menu compaia soltanto alla pressione del tastro destro
  • riga 3: specifichiamo di cancellare ogni volta la selezione altrimenti avremmo un multi - select sulla griglia
  • riga 4: impostiamo un oggetto che conterrà informazioni varie sulla cella - che viene selezionata a partire dalle coordinate (e.X, e.Y) del puntatore del mouse - quali gli indici di colonna e di riga
  •  
  • riga 5: mettiamo una condizione per cui se erroneamente clicchiamo sulla barra di intestazione o sul bordo sinistro della DataGridView non venga generata un'eccezione di tipo IndexOutOfRange
     
  • riga 6: selezioniamo la cella attraverso gli indici ricavati dall'oggetto ht precedentemente creato
  • riga 7: facciamo comparire il menu contestuale a partire dal puntatore del mouse, specificando le coordinate (MousePosition.X, MousePosition.Y)


Nel prossimo articolo vedremo come incollare nella nostra DataGridView un elenco di dati prelevati direttamente da excel.

Stay Tuned!


mercoledì 5 settembre 2012

Redirect 301 con metacarattere ?

Ciao a tutti!
Oggi vi mostrerò come effettuare il redirect permanente HTTP 301 sul vostro sito internet, ovvero quell'operazione che mostra a client ed agli spider dei motori di ricerca che una pagina è stata spostata o non esiste più.
 
Questa operazione apparentemente banale, è molto importante in ambito SEO in quanto consente di redirigere il traffico altrove senza perdere preziosi punti di indicizzazione e il posizionamento all'interno dei motori di ricerca.
 
Di per sè non è un'operazione complessa ma i problemi sorgono con le querystring, ovvero con quei link che hanno la seguente sintassi:
 
index.php?param1=10&param2=test
 
Normalmente infatti scriveremmo una sintassi del tipo:
 
  1. RewriteEngine on
  2. Options -Multiviews
  3. RewriteRule ^index.php?param1=([0-9]*)&param2=([a-z]*)$ redirect301.php [L]
 
con la prima parte (racchiusa tra ^ e $) il link a cui si punta e la seconda parte (in questo caso redirect301.php) il link a cui si vuole redirigere l'utente/crowler. Il problema sorge per il fatto che la prima parte della riga contiene il metacarattere ? (punto di domanda) che nelle espressioni regolari è utilizzato per indicare la ripetizione di zero o una volta del carattere o gruppo di carateri che segue. In virtù di ciò, il server apache ferma l'analisi della stringa al ? per cui processa soltanto index.php generando un comportamento non desiderato.
 
Per risolvere questa situazione scomoda si fa ricorso ad una riga ulteriore di codice da inserire nel file .htaccess che è una condizione di riscrittura di tipo querystring, ovvero il gruppo di parametri che si trovano dopo il ? nel nostro link. Qui di seguito vi mostro semplicemente come fare:
  1. RewriteEngine on
  2. Options -Multiviews
  3. RewriteCond %{QUERY_STRING} ^param1=([0-9]*)&param2=([a-z]*)$
  4. RewriteRule ^index.php$ redirect301.php [L]
Vi consiglio anche un sito internet da cui fare prove on-line di correttezza della vostra sintassi:
 
 
E con questo vi saluto e vi dò appuntamento alla prossima guida.
 
Stay tuned!
 

lunedì 6 agosto 2012

Scaricare file da FTP con PHP

Ciao a tutti!
Oggi vi presenterò uno script che vi permetterà di effettuare il download automatico di file da cartelle ftp create di giorno in giorno con il formato yyyymmdd (esempio 20120806) utilizzando poche righe di codice scritte in php. Vediamo come:

1    <?php
2  
3    $ftp_server = "114.112.03.210";
4    $ftp_username = "user
";
5    $ftp_password = "password";
6    $ftp_conn = ftp_connect($ftp_server);
7

8    $login = ftp_login($ftp_conn, $ftp_username, $ftp_password);
9
10  $var = fopen("c:\mydir\log.html","a+");
11  fwrite($var, "[".date('d/m/Y - H:i')."]: Avvio batch aggiornamento<br>");
12 
13  if(!$ftp_conn || !$login) {
14
      echo "Connessione fallita!";
15
      fwrite($var, "[".date('d/m/Y - h:i')."]: Connessione fallita<br>");
16      }
17
18  else {
19      $dataOdierna = date("Ymd",time()); 
20      if(!is_dir("c:\mydir\$dataOdierna"))
21
          mkdir("c:\mydir\$dataOdierna",755);
22
      $listaFile = ftp_nlist($ftp_conn,"directoryFTP/$dataOdierna");
23
      foreach($listaFile as $file_down) {
24
          $dove_scaricare = explode("directoryFTP/",$file_down);
25
          $dove_scaricare = "c:\mydir\$dataOdierna\".$dove_scaricare[1];
26
          $download = ftp_get($ftp_conn, $dove, $file_down, FTP_BINARY);
27
          if (!$download) {
28
              echo "Errore download del file $file_down<br>";
29
              fwrite($var, "[".date('d/m/Y - H:i')."]: Error $file_down<br>");
30
              }
31
         else {
32
             fwrite($var, "[".date('d/m/Y - H:i')."]: $file_down completato!<br>");
33
         }
34      }
35      ftp_quit($ftp_conn);
36   }
37   fwrite($var, "[".date('d/m/Y - H:i')."]: Fine task<br><hr>");
38   fclose($var);
39
40   ?>

Vediamo ora cosa rappresentano le varie righe di codice:
dalla riga 3 alla 8 vediamo i campi dove inserire i nostri parametri di connessione, quindi l'indirizzo ip del server ftp (o anche il nome risolto come ad esempio ftp.tuosito.com), il nome utente e la password di accesso. Il tutto viene poi riunito in una variabile che andrà a creare la stringa di connessione, dopodichè viene effettuato il login al server.

Le righe 10, 11, 29, 32, 37 sono utilizzate per scrivere un file di log nella directory che preferiamo, in modo da poter visualizzare eventuali errori.

Nella riga 19 ricaviamo il nome della cartella utilizzando la funzione date("Ymd",time()) dove il primo parametro indica il formato (anno mese giorno tutto attaccato) e il secondo è una funzione che restituisce la data in formato unix al moemento in cui viene richiamata.

Nelle righe 20 e 21 andiamo a creare, se non esiste la cartella di destinazione (ne avremo una diversa per ogni giorno in cui lo script sarà lanciato) con permessi di lettura/scrittura 755, mentre la riga 22 andrà a caricare la lista dei files presenti nella cartella remota in un array che scorreremo dalla riga 23 alla 34.

Le righe 24 e 25 estrarranno esattamente il nome del file da memorizzare sul nostro disco (togliendo il nome della cartella ftp). Infine nella riga 26 verrà effettuato il trasferimento vero e proprio del file. Se le operazioni appena descritte saranno andate a buon fine o meno, il tutto sarà segnalato nel file di log impostato inizialmente.

Le ultime righe serviranno invece alla chiusura della connessione ftp, alla scrittura sul file di log del termine dell'operazione e alla chiusura di quest ultimo.

Stay tuned!

giovedì 2 agosto 2012

Query da Php a Mysql

Salve a tutti!
Quest oggi vedremo come sia possibile, mediante Php, interrogare un database MySql in locale (se abbiamo installato sul nostro computer un server apache mediante XAMPP) o in remoto.

Per chi se la fosse persa, segnalo la guida necessaria relativa ai Parametri Php per la connessione al database MySql della puntata precedente.

Cominciamo a visualizzare un pò di codice. Il primo passo è includere la libreria precedentemente creata e chiamata "accessodb.php" (o come volete voi, basta che il nome sia riconoscibile per eventuali utilizzi futuri).

Qui di seguito una semplice query dove effettueremo una SELECT su una tabella fittizia chiamata Anagrafica:

1   <?php
2  
3   include("accessodb.php");
4  
5   $interrogazione = "SELECT * FROM Anagrafica";
6   $risultati = mysql_query($interrogazione,$connessione);
7   $riga = mysql_fetch_array($risultati);
8
9   $nome = $riga['nome'];
10 $cognome $riga['conome'];
11 $indirizzo = $riga['indirizzo'];
12
13 ?>

Come si può vedere, alla riga 13 abbiamo preparato una stringa che contiene la nostra query.

Alla riga 14 invece creiamo una variabile $risultati che conterrà il resultset della query invocando la funzione mysql_query che ha come primo argomento la query e come secondo i parametri di connessione al database (definito nel file "accessodb.php").

La riga 15 crea invece un array che ho chiamato $riga che conterrà i campi della prima riga ottenuta dalla query che abbiamo effettuato. Per accedere ai valori dell'array è possibile farlo in due modi:

1) Mediante l'invocazione del nome del campo: $riga['nome'];
2) Mediante utilizzo di un indice numerico: $riga[0];

Questo supponendo che la colonna nome sia la prima (come sappiamo gli indici di un array partono da zero). Personalmente per dare chiarezza al codice preferisco utilizzare il primo metodo.

Per quanto riguarda la funzione mysql_fetch_array, essa estrae una riga dal resultset contenuto nella variabile $risultati ogni volta che verrà invocata e restituirà un valore false quando non ci saranno più righe da estrarre.

Ora vedremo il codice per estrarre tutte le righe della tabella anagrafica e mandarla in output nel nostro browser:

1   <?php
2  
3   include("accessodb.php");
4  
5   $interrogazione = "SELECT * FROM Anagrafica";
6   $risultati = mysql_query($interrogazione,$connessione);
7   
8   while($riga = mysql_fetch_array($risultati)) {
9       echo $nome = $riga['nome']." ";
10     echo $cognome $riga['conome'].", ";
11     echo $indirizzo = $riga['indirizzo']."<br>";
12     }
13
14
15 ?>

Nella riga 8 è stato creato un ciclo while che scorre il contenuto del resultset finchè esso non restituisce false, e manda in output tutte le righe della tabella.

Immaginando che in Anagrafica esistano quattri righe, l'output sarà qualcosa del tipo:

Mario Rossi, via del popolo 1
Giuseppe Verdi, via dell'alleanza 10
Pino Campagna, via d'Azeglio 5/C
Giuseppe Bianchi, rione Santa Margherita

Un ultima funzione utile che vi segnalo serve a contare quante righe restituisce il resultset della query:

1  <?php
2  
3  include("accessodb.php");
4  
5  $interrogazione = "SELECT * FROM Anagrafica";
6  $risultati = mysql_query($interrogazione,$connessione);
7  $num = mysql_num_rows($risultati);
8  
9  ?>


Nella riga 7 è stata chiamata la funzione mysql_num_rows che accetta come parametro il resultset $risultati e mette dentro la variabile $num il numero di righe restituite dalla query.

Penso di avervi fornito abbastanza spunti per iniziare a sperimentare l'utilizzo congiunto di Php e Mysql. Per interrogazioni a database che effettuano operazioni di UPDATE o di DELETE di uno o più record, basta modificare la query all'interno della variabile stringa $interrogazione.

Stay tuned!

Parametri Php per la connessione al database MySql

Salve a tutti!
Oggi spiegherò come porre le basi per la costruzione di un'applicazione web che si interfacci con un database.

In questo articolo verranno utilizzati il linguaggio php e il database MySql. La soluzione presentata vale sia per un utilizzo in locale, mediante l'utilizzo del pacchetto XAMPP

Innanzitutto dobbiamo creare un file di connessione che conterrà le impostazioni di collegamento al database come il percorso, il nome utente e la password. Creeremo quindi un file chiamato "accessodb.php" che avrà il seguente codice:

1   <?php
3   $server = "localhost";
4   $utente = "user";
5   $passw  = "pass";
6
7   $database = "my_database_name";
8   $connessione = @mysql_connect($server, $utente, $passw);
9   $db = mysql_select_db($database, $connessione);
10 
11 ?>

La stringa $server servirà a redirigere le nostre query al motore di database che potrà essere installato sul nostro pc - in tal caso và bene scrivere localhost oppure l'indirizzo ip 127.0.0.1 - oppure in remoto, per connettersi al quale bisognerà 
specificare il nome del server (hostingmysql.register.it, server database fornito dal domain provider register.it) o il suo indirizzo ip (91.38.117.015 puramente esemplificativo).

Per quanto riguarda le righe 3 e 4 andranno compilate con le credenziali di accesso al database mentre nella 7 andrà inserito il nome del database a cui vorremo connetterci.


Le restanti righe invece serviranno nei nostri script in php per l'esecuzione  delle query e per poterne leggere i risultati. Nel prossimo articolo farò qualche esempio di esecuzione di query e sull'estrazione dei risultati.


Stay tuned!

mercoledì 1 agosto 2012

Introduzione

Eccomi lanciato in questa nuova avventura! :)
È da molto tempo che voglio dare un contributo personale alla gia smisurata documentazione che esiste su internet relativa al mondo della programmazione.
In particolare illustrerò le mie personali soluzioni a problematiche all'apparenza semplici ma che su internet non trovano una rapida e immediata risposta.
Ritengo che tutti abbiamo sempre bisogno di imparare qualcosa e che il mio personale percorso di apprendimento nel mondo dell'informatica sia appena agli albori, per cui non spaccerò mai le mie soluzioni come ottime o efficaci al 100% bensì solo sicuramente funzionanti negli ambiti in cui ho avuto bisogno di implementarle.
Un grosso benvenuto a tutti!