IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Prise en compte d'un fichier


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 718
    Par défaut Prise en compte d'un fichier
    Bonjour à tous,

    Lorsque je télécharge un logo ou que je le supprime, je n'arrive pas à prendre en compte la modification à l'enregistrement (soumission du formulaire): Je suis obligé d'actualiser la fenêtre pour que les modifications soient prises en compte: A l'enregistrement d'un nouveau logo, il ne s'affiche pas. Lors de la suppression, c'est l'image vide qui s'affiche.
    Pourtant, je ne trouve aucune erreur dans mon code.
    Info: Dans les fichiers suivants, le tableau $echo contient toutes les variables à afficher dans la vue.
    $echo['content'] est utilisée dans le template.
    Est-ce que je suis assez clair?
    Fichier vue 'setDefaultValues.php':
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    require_once('../uploadDefines.php');
    ob_start();
    ?>
     
    <h2>Définition des préférences</h2>
    <?= $echo['alerts']; ?>
     
    <form method="post" enctype="multipart/form-data" class="settings" action="backend/settings.php">
    	<!-- code -->
    	<fieldset><legend>Notre logo</legend>
    			<label for="logo">Nouveau logo<sup class="note">&nbsp;*</sup></label><input type="file" id="logo" name="logo"><br>
    			<input type="submit" name="destroy" value="Supprimer logo"><br>
    			<p class="note">Le fichier du logo ne doit pas excéder les limites suivantes&nbsp;:<br>
    				<ul class="note">
    					<li><label>Hauteur&nbsp;:</label><?= MAX_WIDTH.' pixels'; ?></li>
    					<li><label>Largeur&nbsp;:</label><?= MAX_HEIGHT.' pixels'; ?></li>
    					<li><label>Taille&nbsp;:</label><?= MAX_WEIGHT*100 .' ko'; ?></li>
    					<li><label>Types autorisés&nbsp;:</label>'gif', 'png', 'jpg', 'jpeg'</li>
    				</ul>
    			</p>
    	</fieldset>
    	<p style="padding-left:10px;"><input type="submit" name="saveElem" value="<?= getDBText($language,72); ?>"></p>
    </form>
     
    <?php $echo['content'] = trim(ob_get_clean()); ?>
    EDIT: Fichier contrôleur 'setDefaultValues.php' 'settings.php':
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    if ( empty(session_id()) )
    	session_start();
     
    require_once('../functions.php');
     
    checkSubscriber();
     
    // Init variables
    $echo				= $_SESSION['headings'];
    $echo['messages']	= (empty($_SESSION['messages']))	? '': displMessages($_SESSION['messages']);
    $echo['errors']		= (empty($_SESSION['errors']))		? '': displErrors($_SESSION['errors']);
    $echo['alerts']		= implode('<br>',[$echo['messages'], $echo['errors'], ]);
    $language			= $_SESSION['language'];
    $iPage				= $_SESSION['pPage'];
     
    // code problématique
    $logos				= glob("../images/subsLogos/{$_SESSION['currentUser']['id_subscriber']}.*", GLOB_NOSORT);
    $src				= empty($logos) ? '': $logos[0];
    //$echo['subsLogo']	= empty($src) ? '': "<img src='../$src' alt='subsLogo'>";
    var_dump($src);
    var_dump(file_exists($src));
    $echo['subsLogo']	= file_exists($src) ? "<img src='../$src' alt='subsLogo'>": '';
    // Fin du code problématique
     
    switch ($iPage){
    	case 4:
    	default:
    		$controller	= 'settingDefaults.php';
    		$view		= __dir__ ."/views/$language/setDefaultValues.php";
    	break;
    	case 5:
    		// code
    	break;
    	case 6:
    		// code
    	break;
    }
     
    require_once($controller);
    require_once('../frontend/views/menuVUser.php');
    require_once($view);
    require_once('../views/template.php');

  2. #2
    Invité
    Invité(e)
    Par défaut
    il me semble que pour appeler la même page que l'argument action est facultatif essaye sans? Tu peut aussi mettre le chemin en relatif ou absolu.
    e formulaire à l'aire d'être correct
    Dernière modification par Invité ; 28/12/2021 à 17h37.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 718
    Par défaut
    Oups! J'ai fait une erreur: Le contrôleur n'est pas 'setDefaultValues.php' mais 'settings.php'. Je corrige (EDIT).
    Il s'agit d'une structure MVC dans laquelle le formulaire est dans la vue (fichier 'setDefaultValues.php') et le traitement se fait dans le contrôleur 'settings.php'. Le contrôleur renvoie les données corrigées au formulaire rafraîchi. Mon problème se situe dans le rafraîchissement des données retournées au formulaire dans le fichier vue.
    J'ajoute le code source de la vue (ctrl+U) duquel j'ai supprimé le code inutile (non concerné par la question). Il s'agit du code initial avant sélection ou suppression du logo:
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    <!DOCTYPE html>
    <html lang="fr">
    	<head>
    		<meta charset="utf-8">
    		<title>xxxxxxx</title>
    		<meta name="description" content="du texte">
     
    		<meta http-equiv="Expires" content="-1" >
    		<meta http-equiv="cache-control" content="no-cache, no-store, must-revalidate">
     
    		<base href="http://sirep.proginet.local" />
     
    		<link rel="stylesheet" media="all" type="text/css" href="../css/structure.css">
    		<link rel="stylesheet" media="all" type="text/css" href="../css/screen.css">
    		<link rel="stylesheet" media="print" type="text/css" href="../css/print.css">
    			</head>
     
    	<body>
     
     
    <header>
    	<div class="displTimer">
    		<span id="timer"></span>
    	</div>
    </header>		
    		<section>
     
    			<div id="left">
    				<nav class="mainNav">
    					<!-- menu ici -->
    				</nav>
    			</div>
    			<article id="right">
    				<h2>Définition des préférences</h2>
    <br>
    <form method="post" enctype="multipart/form-data" class="settings" action="backend/settings.php">
    	<fieldset><legend>Valeurs par défaut</legend>
    		<!-- champs textes non concernés par la question -->
    	</fieldset>
    	<fieldset><legend>Notre logo</legend>
    			<label for="logo">Nouveau logo<sup class="note">&nbsp;*</sup></label><input type="file" id="logo" name="logo"><br>
    			<input type="submit" name="destroy" value="Supprimer logo"><br>
    			<p class="note">Le fichier du logo ne doit pas excéder les limites suivantes&nbsp;:<br>
    				<ul class="note">
    					<li><label>Hauteur&nbsp;:</label>250 pixels</li>
    					<li><label>Largeur&nbsp;:</label>250 pixels</li>
    					<li><label>Taille&nbsp;:</label>10000000 ko</li>
    					<li><label>Types autorisés&nbsp;:</label>'gif', 'png', 'jpg', 'jpeg'</li>
    				</ul>
    			</p>
    	</fieldset>
    	<p style="padding-left:10px;"><input type="submit" name="saveElem" value="Enregistrer"></p>
    </form>			</article>
     
    		</section>
     
    		<!-- Suite du code non concerné par la question -->
     
    	</body>
    </html>

  4. #4
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Par défaut
    Bonjour,

    Pour forcer le rechargement du logo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ... "<img src='../{$src."?".time()}' alt='subsLogo'>": '';

  5. #5
    Membre éprouvé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 718
    Par défaut
    Je ne comprends pas ton écriture qui en plus me provoque une erreur de syntaxe unexpected '.', expecting :: au premier point.
    J'ai essayé avec les deux lignes suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $echo['subsLogo']	= file_exists($src) ? "<img src='../{$src."?".time()}' alt='subsLogo'>": '';
    $echo['subsLogo']	= "<img src='../{$src."?".time()}' alt='subsLogo'>": '';

  6. #6
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Par défaut
    Je ne suis pas familier avec cette écriture entre accolades...

    Essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $echo['subsLogo']	= "<img src='../{$src}?{time()}' alt='subsLogo'>": '';
    Ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $echo['subsLogo']	= "<img src='../".$src."?".time()."' alt='subsLogo'>": '';
    Je préfère cette syntaxe, ne serait-ce que pour la coloration syntaxique, qui simplifie le débogage.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/11/2021, 14h13
  2. Réponses: 0
    Dernier message: 24/11/2017, 12h09
  3. Réponses: 5
    Dernier message: 17/08/2017, 09h23
  4. [VB.Net] Prise en compte du fichier .css d'un Thème
    Par graphicsxp dans le forum ASP.NET
    Réponses: 2
    Dernier message: 20/02/2006, 14h47
  5. Lecture de fichier - dernière ligne non prise en compte
    Par JulienPles dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 16/03/2005, 11h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo