Javascript e PHP: inviare variabili POST tramite scrittura dinamica del codice

Siccome ho implementato il contatore PHP che (se avete letto) utilizza un variabile POST per decidere se aumentarsi o no, ho avuto anche la necessità di trovare un modo per poter inserire dei link interni che mi inviasse la variabile POST che mi serviva.

Siccome ciò non avviene in modo esplicito tramite una query string (sarebbero variabili GET), non posso inserire i valori nell’attributo href del link.
Dopo un po’ di ricerche ho trovato una buona idea: inviare i dati utilizzando una form (nascosta) contenente le variabili da inviare, generando il submit tramite Javascript inserendo il codice nell’evento OnClick del link.


<form method="post" name="data_form" action="index.php">
	<!-- variabile per il contatore -->
	<input type="hidden" name="increase_counter" value="no" />
	<!-- variabile per la pagina da caricare -->
	<input type="hidden" name="p" value="pagina3" />
</form>
<!-- al click sul link, invio i dati della form (che ha metodo POST) -->
<!-- 'return false;' serve per "fermare" il link, che altrimenti, dopo l'esecuzione del codice in OnClick -->
<!-- cercherebbe di andare al documento pagina3, generando ovviamente un errore 404 -->
<a href="pagina3" onclick="document.data_form.submit(); return false;">Vai a pagina 3</a>

Ora però, nonostante il tutto funzionasse, mi trovavo a dover scrivere tutto il codice di una form ogni volta che inserivo un link. Ho quindi scritto una funzione che, prima di inviare il form, impostasse il giusto valore alle variabili a seconda dell’attributo href del link. In questo modo, utilizzo una sola form per tutti i link, con un bel risparmio di codice!


<!-- Nell'head della pagina, inserisco questo tag script: -->
<script language="javascript" type="text/javascript">
//la funzione ha un unico parametro, link_object, che viene passato usando 'this'
//questa rappresenta il link che è stato cliccato
function go_link (link_object) {
	//siccome ai link relativi viene aggiunto automaticamente l'url completo, lo tolgo
	document.data_form.p.value = link_object.href.replace("http://www.example.net/", "");
	document.data_form.submit();
}
</script>
....
....
<!-- All'inizio del body -->
<form method="post" name="data_form" action="index.php">
	<input type="hidden" name="increase_counter" value="no" />
	<input type="hidden" name="p" value="" />
</form>
....
....
<!-- Un link diventa quindi: -->
<a href="pagina3" onclick="go_link(this); return false;">Vai a pagina 3</a>

Una volta completata anche questa operazione, e mentre mi stavo approcciando a farlo in tutte le altre pagine, mi son detto: perchè non implementarlo nel motore PHP?
Così ho aggiunto il codice Javascript una volta sola per tutte le pagine (lo inserisce infatti la pagina PHP) e ho aggiunto una ulteriore funzione che al caricarsi della pagina aggiunge ai link interni (escludendo ancore e link esterni) l’attributo onload che richiama la funzione go_link()
In questo modo ho semplificato enormemente la cosa: riesco a lavorare in background (usando le variabili POST), senza dover riscrivere lo stesso codice per ogni link, grazie a Javascript.


<head>
<script language="javascript" type="text/javascript">
function insert_links_attributes () {
	//grazie all'array links, ho tutti i link contenuti nella pagina
	for (n in document.links) {
		//modifico il link solo se è interno (contiene quindi l'url del mio sito nell'attributo href
		//oppure se è un ancora (link a un punto diverso della stessa pagina, contraddistinto dal carattere #
		if ((document.links[n].href.indexOf("http://www.example.net/") != -1) && (document.links[n].href.indexOf("#") == -1)) {
	 		document.links[n].setAttribute("onclick", "go_link\(this\)\; return false\;", 0);
	 	}
	}
}
</script>
</head>
<!-- Chiamo la funzione insert_links_attributes una volta completato il caricamento della pagina -->
<body onload="insert_links_attributes();">

Contatore visite in PHP

Per il sito della mia classe (che sto ora rinnovando aggiungendo un motore PHP) ho sviluppato un contatore utenti in PHP, che mi conti solamente le visite da link esterni.

