Spesso su questo forum leggo messaggi di utenti che fanno ancora molta, molta confusione sul funzionamento di base del sistema client-server, che è il concetto sul quale si basa PHP essendo un linguaggio lato server. Consiglio vivamente a chiunque sia ancora agli inizi con la programmazione PHP, di studiare bene PRIMA i concetti basilari del funzionamento, e DOPO il linguaggio vero e proprio. Altrimenti questo tipo di confusioni continueranno ad esistere.
Il funzionamento, generalmente, si basa su un client (il browser dell'utente) che invia una richiesta ad un server sul quale risiede del software in grado di elaborare quella richiesta. La richiesta è, ad esempio, la visualizzazione di una particolare pagina di un sito.
Il server riceve la richiesta inviata dal client, e la elabora per produrre dei risultati. Questa elaborazione avviene solo ed esclusivamente sul server, ed i risultati prodotti sono (in genere) costituiti da un blocco di codice HTML, XML, JavaScript o qualunque altro linguaggio che può essere elaborato da un browser. Questo blocco di codice viene quindi inviato al client, e rappresenta la risposta del server alla richiesta effettuata dal client.
L'utente così visualizza sul browser la pagina che ha richiesto.
E' fondamentale notare che il software lato server (PHP appartiene a questa categoria) può "interagire" col software lato client (browser ed interprete JavaScript) perchè è lui che produce il codice che dovrà essere letto dal client. PHP produce una risposta contenente ad esempio HTML e JavaScript, e può ad esempio inserire del testo particolare all'interno del HTML e può assegnare ad una variabile JavaScript un particolare valore.
Ma non è possibile il contrario. Il software lato client (JavaScript e HTML) non può interagire con quello lato server, da questo punto di vista non c'è nessun collegamento diretto che va dal client al server. L'unico modo in cui il client può interagire col server è quello di "compiere un'azione", cioè ad esempio visualizzare un'altra pagina.
Quello che chiedi tu, quindi non è fattibile in modo diretto perchè stai cercando di assegnare ad una variabile PHP (che viene eseguito sul server) un valore prodotto da una funzione JavaScript (che viene eseguito sul client, DOPO l'esecuzione lato server del PHP).
L'unico modo per fare quello che chiedi è "compiere un'altra azione", cioè richiedere un'altra pagina. Che si traduce in questo caso come fare un redirect automatico passando alla pagina un valore ad esempio come query string (cioè appeso all'URL della pagina, che poi verrà letto come $_GET['nome_campo'] dal PHP eseguito al momento della richiesta di questa nuova pagina, dopo il redirect).
Altra cosa, questo redirect NON deve essere fatto tramite PHP ma tramite JavaScript perchè la produzione di quel valore (calcolato da una funzione JS) viene fatta lato client, quindi anche il redirect all'URL contenente quel valore deve essere fatta lato client.
Dopo aver calcolato il valore con la tua funzione JavaScript, puoi mettere un'istruzione come questa per dire all'interprete JS di fare un redirect alla stessa pagina passandole il valore nell'URL:
codice:
window.location = 'pagina.php?val=' + valore_javascript;
A questo punto, appena il server riceverà questa nuova richiesta potrà elaborare il valore passatogli. Da PHP devi quindi leggere quel valore con:
Codice PHP:
$valore_php = $_GET['val'];
Trovavo doverose queste precisazioni, visto che sono la base del funzionamento di un sito web scritto in PHP.