Bonjour,

Je travaille sur la modification d'images à partir d'une page d'administration de mon blog.
Lorsque que je fait une erreur (rognement de 500 pixels alors que l'image fait 300 pixels de longueurs), le formulaire se réinitialise.
Par exemple, la donnée 500 à disparut de l'input. Pareil lorsque je l'envoi sur mon serveur.
Or, lorsque l'utilisateur télécharge cette image, toutes les données du forme sont encore là après envoi (filtres, etc...).
Pourtant, j'ai mis pleins de exit() et de header.
D'abord l'image est traiter sur une page puis l'utilisateur est renvoyé sur telecharger-l'image.php puis à nouveau redirigé sur modifier-blog.php.
Voici le code de telecharger-l'image.php qui poserait problème :
if (file_exists($name)) {
		$_SESSION['reponse-traitement_blog-billet'] = '<span class="valide">L\'image a bien été téléchargé sur votre appareil.</span>';
		header('Content-Description: File Transfer');
		header('Content-Type: application/octet-stream');
		header('Content-Disposition: attachment; filename=' . basename($name));
		header('Content-Transfer-Encoding: binary');
		header('Expires: 0');
		header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
		header('Pragma: public');
		header('Content-Length: ' . filesize($name));
		readfile($name);
		exit;
	}
	else{
		$_SESSION['reponse-traitement_blog-billet'] = '<span class="invalide">Une erreur est survenue lors du téléchargement de l\'image. Si le problème persiste, veuillez contactez l\'administrateur du site.</span>';
	}
	header('Location:'.$referer);
	exit();


De plus, j'ai un problème de format d'images :
upload/1621975462-82357-capture.png
En effet, ce sont 2 png qui sont collés avec imagecopymerge() et le fond transparent est noir.
Dernier petit problème, comment connaître les dimensions d'une image lors de leur sélection ?
J'ai vu qu'OpenClassrooms avait réussi.
Merci pour votre aide !
Modérateur
Salut !

Pour ton premier soucis :
Comme tu le sait PHP est un langage serveur du coup quand tu envoie ton formulaire ca reviens coté serveur et, peut importe l'issue de la validation ca recharge ta page. le client ets obligé de se recharger avec cette méthode. Pour palier à ca je vois deux piste :
- AJAX : lancer du PHP via Javascript pour valider un formulaire sans recharger la page
- initialiser ton formulaire : dans le code html du formulaire tu peux rajouter des bout de php pour remettre les valeurs qui avaient été rentrée au moment de l'envoi. Ca réinitialise la page mais ca remettra les données envoyées dans les inputs.

J'espère que j'ai pas répondu à coté de la plaque je reviens de vacance et j'ai pris qu'un café ! Smiley lol


Pour le second je n'ai aucune piste dsl.

Bonne journée !
Salut,
Merci beaucoup pour ta réponse.
Pour le problème n•2, ça doit être un bug de la fonction ou de mon code que je vais revérifier.
Pour le problème n•1, enfaite mon but est de faire l'inverse.
De recharger la page et de tout réinitialiser.
Or, je ne sais pas pourquoi, que lorsque je fais télécharger l'image sur l'appareil de l'utilisateur, les données du formulaire reste.
Et sinon, comment connaître les dimensions d'une image sélectionné ?
Je crois que c'est en javascript et que je ne suis pas dans le bon forum...
Au fait, vos émojis, ils sont à vous, vous les avez pris sur internet, ils sont libres de droits ?
Merci beaucoup ! Smiley tusors (émoji super drôle)
Modérateur
Ah bah voila, tout a coté de la plaque ! J'aurais mieux fait de reprendre un café Smiley biggol
Mais du coup, comment sont codé tes inputs et ton formulaire ? Tu peux nous en montrer un peu plus sur ton code ? Il y a peut être déjà du code pour initialiser les input avec les réponses envoyées comme je l'ai suggéré...

Louis_9876 a écrit :
Et sinon, comment connaître les dimensions d'une image sélectionné ?

Après une recherche Google je dirais getimagesize()
https://www.php.net/manual/fr/function.getimagesize.php mais tout dépend coment tu as codé le truc...

Louis_9876 a écrit :
Je crois que c'est en javascript et que je ne suis pas dans le bon forum...
Si tu l'affiches tu peux regarder en Js oui mais si c'est pour de la validation avant de l'enregistrer (pour pas qu'elle soit trop grande ou petite) il vaut mieux garder ca coté php je pense.

