Blupixel IT Blog – Articoli e Tutorial Informatica e Programmazione

Blog ufficiale di Blupixel IT Srl

Conteggio alla rovescia con Javascript

Per eseguire una qualche operazione in javascript dopo un certo periodo di tempo, magari visualizzando a schermo un contatore che segnala tra quanti secondi avverrà l’evento, creare un elemento HTML come segue:

<div>
La finestra si chiuderà tra
<span id=”conteggio_chiusura”>10</span>
secondi
</div>

 

quindi aggiungere nella pagina questo script

<script type=”text/javascript”>
    // Seleziono l’elemento nella pagina con attributo id = “conteggio_chiusura”
    var element=document.getElementById(‘conteggio_chiusura’);

    // traduco il contenuto dell’elemento selezionato in un intero equivalente in secondi
    var time = parseInt(element.innerHTML);

    // eseguo la funzione che procede alla riduzione del conteggio
    var timer = setInterval(function(){
        if( time ){
            element.innerHTML = –time;
        } else {
            clearInterval(timer);
            window.close();
        }
    }, 1000);
</script>

 

Le prime due istruzioni sono abbastanza intuitive.
Per quanto riguarda, invece l’ultimo comando la funzione non fa altro che eseguire ogni 1000 msec, ovvero 1 secondo, la funzione definita. La funziona esegue quanto segue:
- controlla se il valore dei secondi segnati nel blocco di codice html è diverso da 0
- se è diverso da zero lo riduce di 1 (—time) e lo stampa all’interno dell’html al posto del numero precedente (element.innerHTML = …)
- se è uguale a 0 (quindi è falso) elimina l’istanza del setInterval impostato in modo che non venga più eseguito (clearInterval(timer)) e chiude la finestra corrente (window.close())

Naturalmente il numero di secondi da cui iniziare si setta direttamente nel codice HTML mettendolo al posto del 10 e al posto della chiusura della finestra si può decidere di impostare un qualsiasi comando.

A presto

Creare un XML da un array in PHP

Da un array come questo:

Array( [Articoli] =>
                    Array('Articolo' =>
                             Array( [Titolo] => 'Questo è il primo titolo',
                                    [Testo] => 'Questo è il primo testo'
                                  ),
                          ),
                    Array('Articolo' =>
                             Array( [Titolo] => 'Questo è il secondo titolo',
                                    [Testo] => 'Questo è il secondo testo'
                                  ),
                          )
      )

si vuole ottenere un XML così:

<root>
    <Articoli>
        <Articolo>
             <Titolo>
                  Questo è il primo titolo
             </Titolo>
             <Testo>
                  Questo è il primo testo
             </Testo>
        </Articolo>
        <Articolo>
             <Titolo>
                  Questo è il secondo titolo
             </Titolo>
             <Testo>
                  Questo è il secondo testo
             </Testo>
        </Articolo>
    </Articoli>
</root>

 

In sostanza si vogliono trasformare tutte gli indici in un tag e il valore nel suo contenuto.
Allora ecco una funzione semplice che richiede in input:
- $root: Tag della radice, può essere qualunque cosa. Nel nostro esempio potrebbe essere “Giornale”
- $params: è l’array che si vuole trasformare

function arrayToXML($root, $params) {
    $xml = '<' . $root . '>' . "\n";
    foreach ($params as $key => $value) {
        if (!is_numeric($key)) {
            if (is_array($value)) {
                $xml .= arrayToXML($key, $value);
            } else {
                $xml .= "\t" . '<' . $key . '>' . $value . '';
            }
        }
    }
    $xml .= ''."\n";
    return $xml;
}

La funzione è molto semplice. Sostanzialmente crea il tag con l’indice dell’array e mette all’interno il valore.
Se il valore è un array richiama di nuovo sè stessa dando come radice l’indice e valore l’array.

A presto

Selezionare doppioni e duplicati in PostgreSQL mediante l’utilizzo di una query con opzione EXCEPT e DISTINCT ON

PostgreSQL permette l’utilizzo dell’utilissima funzione DISTINCT per selezionare le righe differenti rispetto ad un campo.
Ma come fare per selezionare le righe uguali indipendentemente dalla conoscenza del contenuto del campo?

Vediamo una soluzione:

Supponiamo di avere una tabella anagrafica con persone iscritte più volte utilizzando ad esempio lo stesso numero di telefono.

Vogliamo sapere quali sono le persone duplicate attraverso la conoscenza di questa unica condizione: Le persone duplicate nel databse hanno lo stesso numero di telefono nel campo telefono_1

A questo punto, volessimo selezionare solo le righe senza doppioni nel numero di telefono potremmo semplicemente eseguire la query:

SELECT DISTINCT ON (telefono_1) * FROM anagrafica

In questo modo selezioneremmo dalla tabella anagrafica tutti i campi di tutte le righe i cui numeri di telefono sono diversi.

Volendo invece prendere tutti i campi di tutte le righe con lo stesso numero di telefono dovremo fare:

SELECT * FROM anagrafica EXCEPT SELECT DISTINCT ON (telefono_1) * FROM anagrafica

Con questo comando, infatti, selezioneremo tutte le righe dell’anagrafica ESCLUDENDO (EXCEPT) quelle che contengono numeri di telefono distinti. Quindi selezioneremo solo i doppioni!

Decidendo un ordinamento con l’aggiunta di “ORDER BY …” potremo anche decidere se selezionare come doppione il primo inserito oppure l’ultimo

Alla prossima