Conservation d'une variable
Résolu
danielos77
Messages postés
108
Date d'inscription
Statut
Membre
Dernière intervention
-
danielos77 Messages postés 108 Date d'inscription Statut Membre Dernière intervention -
danielos77 Messages postés 108 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'utilise sur une page le code ci-dessous pour permettre le téléchargement de fichiers.
Pour une question pratique à l'exploitation ensuite, je souhaite mettre une épithète au nom du fichier. Celle-ci est en fait la récupération d'une variable précédente $Num qui arrive sur cette page avec la fonction _GET. la transmission de la variable fonctionne et sa présence à l'arrivée est vérifiée.
Mais même si la variable arrive bien, j'ai 2 problèmes { rien que pour ici ;-) }.
1°) Lorsqu'un fichier est envoyé, la variable disparait. Pour la conserver, si je ne dis pas de bêtises, il faut utiliser les sessions. Malheureusement, j'ai l'impression que ma super-variable s'efface quand même puisqu'au rafraichissement de la page elle ne s'affiche pas (ligne 36 ou ligne 20).
2°) La variable ne se concatène pas avec le nom du fichier (ligne 34).
la variable $nom qui s'affiche après l'envoi est juste le nom du fichier sans la variable.
J'ai fait également l'essai au niveau du $fichier_temporaire (ligne 46) mais ça ne fonctionne pas non plus (ce qui ne me surprend qu'à moitié puisque ça serait l'emplacement... et donc pas le nom !).
Ma question est : où placer cette concaténation ?
J'adresse toute ma gratitude et mes remerciements à celui ou celle qui pourra m'aider.
Daniel
--
J'utilise sur une page le code ci-dessous pour permettre le téléchargement de fichiers.
Pour une question pratique à l'exploitation ensuite, je souhaite mettre une épithète au nom du fichier. Celle-ci est en fait la récupération d'une variable précédente $Num qui arrive sur cette page avec la fonction _GET. la transmission de la variable fonctionne et sa présence à l'arrivée est vérifiée.
Mais même si la variable arrive bien, j'ai 2 problèmes { rien que pour ici ;-) }.
1°) Lorsqu'un fichier est envoyé, la variable disparait. Pour la conserver, si je ne dis pas de bêtises, il faut utiliser les sessions. Malheureusement, j'ai l'impression que ma super-variable s'efface quand même puisqu'au rafraichissement de la page elle ne s'affiche pas (ligne 36 ou ligne 20).
2°) La variable ne se concatène pas avec le nom du fichier (ligne 34).
la variable $nom qui s'affiche après l'envoi est juste le nom du fichier sans la variable.
J'ai fait également l'essai au niveau du $fichier_temporaire (ligne 46) mais ça ne fonctionne pas non plus (ce qui ne me surprend qu'à moitié puisque ça serait l'emplacement... et donc pas le nom !).
Ma question est : où placer cette concaténation ?
J'adresse toute ma gratitude et mes remerciements à celui ou celle qui pourra m'aider.
Daniel
<?php /** The Initial Developer of the Original Code is Matthieu - http://www.programmation-facile.com/ Portions created by the Initial Developer are Copyright (C) 2013 the Initial Developer. All Rights Reserved. Contributor(s) : */ // pour garder la variable $Num après envoi d'un fichier session_start(); //On vérifie que $Num est bien là $Num = $_GET['Num']; echo $Num; $_SESSION['Num'] = $Num; echo $_SESSION["Num"]; // Initialisation de la variable de message. $msg = ""; // Traitement du formulaire si il y a un fichier envoyé sur le serveur. if (isset($_POST["valid"])) { // Récupére les informations sur le fichier. $oFileInfos = $_FILES["fichier"]; // nom du fichier. $nom = $_SESSION['Num'].$oFileInfos["name"]; echo $nom; echo $_SESSION['Num']; // le type MIME. $type_mime = $oFileInfos["type"]; // la taille. $taille = $oFileInfos["size"]; // emplacement du fichier temporaire. $fichier_temporaire = $oFileInfos["tmp_name"]; // le code d’erreur. $code_erreur = $oFileInfos["error"]; switch ($code_erreur) { case UPLOAD_ERR_OK : // Fichier bien reçu. // Détermine sa destination finale. $destination = "uploads/$nom"; // Copie le fichier temporaire if (copy($fichier_temporaire,$destination)) { // Copie OK $msg = "<br> Transfert termine - Fichier = $nom - "; $msg .= "Taille = $taille octets - "; $msg .= "Type MIME = $type_mime."; } else { // Problème de copie => message d’erreur. $msg = "Probleme de copie sur le serveur."; } break; case UPLOAD_ERR_NO_FILE : // Pas de fichier saisi. $msg = "Pas de fichier saisi."; break; case UPLOAD_ERR_INI_SIZE : // Taille fichier > upload_max_filesize. $msg = "Fichier ".$nom." non transfere "; $msg .= " (taille > upload_max_filesize)"; break; case UPLOAD_ERR_FORM_SIZE : // Taille fichier > MAX_FILE_SIZE. $msg = "Fichier ".$nom." non transfere "; $msg .= "(taille > MAX_FILE_SIZE)"; $msg .= "<br><font color=red>Votre fichier dépasse la taille autorisée !</font>"; break; case UPLOAD_ERR_PARTIAL : // Fichier partiellement transféré. $msg = "Fichier ".$nom." non transfere "; $msg .= "(problème lors du tranfert)"; break; case UPLOAD_ERR_NO_TMP_DIR : // Pas de répertoire temporaire. $msg = "Fichier ".$nom." non transfere "; $msg .= "(pas de répertoire temporaire)"; break; case UPLOAD_ERR_CANT_WRITE : // Erreur lors de l’écriture du fichier sur disque. $msg = "Fichier ".$nom." non transfere "; $msg .= "(erreur lors de l'écriture du fichier sur le serveur)"; break; case UPLOAD_ERR_EXTENSION : // Transfert stoppé par l’extension. $msg = "Fichier ".$nom." non transfere "; $msg .= "(transfert stoppé par l'extension)"; break; default : // Erreur non prévue ! $msg = "Fichier non transfere "; $msg .= "(erreur inconnue : ".$code_erreur.")"; } } // fin du isset POST ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>Upload</title></head> <body> <p> </p> <p> Vous allez pouvoir mettre vos fichiers à télécharger à partir de cette page.</p> <p> Vous enverrez vos fichiers 1 par 1. La taille doit être < à 2Mo. Les formats préférentiels sont le pdf et éventuellement le jpg.</p> <form action="EnvoiPJ.php" method="post" enctype="multipart/form-data"> <div> Fichier : <input type="hidden" name="MAX_FILE_SIZE" value="2048000" /> <input size="100" type="file" name="fichier" value="" /> <input type="submit" name="valid" value="Envoyer le fichier" /><br /> <br><?php echo $msg; ?> </div> </form> <p> </p> <br> </body> </html>
Configuration: Windows / Firefox 75.0 / PHP 7.2.24
--
A voir également:
- Conservation d'une variable
- Le fichier contient un programme écrit en python. le programme construit un mot secret mais il ne l'affiche pas. modifiez ce programme afin que à chaque itération de la boucle : la variable a augmente de 2 la variable b diminue de 1 ajoutez une instruction pour faire afficher le mot secret construit. quel est ce mot secret ? ✓ - Forum Python
- Vba range avec variable ✓ - Forum VB / VBA
- Variable d'environnement temp ✓ - Forum Microsoft Office
- Variable objet ou variable de bloc with non définie - Forum VB / VBA
- Vba excel sélectionner une plage de cellules variable ✓ - Forum Excel
1 réponse
Bonjour,
Pour ne pas remettre ta variable à vide.. tu dois d'abord t'assurer qu'elle existe en GET avant de la mettre en session.
Un truc du genre
Comme tu le vois, je récupère PROPREMENT la variable AVANT de l'utiliser...
(je t'invite à lire et à appliquer les conseils donnés ici : https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code )
Et donc, pour le nom de ton fichier, on peut appliquer le même genre de code :
Pour ne pas remettre ta variable à vide.. tu dois d'abord t'assurer qu'elle existe en GET avant de la mettre en session.
Un truc du genre
//On vérifie que $Num est bien là $Num = !empty($_GET['Num']) ? $_GET['Num'] : NULL; echo $Num; if($Num)[ $_SESSION['Num'] = $Num; }
Comme tu le vois, je récupère PROPREMENT la variable AVANT de l'utiliser...
(je t'invite à lire et à appliquer les conseils donnés ici : https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code )
Et donc, pour le nom de ton fichier, on peut appliquer le même genre de code :
// Récup du Num $Num = !empty($_SESSION['Num']) ? $_SESSION['Num'] : NULL; // Récupére les informations sur le fichier. $oFileInfos = !empty($_FILES["fichier"]) ? $_FILES["fichier"] : NULL; $FileName = !empty($oFileInfos["name"]) ? $oFileInfos["name"] : NULL; // nom du fichier. if($Num && $FileName){ $nom = $Num.$FileName; }else{ echo "Erreur..."; }
https://forums.commentcamarche.net/forum/affich-36561356-if-else-recalcitrant#2
C'est dommage de devoir se répéter. :-(
Merci pour l'aide. je vais regarder ça.
Sinon, pour ma variable en GET, j'ai bien vérifié que ça fonctionnait en l'affichant mais c'est vrai que c'est moins rigoureux que de mettre une vérification systématique dans le code comme tu le montres.
Merci encore.
peut-être que mes déboires serviront à d'autres aussi.