problème avec un input file

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 : problème avec un input file

par béka » 26 sept. 2007, 10:18

et il n'y aurait pas une solution alternative pour résoudre ce problème ?

EDIT : une solution serait peut etre de soumettre le formulaire lorsqu'on change de langue et don lorsqu'on clique sur un onglet.

par Ryle » 26 sept. 2007, 10:13

Dans la mesure où tu as deux champs de type file différents, l'un avec ton bloc anglais, l'autre avec ton bloc français, ça me parait logique que le fait de renseigner le premier ne mette pas à jour le second automatiquement si tu ne le demandes pas explicitement.
Le problème c'est qu'avec un champ file, tu ne peux renseigner de valeur pour des raisons de sécurité, donc pour le mettre à jour explicitement, ça me parait compromis...

problème avec un input file

par béka » 26 sept. 2007, 10:00

Bonjour tout le monde.
Je suis confronté à un problème là.
En fait, je suis en train de dév une partie administration qui permet de modifier des paragraphe d'une page.
Chaque paragraphe est composé d'une description en français, d'une description en anglais, d'un titre en francias et d'un titre en anglais et aussi d'une image commune à l'anglais et au franais.

Je travaille avec des fichiers xml pour stocker mon contenu.

Je fais donc une boucle pour chaque paragraphe pour afficher (et modifier avec textarea) le titre, la description et l'image (ou les images associées).
Seulement, lorsque je suis "côté français" que je clique sur le bouton parcourir pour afficher le chemin de mon image et que je passe du "côté anglais" avec un onglet, mon chemin n'apparait plus dans le input file.

y a-t-il une solution pour ce problème ?

Voila mon code pour afficher les différents paragraphes :
<form enctype="multipart/form-data" name="form" id="form" action="#" method="post">
<input type="hidden" value="<? echo $_GET['traitement']; ?>" name="id_traitement" />
      <ul class="tabs">
          <a id="modif-lang1" href="#lang1">Français</a>
          <a id="modif-lang2" href="#lang2">Anglais</a>
      </ul><br />
      