Louis_9876 a écrit :
Au fait, vos émojis, ils sont à vous, vous les avez pris sur internet, ils sont libres de droits ?
Aucune idée... faudrait demander aux créateurs Smiley biggrin (je les adore ca me rappelle ma jeunesse sur MSN et autre Smiley lol )

Bonne journée
Pour les dimensions, ce serait côté client, juste pour qu'il connaisse les dimensions de son fichier lors de sa sélection, j'ai déjà fait tout le côté serveur.

Voici un extrait du code de mon formulaire :
<script>function addBalises(idTextarea, baliseOpen, baliseClose)
{
	document.getElementById('contenu').value = $(idTextarea).val();
}
</script>
<div style="text-align:center;margin-top: 0.5rem;margin-bottom: 0.5rem;"><button type="button" class="bouton-bbcode2" onclick="display_none_block('derouler_ajouter_image_blog')">Ajouter une image</button></div>
     <div id="derouler_ajouter_image_blog">
	      <form method="POST" action="blog_image_post" enctype="multipart/form-data" id="form-modif" class="form-basique">
	      <p><input type="file" name="monfichier" class="bouton_fichier" style="padding-bottom: 0.5rem;border-bottom: groove;"/></p>
            
     <div><input type="checkbox" name="enregistrement_local" id="enregistrement_local" class="bouton_form"><label for="enregistrement_local">Téléchargez l'image sur votre appareil</label></div>
			<input type="hidden" name="titre" id="titre" value="<?php if (!empty($_SESSION['titre'])) {echo $_SESSION['titre'];} ?>">
			<input type="hidden" name="contenu" id="contenu" value="<?php if (!empty($_SESSION['contenu'])) {echo $_SESSION['contenu'];} ?>">
		  <input type="submit" name="submit" class="submit" onclick="addBalises('#copier-contenu', '')" value="Envoyer"/>
		</form>

En gros, c'est le début et la fin de mon formulaire.
A l'intérieur, il y a des inputs type checkbox et des divs.
Merci
Modifié par Louis_9876 (27 May 2021 - 12:09)
Modérateur
Salut !

Et bah rien que sur les input :
<input type="hidden" name="titre" id="titre" value="<?php if (!empty($_SESSION['titre'])) {echo $_SESSION['titre'];} ?>">

dans value tu as un code php qui va le remplir si la valeur n'est pas empty ( if not empty echo ). Il faut soit tout virer soit rajouter la condition que si c'est bien parti et bien ca ne met rien.

Pour la taille d'une image en JS je dirais naturalWidth et naturalHeight https://www.w3schools.com/jsref/prop_img_naturalwidth.asp je n'ai jamais utilisé mais ca doit répondre au besoin... https://caniuse.com/img-naturalwidth-naturalheight
Modifié par _laurent (28 May 2021 - 14:21)
Salut,
Ce formulaire est celui de ajouter-blog.php.
Il n'y a que sur ces deux inputs que j'écris les sessions pour sauvegarder le contenu du billet.
Copy en javascript du contenu du billet sur les 2 inputs.
Mais à pars ceci, je n'ai aucun echo $_SESSION dans mes inputs.
Merci
Bon, c'est sûrement un bug.
Pour la largeur et la longueur d'une image, ça marche, mais pas lors de sa sélection dans un input, car c'est impossible.
Merci