Non riesco a cambiare l'immagine di sfondo

Stato
Chiusa ad ulteriori risposte.

Roberto_V

Nuovo Utente
29 Giu 2020
7
0
1
Buona sera a tutti
Mi chiamo Roberto_V, Sono un pensionato con la passione dell'informatica e, spesso, mi diletto a creare piccoli programmai più che altro per solo divertimento personale che, però metto a disposizione di chi li vuole usare.
In questi giorni sto completando un piccolo programma di archivio dei dati personale e documenti che tutti i giorni ci troviamo per casa (bollette, e quant'altro)
Mi sono incartato inun problema che non riesco a risolvere.
Voglio dare ad ogni utente la possibilità di gestirsi in proprio le immagini di sfondo e i colori di sfondo delle videate. Il problema arriva quando decido di cambiare l'immagine di sfondo.
In questo caso la nuova immagine arriva regolarmente in un'apposita directory del sito ma il programma, benchè la individui, non la carica in quanto si chiama come la precedente e per questo il sistema preferisce l'immagine registrata nella cache del browser e non carica la nuova.
Come posso fare per far si che se l'utente cambia lo sfondo questo venga subito utilizzato?
Grazie per l'aiuito.lo script della testa della pagine, comune a tutte le pagine del programma è il seguente:

$testa = "
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">
<HTML>
<HEAD>
<TITLE>$vr_vengo personale</TITLE>
$scritti
<link rel=\"icon\" href=\"$vr_ico\" type=\"image/gif\" />
</HEAD>
<body bgcolor = \"#00ffff\" background = \"img/$vr_sfondo\">
La variabile "$vr_sfondo" richiama l'immagine di sfondo che si trova nella directory img/
Col comando apposito l'immagine cambia continuando a chiamarsi nello stesso modo (es: "VR_1.JPG " ma quando lo script la va a leggere mi presente l'immagine precedente.
Grazie per quello che potrete fare


";
 

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.280
330
83
Da regolamento del forum, come tutti noi sei tenuto ad usare il tag
PHP (2).png
quando posti del codice php, oppure la funzione codice dalla barra degli strument
box inserisci.png

Inoltre IMPORTANTE: Prima di creare una nuova discussione o di rispondere alle discussioni esistenti ricordati di leggere attentamente il Regolamento del Forum e l'eventuale regolamento specifico della sezione!

Grazie

Usa i tag per il futuro
mi raccomando altrimenti sarò costretto a cancellare le discussioni
 

MarcoGrazia

Utente Attivo
15 Dic 2009
785
16
18
58
Udine
www.stilisticamente.com
Immagine di sfondo
Caro Roberto, intanto auguri per la tua pensione, ad arrivarci per noi del '61 che ancora siamo al lavoro... detto ciò veniamo al dunque.
Come hai detto tu stessoil problema è la cache e si risolve banalmente come ho già suggerito ad altri qui dentro.
Vedo che passi il "listato" dopo averlo processato col PHP e quindi può diventare ancora più semplice.
Non so com'è il resto del tuo script ma posso ipotizzare che $testa vada a formare un insieme di variabili che unite formino la pagina, ad un certo punto questa viene unita ad altri pezzi ( vado di immaginazione dato che non fornisci altri dati ) tipo $corpo e $piede a fornire l'intera pagina.
Quindi intanto ti consiglio in questi casi di non usare le visrgolette per un costrutto così complesso ma l'heredoc che lascia più discrezionalità e semplicità costruttive, quindi il tuo frammento di codice diventa:
PHP:
$random = mt_rand();
$testa =<<<TESTA
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">
<HTML lang="it">
<HEAD>
<TITLE>$vr_vengo personale</TITLE>
$scritti
<link rel="icon" href="$vr_ico"  type="image/gif">
</HEAD>
<body bgcolor = "#00ffff"  background = "img/VR_1.JPG?v=$random">
TESTA;
i marcatori <<< e il nome mnemonico in apertura e chiusura portano lo spezzone di codice formattato così come lo scriveresti in un qualsiasi editor di testo.
Quindi via i backslash di escape e tutto diventa più bello :D
Ora viene il bello, intanto se l'immagine si chiama sempre allo stesso modo, potresti tranquillamente metterla scritta col suo nome, invece di utilizzare una variabile, questa diventa inutile, poi il tutto ti permette di realizzare un "giochino" che ingannerà la cache del browser.
Cioè mettere un query string sull'immagine con un numero che cambierà ogni volta che aggiorni la pagina, facendo credere al browser, e quindi al meccanismo di caching, che lì qualcosa è cambiato, e quindi va nuovamente scaricato dal server.

Un'altra strada è quella di generare l'header per il protoccolo, solitamente ci pensa il PHP ma gli header si possono modificare a piacimento, quindi prima di inviare l'intera pagina, immagino con echo $testa . $corpo . $piede; mandi un header con un data di Exipired nel passato, ad esempio:
PHP:
header( 'Expires: Thu, 01-Jan-70 00:00:01 GMT' ); // data nel passato
echo $testa . $corpo . $piede;
A questo punto non hai più bisogno del query string sull'immagine e nemmeno di generare un codice random.
 
  • Like
Reactions: Roberto_V

Roberto_V

Nuovo Utente
29 Giu 2020
7
0
1
Caro Roberto, intanto auguri per la tua pensione, ad arrivarci per noi del '61 che ancora siamo al lavoro... detto ciò veniamo al dunque.
Come hai detto tu stessoil problema è la cache e si risolve banalmente come ho già suggerito ad altri qui dentro.
Vedo che passi il "listato" dopo averlo processato col PHP e quindi può diventare ancora più semplice.
Non so com'è il resto del tuo script ma posso ipotizzare che $testa vada a formare un insieme di variabili che unite formino la pagina, ad un certo punto questa viene unita ad altri pezzi ( vado di immaginazione dato che non fornisci altri dati ) tipo $corpo e $piede a fornire l'intera pagina.
Quindi intanto ti consiglio in questi casi di non usare le visrgolette per un costrutto così complesso ma l'heredoc che lascia più discrezionalità e semplicità costruttive, quindi il tuo frammento di codice diventa:
PHP:
$random = mt_rand();
$testa =<<<TESTA
<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">
<HTML lang="it">
<HEAD>
<TITLE>$vr_vengo personale</TITLE>
$scritti
<link rel="icon" href="$vr_ico"  type="image/gif">
</HEAD>
<body bgcolor = "#00ffff"  background = "img/VR_1.JPG?v=$random">
TESTA;
i marcatori <<< e il nome mnemonico in apertura e chiusura portano lo spezzone di codice formattato così come lo scriveresti in un qualsiasi editor di testo.
Quindi via i backslash di escape e tutto diventa più bello :D
Ora viene il bello, intanto se l'immagine si chiama sempre allo stesso modo, potresti tranquillamente metterla scritta col suo nome, invece di utilizzare una variabile, questa diventa inutile, poi il tutto ti permette di realizzare un "giochino" che ingannerà la cache del browser.
Cioè mettere un query string sull'immagine con un numero che cambierà ogni volta che aggiorni la pagina, facendo credere al browser, e quindi al meccanismo di caching, che lì qualcosa è cambiato, e quindi va nuovamente scaricato dal server.

Un'altra strada è quella di generare l'header per il protoccolo, solitamente ci pensa il PHP ma gli header si possono modificare a piacimento, quindi prima di inviare l'intera pagina, immagino con echo $testa . $corpo . $piede; mandi un header con un data di Exipired nel passato, ad esempio:
PHP:
header( 'Expires: Thu, 01-Jan-70 00:00:01 GMT' ); // data nel passato
echo $testa . $corpo . $piede;
A questo punto non hai più bisogno del query string sull'immagine e nemmeno di generare un codice random.

Intanto grazie per l'augurio della pensione poi veniamo al dunque:
Il effetti la variabile che indica il nome dell'immagine di sfondo è comporta da una parola (VR) e da un numero che altri non è che numero id della tabella che contiene gli utenti i quali, in teoria,, possono essere una quantità e ognuno scegliersi un'immagine di sfondo diversa.
Avevo pensato anch'io a quall'header ma non riuscivo a capire bene dove piazzarlo.
Se ho capito bene lo devo piazzare prima della stampa vera e propria della pagine html formata dalla combinazioni delle variabili $tresta.$corpo e $coda.
Sbaglio?

Grazie infinite per la dritta
 

Roberto_V

Nuovo Utente
29 Giu 2020
7
0
1
Intanto grazie per l'augurio della pensione poi veniamo al dunque:
Il effetti la variabile che indica il nome dell'immagine di sfondo è comporta da una parola (VR) e da un numero che altri non è che numero id della tabella che contiene gli utenti i quali, in teoria,, possono essere una quantità e ognuno scegliersi un'immagine di sfondo diversa.
Avevo pensato anch'io a quall'header ma non riuscivo a capire bene dove piazzarlo.
Se ho capito bene lo devo piazzare prima della stampa vera e propria della pagine html formata dalla combinazioni delle variabili $tresta.$corpo e $coda.
Sbaglio?

Grazie infinite per la dritta
Colevo dire $testa.$corpo.coda!
 
Stato
Chiusa ad ulteriori risposte.