Il suo funzionamento è molto semplice: si basa su un file counter.txt che contiene il numero di utenti che hanno visitato la pagina. Se la pagina viene aperta da un link esterno, aumenta il contatore di 1, altrimenti, se si è giunti lì da un link all’interno del sito, mostra solamente il valore attuale del contatore. I numeri sono scritti con immagini prese da un contatore di Altervista (quello che ho dovuto sostituire, almeno così non si nota u.u), che potete scaricare da qui in un pacchetto ZIP.

Ecco qua il codice:

<?php
//nome del file con il valore del contatore
$file_name = 'Pages/counter.txt';
//controllo se devo aumentare il contatore
//ossia se provengo da un link esterno e non interno
//per fare ciò controllo se mi è stata passata la variabile increase_counter
//che invio in POST dai form del menu
if (empty($_POST['increase_counter'])) {
        $can_access = false;
        //ciclo finchè non riesco ad avere accesso al file
        //ciò perchè successivamente lo elimino, e in caso di due interrogazioni simultanee della pagina
        //potrebbe darsi che non trovando il file, ne crei uno nuovo e faccia ripartire il contatore da 0
        while (!$can_access) {
                if (file_exists($file_name)) {
                        //una volta avuto accesso al file, ne metto il contenuto in $count e l'aumento di 1
                        $counter_file = fopen($file_name, r);
                        $count = fread($counter_file, filesize($file_name));
                        fclose($counter_file);
                        $can_access = true;
                }
        }
        //elimino il file
        unlink($counter_file);
        //lo ricreo e lo apro in scrittura
        $counter_file = fopen($file_name, w);
        //e lo ci scrivo il nuovo valore aumentato di 1
        fwrite($counter_file, $count);
        fclose($counter_file);
} else {
        $can_access = false;
        //altrimenti, se provengo da un link interno, visualizzo l'attuale valore
        //in counter.txt
        while (!$can_access) {
                if (file_exists($file_name)) {
                        //una volta avuto accesso al file, ne metto il contenuto in $count
                        $counter_file = fopen($file_name, r);
                        $count = fread($counter_file, filesize($file_name));
                        fclose($counter_file);
                        $can_access = true;
                }
        }
}
//ottengo l'array dei caratteri che formano il numero
$count_chars = str_split($count);
//aggiungo degli 0 davanti al numero per portarlo a 7 cifre
for ($n = count($count_chars); $n < 7; $n++) {
        array_unshift($count_chars, "0");
}
//inserisco le immagini corrispondenti per ogni cifra
foreach ($count_chars as $number) {
        echo "<img src=\"/Immagini/Counter/" . $number . ".gif\" />";
}
?>

La variabile increase_counter la passo tramite il menu del sito, composto da form. Il codice di un pulsante, ad esempio, è questo:

