Actualisation d'une page avec des images

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Actualisation d'une page avec des images

par Nours312 » 30 avr. 2009, 18:44

Yosh j'ai pas tout compris le truc .

Un rajoutant un "?etc" ca permet de réactualiser le cache image (dire au naviguateur que l'image est différentes ?)

Merci Hawk
Exactement ^^

Et ça fonctionne aussi avec les fichiers JS, CSS, etc...
ce n'est pas plutot le fait que le navigateur crois etre en présence d'une nouvelle image, qu'il va impérativement la recharger ??
ça ne vide pas le cache ...

Le problème, contrairement avec un nom fixe, c'est qu'en présence de grosses images, si il n'y a pas de suppression, d'image, il va lui falloir 3 jours pour voir se page ... c'est une perte inutile ! ne serait-ce que les 20 ou 30 s avec adsl ... et je parle pas de la 3G ...

en traitant le problème autrement, et en évitant de renommer les images ... y aurais pas ces problèmes ...

@+

par thehawk » 30 avr. 2009, 17:29

A okay , je connaissais pas l'astuce.

Merci bien


@jeff24, oublie pas de marqué résolu ton sujet.

par Yosh » 30 avr. 2009, 17:26

Yosh j'ai pas tout compris le truc .

Un rajoutant un "?etc" ca permet de réactualiser le cache image (dire au naviguateur que l'image est différentes ?)

Merci Hawk
Exactement ^^

Et ça fonctionne aussi avec les fichiers JS, CSS, etc...

par thehawk » 30 avr. 2009, 17:25

Yosh j'ai pas tout compris le truc .

Un rajoutant un "?etc" ca permet de réactualiser le cache image (dire au naviguateur que l'image est différentes ?)

Merci Hawk

par Yosh » 30 avr. 2009, 15:36

Merci infiniment Yosh !!!

J'ai rajouté un :
$random = '?'.rand();
puis je mets $random après mon.jpg et ça marche !!
C'est parfait dis donc !!!

Encore merci !
Mais donc un petit Résolu alors et pas de problème, on est la pour ça ^^

par jeff24 » 30 avr. 2009, 11:36

Merci infiniment Yosh !!!

J'ai rajouté un :
$random = '?'.rand();
puis je mets $random après mon.jpg et ça marche !!
C'est parfait dis donc !!!

Encore merci !

par Yosh » 30 avr. 2009, 11:02

Le principe c'est de forcer le navigateur à recharger la photo et pour cela tu va effectivement utiliser un timestamp sur ton image du style

mon_image.jpg?124455764

ou 124455764 est calculé avec un rand ou n'importe quelle autre algo qui te donnera un nombre aléatoire...

par jeff24 » 30 avr. 2009, 10:59

Merci pour ton aide.

J'avais testé que sur Firefox, mais sur IE 8 ça fait la même chose.
En fait j'ai besoin de les renommer pour ma fonction afficher photos sur un autre page, qui affiche les photos en fonction de leur noms. Elle affiche Image 1 puis Image 2 puis Image 3... tant qu'il y'a des images qui existent.
Si il existe image 3 mais pas image 2, la fonction s'arrêtera à deux.
Donc un timestamp ça va être difficile aussi (c'est bien un marquage de temps sur le nom de la photo ?).

par Nours312 » 30 avr. 2009, 10:49

ha ok ... j'avais pas tout compris ... en faite, tu supprime bien les photos au bon moment, mais tu en renomme d'autre avec le nom de celle que tu viens d'effacer ...

Le problèmes est bien un pb de cache ... est-ce que cela te fait la même chose sous tous les navigateurs ? ou juste certains ?

et pourquoi tiens tu a les renommer, tu ne peux pas laisser le nom d'origine, ou un timestamp ?

par jeff24 » 30 avr. 2009, 10:40

Merci pour ta réponse, en fait ma fonction est un formulaire :
<form name="supr_photo" action="supprimer_photo.php" method="POST">
	<div align="left">
	<?php	
	if( file_exists("./images/$pseudo/Image 1.jpg") ) { ?>
		<input type="checkbox" name="option[1]" value="Image 1"> Photo 1
			<?php
			echo "<img src='images/$pseudo/Image 1.jpg' alt='' style='position: relative; top:25px; height:75px'/>";
			} 
[...]
		<button class="Button" type="submit" value="valider" name="ok">
			<span class="btn">								
				<span class="t">
				<img style="position:absolute; top:9px; left:7px " src='images/supprimer.png'/>
				&nbsp
				Supprimer photo(s)
				</span>
				<span class="r"><span></span></span>
				<span class="l"></span>
			</span>
		</button>
	</div>
</form>
J'appelle donc la fonction dans le fichier supprimer_photo.php :
<?php
session_start();
$pseudo = $_SESSION['pseudo'];
if (isset($ok))
{
	foreach ($option as $choix)
	{
		unlink("./images/$pseudo/$choix.jpg");
		$remettre = $remettre + $choix;		
	}
}

$fichier[1]="images/$pseudo/Image 1.jpg";
$fichier[2]="images/$pseudo/Image 2.jpg";
$fichier[3]="images/$pseudo/Image 3.jpg";
$fichier[4]="images/$pseudo/Image 4.jpg";
$fichier[5]="images/$pseudo/Image 5.jpg";
$fichier[6]="images/$pseudo/Image 6.jpg";

// fonction pour renommer les images dans le bon ordre.
for($NumeroFichier=1;$NumeroFichier<6;$NumeroFichier++)
{
	if( !file_exists($fichier[$NumeroFichier]) )
	{
		$x=$NumeroFichier+1;
		
		while( !(file_exists($fichier[$x]) ) && ($x<6) )
			$x++;
		
		if($x<7 && file_exists($fichier[$x]) )
		{
			rename($fichier[$x],$fichier[$NumeroFichier]);
		}
	}
}

// renvoie sur la page où il y'a le formulaire
header("Location:Envoyer-Supprimer_photos.php");

?>
Pourtant je supprime les photos sur une autre page.
Si j'ai bien compris, il faudrait que je mette ma fonction qui affiche les 6 photos après mon bouton supprimer ?
Mais après comment je sais quelle(s) photo(s) il a choisi l'utilisateur pour la supprimer ?

par Nours312 » 30 avr. 2009, 10:32

Salut ::

donc, php est un langage "coté serveur", ce qu'y signifie qu'il ne réagit pas avec ce que fait l'internaute avec son navigateur mais en fonction des pages qui sont appelées et les variables qui leurs sont transmises ! ...

pour etre plus clair ::

comment gères tu la fonction de suppression des images ? la page se recharge-t-elle ? ou envoies-tu une requête ajax au serveur ... ?

Si la page se recharge (avec un formulaire par exemple) il faut traiter la fonction de suppression des images, avant celle en charge de les afficher ..., sinon, au moment ou elles sont supprimées, elles sont déja affichées ....

Si la page ne se recharge pas (traitement de la suppression en JS), soit tu force le rechargement en JavaScript, soit tu les supprimes de l'écran en JavScript, après avoir reçu la confirmation du serveur de leurs réélle suppression ....

Bref, détail un peu plus sur ce qui ce passe concrètement lorsque tu appui sur le bouton supprimer .... !

@++

Actualisation d'une page avec des images

par jeff24 » 30 avr. 2009, 10:07

Bonjour à tous,

Sur mon site web j'ai crée une page qui affiche des photos et sur une autre qui les supprime (en affichant des miniatures).
Quand je supprime ma photo (avec une fonction en php) quand la page est "actualisée" avec le header() à la fin de la fonction php il y'a toujours les anciennes photos qui sont en miniatures sur la page et aussi sur la page qui affiche les photos en grande taille (alors que j'ai cliqué sur une autre page).
Il y'a que quand j'appuie sur F5 (actualiser) que les photos sont correctes (ce remplace par celles supprimé)

Je me suis peut-être mal exprimé donc je vais vous faire une sortie de mini diaporama pour vous montrer ce qu'est ma situation :
D'abord je vais sur ma page où je peux supprimer les photos :
Image

Puis je coche celle que je veux supprimer et je clique sur le bouton Supprimer photo(s)
Image

Ensuite après avoir cliqué, ma fonction me ramène sur la même page, il y'a bien 2 photos en moins, mais c'est pas les bonnes qui s'affichent.
Image

Enfin, j'appuie sur F5 et les bonnes photos s'affichent :
Image


Est-ce que vous connaîtriez une solution pour qu'après avoir supprimé les photos, cela m'affiche directement les bonnes photos.
Les techniques que j'ai essayé qui marche pas :
header("Cache-Control: no-cache, must-revalidate" );
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT" );

header("Expires: 0");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");

header("Pragma: no-cache");

Et une autre où c'est que du HTML, mais je me souviens plus de ce que c'est exactement (c'était <meta ... > )