<a href="?add_paragraphe=<? echo $_GET['traitement']; ?>">Ajouter un paragraphe</a><br /><br />
<?
      $traitement = $xpTraitement->query('//traitement[@id="'.$_GET['traitement'].'"]');
      $idTraitement = $traitement->item(0)->getAttribute('id');
      $nameTraitement = $traitement->item(0)->getAttribute('name');
      $labelTraitement = $traitement->item(0)->getAttribute('label');
      $paragraphe = $xpTraitement->query('//traitement[@id="'.$idTraitement.'"]/paragraphe');?>
          
          <fieldset id="lang1">
          <legend>Français</legend><br /> <?
          for ($j=0; $j<$paragraphe->length; $j++) {
              $idParagraphe = $paragraphe->item($j)->getAttribute('id');
              $titreTraitementFr = $xpTraitement->query('//traitement[@id="'.$idTraitement.'"]/paragraphe[@id="'.$idParagraphe.'"]/title[@lang="fr"]')->item(0)->nodeValue;
              $descriptionTraitementFr = $xpTraitement->query('//traitement[@id="'.$idTraitement.'"]/paragraphe[@id="'.$idParagraphe.'"]/description[@lang="fr"]')->item(0)->nodeValue;
              ?>
            <label>Paragraphe <? echo $idParagraphe; ?></label><a href="?dell_paragraphe=<? echo $idTraitement."/".$idParagraphe; ?>">Supprimer ce paragraphe</a>      
            <label>Titre : </label><input type="text" name="titre_fr[]" value="<? echo $titreTraitementFr; ?>" size="50" /><br />
            <label>Description : </label><textarea name="paragraphe_fr[]" style="width: 90%; height: 200px;" ><? echo $descriptionTraitementFr; ?></textarea><br /><br />
            
            <fieldset id="images">
            <legend>Images associées au paragraphe <? echo $idParagraphe; ?> : </legend><br /><br />
            
            
            
            <? $file = $xpTraitement->query('traitement[@id="'.$idTraitement.'"]/paragraphe[@id="'.$idParagraphe.'"]/file[@img]');
              if ($file->length > 0 ) {
                echo "Pour ce paragraphe, vous avez déjà associé les images : <em class='explain'>pour supprimer les images, sélectionnez-les</em><br />";
                for ($im=0; $im<$file->length; $im++) {
                  $srcFile = $file->item($im)->getAttribute('img');
                  echo "<input type='checkbox' value='".$srcFile."/".$idParagraphe."' name='currentImgDel[]' /><input type='hidden' value='".$srcFile."' name='currentImg[]' />".$srcFile."<br /><br />";  
                }
              }
              else {
                echo "Il n'y a aucune image pour ce paragraphe<br /><br />";
              } ?>
              
              
              
            <label>Nouvelle image : </label>
            <div id="source-<? echo $idParagraphe; ?>">
              <input type="file" name="image[<? echo $idParagraphe; ?>][]" size="40" onChange="setModified();" value="" /><em class="explain">(image au format jpeg ou gif uniquement)</em><!--<a href="#" onclick="return delLinkElt(this);" class="element-delete" title="supprimer cette image"> Supprimer cet élément</a>--><br /><br />
      		    <div class="clear"></div>
      	    </div>        
            <div id="add-<? echo $idParagraphe; ?>">
              <a href="#" onclick="return addLinkElt('<? echo $idParagraphe; ?>');"><?php echo " ++ Ajouter une image"; ?></a>
            </div><br />
            
            
            Aligner toutes les images à 
            <select name="align">
            <option value="left">Gauche</option>
            <option value="right">Droite</option>
            </select>
          </fieldset>
          
        <? } ?> 
          </fieldset>
        
        
          <fieldset id="lang2">
          <legend>Anglais</legend><br /> <?
            for ($v=0; $v<$paragraphe->length; $v++) {
              $idParagraphe = $paragraphe->item($v)->getAttribute('id');
              $titreTraitementEn = $xpTraitement->query('//traitement[@id="'.$idTraitement.'"]/paragraphe[@id="'.$idParagraphe.'"]/title[@lang="en"]')->item(0)->nodeValue;
              $descriptionTraitementEn = $xpTraitement->query('//traitement[@id="'.$idTraitement.'"]/paragraphe[@id="'.$idParagraphe.'"]/description[@lang="en"]')->item(0)->nodeValue;
              ?>
            <label>Paragraphe <? echo $idParagraphe; ?></label><a href="?dell_paragraphe=<? echo $idTraitement."/".$idParagraphe; ?>">Supprimer ce paragraphe</a>
            <label>Titre : </label><input type="text" name="titre_en[]" value="<? echo $titreTraitementEn; ?>" size="50" /><br />
            <label>Description : </label><textarea name="paragraphe_en[]" style="width: 90%; height: 200px;" ><? echo $descriptionTraitementEn; ?></textarea><br /><br />
            <fieldset id="images">
            <legend>Images associées au paragraphe <? echo $idParagraphe; ?> : </legend><br /><br />
            
            
            
            <? $file = $xpTraitement->query('traitement[@id="'.$idTraitement.'"]/paragraphe[@id="'.$idParagraphe.'"]/file[@img]');
              if ($file->length > 0 ) {
                echo "Pour ce paragraphe, vous avez déjà associé les images : <em class='explain'>pour supprimer les images, sélectionnez-les</em><br />";
                for ($im=0; $im<$file->length; $im++) {
                  $srcFile = $file->item($im)->getAttribute('img');
                  echo "<input type='checkbox' value='".$srcFile."/".$idParagraphe."' name='currentImgDel[]' /><input type='hidden' value='".$srcFile."' name='currentImg[]' />".$srcFile."<br /><br />";  
                }
              }
              else {
                echo "Il n'y a aucune image pour ce paragraphe<br /><br />";
              } ?>
              
              
              
            <label>Nouvelle image : </label>
            <div id="source-<? echo $idParagraphe; ?>">
              <input type="file" name="image[<? echo $idParagraphe; ?>][]" size="40" onChange="setModified();" value="" /><em class="explain">(image au format jpeg ou gif uniquement)</em><!--<a href="#" onclick="return delLinkElt(this);" class="element-delete" title="supprimer cette image"> Supprimer cet élément</a>--><br /><br />
      		    <div class="clear"></div>
      	    </div>        
            <div id="add-<? echo $idParagraphe; ?>">
              <a href="#" onclick="return addLinkElt('<? echo $idParagraphe; ?>');"><?php echo " ++ Ajouter une image"; ?></a>
            </div><br />
            
            
            Aligner toutes les images à 
            <select name="align">
            <option value="left">Gauche</option>
            <option value="right">Droite</option>
            </select>
          </fieldset>
        <? } ?>
        </fieldset>

    <div class="btns">
          <input type="button" onclick="history.back();" class="submit" value="Retour" />
          <input type="submit" class="submit" value="Enregistrer" />
    </div>

</form>
et voici le javascript qui me permet de passer d'un onglet à l'autre :

Code : Tout sélectionner

<script type="text/javascript"> var panels = ['lang1', 'lang2'], panel, link; var tmp = document.location.href.split('#'); var currentPanel = ( tmp.length == 2 ) ? tmp[1] : panels[0]; document.getElementById('modif-' + currentPanel).className = 'selected'; for ( var i = 0, count = panels.length; i < count; i++ ) { // On ajoute les actions sur les liens link = document.getElementById('modif-' + panels[i]); link.onclick = function() { this.className = 'selected'; var tmp = this.href.split('#'); for ( var i = 0, count = panels.length, panel; i < count; i++ ) { panel = document.getElementById(panels[i]); if ( panels[i] == tmp[1] ) { panel.style.display = 'block'; } else { document.getElementById('modif-' + panels[i]).className = null; panel.style.display = 'none'; } } return false; } // end of 'onclick()' // On masque les panneaux if ( currentPanel == panels[i] ) continue; panel = document.getElementById(panels[i]); panel.style.display = 'none'; } // endif </script>