<!-- Il form ha come metodo POST: le informazioni dei campi contenuti in esso saranno passate alla pagina
nell'attributo action, ma a differenza di GET, che le passa esplicitamente nella query della pagina, POST le immette in un array nascosto all'utente ma accessibile dal codice PHP presente nella pagina -->
<form action="index.php" method="POST">
        <!-- Pulsante vero e proprio che l'utente vede -->
        <input type="submit" value="Home" />
        <!-- Campo nascosto  increase_counter a cui assegno un valore (qualunque, l'importante che l'abbia -->
        <input type="hidden" name="increase_counter" value="no" />
</form>

Basterà preoccuparsi di passare increase_counter nei link interni al sito.
Si potrebbe anche utilizzare GET e quindi renderne il passaggio esplicito, visto che non sono private e necessariamente da nascondere, e ciò renderebbe più facile inserire i link

Piantagioni di marijuana in Giappone, assorbiranno le radiazioni

Girasoli e cannabis: secondo il sito web francese Alchimia Web – che probabilmente approfitta per farsi un po’ di pubblicità – basterebbe trasformare le zone del Giappone contaminate dalle radiazioni in piantagioni di marijuana (o girasoli) per assorbire gli isotopi pericolosi, come il cesio 137 e lo stronzio 90, fino all’80%.

Secondo il quotidiano Le Parisien, che ha intervistato alcuni ricercatori, è possibile anche usare la colza, che poi potrebbe ancora essere utilizzata per produrre biodiesel;  la cannabis andrebbe invece incenerita in apposite strutture in grado di gestire le ceneri radioattive

Fonte: www.zeusnews.com   –   link

Immagino già un pellegrinaggio globale di fattoni che andranno a respirare “l’aria buona”, specialmente quando inceneriscono la marijuana.

Nuovo album dei Korpiklaani: Ukon Wacka

In ritardo di due mesi sono venuto a conoscenza dell’uscita del nuovo album dei Korpiklaani, Ukon Wacka.
L’ho ascoltato almeno un centinaio di volte, è davvero stupendo. Tutto in finlandese, a dispetto della comprensione dei testi la musica è notevolmente migliorata rispetto all’album precedente, Karkelo. Fatta bene Tequila, sull’onda di Vodka. Da notare Tuoppi Oltta, splendida intro strumentale, e melodia trascinante.
E la title track, Ukon Wacka, fatta in collaborazione con un altro artista finlandese, fa venire i brividi: profonda e potente, esprime bene la loro vena “sciamanica” con un ritmo lento e scandito dalle chitarre di Jonne e Cane.
Come ultima traccia, c’è inoltre una cover dei Motorhead di Iron Fist, “folkizzata” alla perfezione.
Ecco il link alla playlist contenente tutte le tracce dell’album, in ordine, creata da me

Per chi non conoscesse i Korpiklaani, essi sono un gruppo folk metal finlandese, con all’attivo sei album, più due con il vecchio nome di Shaman.
E ogni album è più bello dell’altro: melodie sempre più affinate, miglioramento del connubio tra il metal e il folk, e l’incredibile capacità di non far stonare una fisarmonica assieme a una chitarra distorta. La voce del cantante, Jonne Jarvela, è magnifica: profonda e potente, sia negli alti che nei bassi, che affronta senza paura.
A lui si affiancano altri cinque membri: la batteria di Johansson, il basso di Aaltonen, la seconda chitarra di Savijärvi (detto “Cane” e brutto come la fame, ma bravo e fedele: è nella la band dalla sua formazione), e i due membri più folk: Lemmetty, con il violino, il flauto, e un particolare strumento finlandese, lo jouhikku, e Kauppinen, che suona con incredibile abilità la fisarmonica.

Stile particolare dei Korpiklaani è la fusione del metal con una danza tipica finlandese, la humppa, ma anche con lo joik, un bellissimo genere di musica che si ispira alla natura.

Vi segnalo qualche loro canzone:
Vaarinpolka, dal loro ultimo album, si può apprezzare la destrezza del fisarmonicista
Suden Joiku, questa canzone è un capolavoro dell joik. Il titolo significa letteralmente “joik del lupo”, fa parte dell’album Korven Kuningas, uno dei più spirituali e, a mio parere, dei migliori.
Palovana, la prima che ho sentito di loro. Fonde splendidamente l’anima folk e metal
Vodka, questa da la carica di brutto! Yeah Vodka!!

Ukon Wacka
La copertina del loro ultimo album, Ukon Wacka

Caparezza – Pimpami La Storia

Grande canzone!

Rispecchia il degrado culturale di adesso… se non sei vestito firmato “sei sfigato”, la scuola è inutile ed è una grande palla.
Forse a scuola dovrebbero insegnare prima di tutto ad amare l’istruzione, a capire che non è una prigione ma un’opportunità per avere un futuro nella società.

Stampanti 3D

PI: Una stampante 3D da ufficio?

Bellissimo questo articolo! Si parla di stampanti che stampano in 3D, utilizzando come inchiostro plastica (o resina) ad asciugatura rapida, e capaci di costruire veri e propri oggetti (con anche parti mobili) da un progetto CAD 3D o tramite il software di progettazione 3D fornito con la stampante.

Mi piacerebbe avere una figata del genere, ma 40 mila dollari è un bel prezzo XP

Fusione nucleare: non è una favola

Stamattina a scuola durante l’ora di matematica, spiegando il quinto postulato di Euclide, la prof ha cominciato a parlare delle geometrie non-euclidee e della loro applicazione nella fisica.
Dopo un’immensa sfilza di castronate direi relativistiche si è arrivati a parlare della fusione nucleare e della sua eventuale riproducibilità per produrre energia elettrica.

Quando la prof ha negato categoricamente la possibilità di fare tutto ciò, mi sono un po’ arrabbiato diciamo e le ho chiesto: e la fusione fredda?

Cos’è la fusione fredda?
La fusione fredda non è altro che un processo di fusione nucleare che avviene basse temperature e pressioni, con un basso dispendio di energia a fronte di un uguale produzione. Esattamente identica a quella che avviene all’interno delle stelle ma a pressioni e temperature enormemente più alte (nel sole avviene a una temperatura di 13 milioni di gradi e a una pressione di 500 miliardi di atmosfere).

E’ stata molto dibattuta la possibilità o meno di eseguire la fusione fredda: tantissimi ci hanno provato con successo, altrettanti senza successo. Ma alcuni esperimenti davvero seri si fa fatica a ignorarli.
In particolare, qui in Italia, a Bologna, due professori di fisica hanno sviluppato un piccolo (ma ben funzionante) reattore a fusione fredda in grado di produrre ben 12 kW di energia con un consumo di soli 400 W:

Un altro ottimo risultato è stato quello di due scienziati giapponesi che hanno ottenuto buoni risultati con un metodo differente. La loro soluzione è però controversa poichè non è stato possibile riprodurlo in altri laboratori.

Ci sono anche tante altre macchine che riescono a sviluppare una reazione di fusione (normale) controllata, tramite potenti campi magnetici che stabilizzano la materia in fusione. In Francia, Inghilterra e Giappone la ricerca in questo campo è piuttosto avanti e i risultati promettenti, ma confrontare questi mastodontici progetti con quelli ben più modesti (ma altrettando produttivi) di reattori a fusione fredda è sconvolgente.
Non è ben più comodo un mini-reattore che sta in una stanza che un gigantesco reattore che sta in un aeroporto?

Ma la vera domanda da farsi sarebbe: perchè in Italia inseguiamo ancora il sogno delle centrali a fissione, pericolose e (a mio parere) irrealizzabili in questo paese, quando abbiamo, anche a casa nostra, delle ben migliori centrali a fusione?
Mistero.

Maiuscole bastarde

Come credo sappiate (probabilmente siete arrivati qui dal link sul blog vecchio) ho trasferito il blog su uno spazio meno costoso, altrimenti non riesco a mantenerlo.

Ho quindi creato un nuovo sito su Altervista utilizzando l’opzione AlterBlog: meno flessibile dell’altersito, ma almeno è gratis 😀
Creato il nuovo AlterBlog, mi accingo a esportare il vecchio nel nuovo spazio web e sono felicemente sorpreso quando mi accorgo della fantastica opzione “Importa blog” che mi permette di importare un blog WordPress già esistente.
Dunque faccio “Importa blog” e mi appare la schermata per inserire URL del blog da importare e credenziali d’accesso dell’amministratore del blog. Entusiasta compilo i campi, clicco su Importa e….

Errore: nessun blog esistente all’indirizzo http://dowsplay.altervista.org/blog/

Armandomi di pazienza, ho riprovato, guardando bene di non fare errori a scrivere l’indirizzo, ma prova e riprova continuava a darmi errore. Così ho deciso di seguire il consiglio che il messaggio d’errore riportava:

….se l’errore persiste, contattaci sul forum.

Vado quindi sul forum di Altervista, faccio per aprire una nuova discussione, e mi viene chiesto di riautenticarmi (per almeno la dodicesima volta). Metto account e password, confermo e.. ta-dah!

Nome utente o password errati

E daie a riprovare finchè non mi sono rotto l’anima e mi sono collegato con l’altro account e aperta la discussione, ho scoperto che lo strumento per importare i blog accettava solo URL con tutte le lettere minuscole e quindi mi fallava sempre. Un moderatore particolarmente efficiente, fixando l’importatore, mi ha poi permesso di importare il blog.

Tutto per una maiuscola