prob upload fichier dans popup

prob upload fichier dans popup - HTML/CSS - Programmation

Marsh Posté le 14-03-2006 à 16:52:06    

Bonjour à tous,  
 
Je viens d'essayer de poster un message mais c'était le premier et visiblement ca n'a pas fonctionné... je recommence donc depuis le début  :heink: en espérant ne pas me répéter  :sweat:  
 
J'ai un formulaire d'upload de fichier tout à fait classique, sur lequel j'effectue un traitement en PHP. Je souhaiterai que la soumission se fasse non pas dans la page courante mais dans une popup pour conserver intacte ma page initiale avec le formulaire.  
 
J'ai donc trouvé la petite fonction suivante sur un autre forum :  
 

Code :
  1. function pop_it(the_form) {
  2.    my_form = eval(the_form)
  3.    window.open("traitements/attente.php", "popup", "height=440, width=440, menubar='no', toolbar='no', location='no', status='no', scrollbars='yes'" );
  4.    my_form.target = "popup";
  5.    my_form.submit();
  6. }


 
je l'ai ajouté à mon formulaire :  
 

Code :
  1. <form action="traitements/extraction.php" method="post" name="form" enctype="multipart/ form-data">
  2. <table class="simpleTable" width="400px">
  3.  <tr>
  4.   <th colspan="2">Importation du fichier </th>
  5.  </tr>
  6.  <tr>
  7.   <td class="transparent alignG" width="45%">Fichier* </td>
  8.     <td class="transparent alignG">
  9.         <input type="file" name="fichier"/>
  10.    </td>
  11.  </tr>
  12.  <tr>
  13.         <td class="transparent alignG">Codes 
  14.                                  </td>
  15.         <td class="transparent alignG">
  16.     <input type="text" name="codes" class="large"/>
  17.        </td>
  18.  </tr>
  19.  <tr>
  20.   <td class="transparent alignC" colspan="2">
  21.    <input type="hidden" name="MAX_FILE_SIZE" value="10024" />
  22.    <input type="submit" value="Envoyer" onclick="pop_it(form);"/>
  23.   </td>
  24.  </tr>
  25. </table>
  26. </form>


 
Jusqu'ici tout va bien... Sauf que le fichier ne semble pas être téléchargé  :??:  :??:  
Lorsque j'arrive sur ma page de traitements, je parviens à afficher sans prob la valeur de $_POST['fichier'] mais je m'arrête à mon premier test :  
 

Code :
  1. $tmp_file = $_FILES['fichier']['tmp_name'];
  2.    
  3.  if( !is_uploaded_file($tmp_file) )   
  4.  {     
  5.    exit("Le fichier est introuvable" );   
  6.  }


 
Il me renvoie systématiquement fichier introuvable....  
Quelqu'un a-t-il une petite idée  :cry:  :cry: ? Est ce du à la soumission du formulaire via la fonction javascript?

Reply

Marsh Posté le 14-03-2006 à 16:52:06   

Reply

Marsh Posté le 14-03-2006 à 17:15:17    

enctype="multipart/ form-data"> <== tu as mis un espace alors qu'il n'en faut pas

Reply

Marsh Posté le 14-03-2006 à 17:16:35    

gatsu35 a écrit :

enctype="multipart/ form-data"> <== tu as mis un espace alors qu'il n'en faut pas


 
Si j'enlève l'espace je ne récupère plus rien du tout... Toutes les variables sont vides  :(


Message édité par sunee le 14-03-2006 à 17:22:33
Reply

Marsh Posté le 14-03-2006 à 17:27:08    

ce que tu as trouvé sur un forum est un peu naze
 
J'ai la réponse à ta question, c'est parce que le formulaire est mal envoyé.
 
tu colles un id sur ton formulaire :  
<form id="monformu">
 
et dans ta fonction  pop_it tu fais ça :  
function pop_it(formId) {
   my_form = document.getElementById(formId)
  window.open("traitements/attente.php", "popup", "height=440, width=440, menubar='no', toolbar='no', location='no', status='no', scrollbars='yes'" );
   my_form.target = "popup";
   my_form.submit();
}  
 
et sur l'évènement onclick du bouton tu fais :  
pop_it('monformu')
 
sinon pourquoi passer par du javascript alors qu'un simple target="_blank" dans le form aurait suffit.

Reply

Marsh Posté le 14-03-2006 à 17:35:32    

gatsu35 a écrit :

ce que tu as trouvé sur un forum est un peu naze.


 
c possible oui...  
 

gatsu35 a écrit :


J'ai la réponse à ta question, c'est parce que le formulaire est mal envoyé.
 
tu colles un id sur ton formulaire :  
<form id="monformu">
 
et dans ta fonction  pop_it tu fais ça :  
function pop_it(formId) {
   my_form = document.getElementById(formId)
  window.open("traitements/attente.php", "popup", "height=440, width=440, menubar='no', toolbar='no', location='no', status='no', scrollbars='yes'" );
   my_form.target = "popup";
   my_form.submit();
}  
 
et sur l'évènement onclick du bouton tu fais :  
pop_it('monformu')


 
J'ai un message d'erreur javascript qui me dit que my_form est indéfini ou n'est pas un objet, il est possible en javascript de récupérer les valeurs d'un formulaire avec un getElementById? ca m'intrigue un peu...  
 

gatsu35 a écrit :


sinon pourquoi passer par du javascript alors qu'un simple target="_blank" dans le form aurait suffit
.


 
Le javascript me permet de paramétrer la taille de ma fenêtre, de ne pas utiliser un attribut qui n'est plus valide en xhtml (si je ne me trompe pas) et d'afficher une page d'attente intermédiaire... (les fichiers que je dois télécharger sont très lourds et très longs à analyser par la suite...) J'ai pas trouvé de meilleur façon de répondre à mes contraintes tout simplement...  :sweat:  
 

Reply

Marsh Posté le 14-03-2006 à 17:47:25    

sunee a écrit :

c possible oui...


nan nan c'est sur!!!!
 
 

sunee a écrit :

J'ai un message d'erreur javascript qui me dit que my_form est indéfini ou n'est pas un objet


Il manque juste un ; à la fin de la déclaration de  myform(en cherchant un peu tu aurais pu trouver!):  

Code :
  1. my_form = document.getElementById(formId);


 

sunee a écrit :

il est possible en javascript de récupérer les valeurs d'un formulaire avec un getElementById? ca m'intrigue un peu...


Oui c'est possible:

Code :
  1. document.getElementById('tonInput').value


 

sunee a écrit :

Le javascript me permet de paramétrer la taille de ma fenêtre, de ne pas utiliser un attribut qui n'est plus valide en xhtml (si je ne me trompe pas) et d'afficher une page d'attente intermédiaire... (les fichiers que je dois télécharger sont très lourds et très longs à analyser par la suite...) J'ai pas trouvé de meilleur façon de répondre à mes contraintes tout simplement...  :sweat:


Parametrer la taille de la fenetre -> ok
l'attribut->nawak
la page d'attente-> nawak
Bref l'interet est limité ...  

Reply

Marsh Posté le 14-03-2006 à 17:48:24    

sunee a écrit :

c possible oui...  
 
 
 
J'ai un message d'erreur javascript qui me dit que my_form est indéfini ou n'est pas un objet, il est possible en javascript de récupérer les valeurs d'un formulaire avec un getElementById? ca m'intrigue un peu...  
 
 
 
Le javascript me permet de paramétrer la taille de ma fenêtre, de ne pas utiliser un attribut qui n'est plus valide en xhtml (si je ne me trompe pas) et d'afficher une page d'attente intermédiaire... (les fichiers que je dois télécharger sont très lourds et très longs à analyser par la suite...) J'ai pas trouvé de meilleur façon de répondre à mes contraintes tout simplement...  :sweat:


Bon tu dois bien te douter que j'ai oublié un truc lol :
 
 
var my_form = document.getElementById(formId);
 
 
en fait on récupère une sorte de pointeur sur l'objet, tu as accès à tout l'objet, et c'est comme ça de toute manière qu'on accède à un objet de nos jours.
 
et recolle les dernieres modifs que tu as fait à ton formulaire et à ton script

Reply

Marsh Posté le 14-03-2006 à 20:14:49    

anapajari a écrit :


Oui c'est possible:

Code :
  1. document.getElementById('tonInput').value




 
Je parlais de récupérer la totalité des valeurs d'un formulaire (puisque dans l'exemple de Gatsu le GetElementById pointe sur l'id du formulaire....)  
pas un élément isolé ce que je sais faire merci  :o  
 

anapajari a écrit :


Parametrer la taille de la fenetre -> ok
l'attribut->nawak
la page d'attente-> nawak
Bref l'interet est limité ...


 
Je trouve tes commentaires très intéressants  :heink:  En ce qui concerne l'attribut, c'est nawak dès l'instant où tu te moques  des standarts, ce qui n'est pas le cas de toutes les entreprises surtout quand c'est un élément de l'argumentaire de vente... Quant à la page d'attente là aussi, cela n'engage que toi mais à choisir entre passer 5 min devant une page vide à se demander ce qui se passe certains préfèreront une petite animation par ex.... surtout si les intéressés ne sont pas informaticiens du tout!  
 
Merci quand même de ta réponse  :sarcastic:

Reply

Marsh Posté le 14-03-2006 à 20:18:50    

gatsu35 a écrit :


en fait on récupère une sorte de pointeur sur l'objet, tu as accès à tout l'objet, et c'est comme ça de toute manière qu'on accède à un objet de nos jours.
 
et recolle les dernieres modifs que tu as fait à ton formulaire et à ton script


 
 
Je savais utiliser le getElementById sur un élément du formulaire, je pensais pas que c'était possible sur tout le formulaire... comme je l'ai dit je ne suis pas une championne du javascript et le PHP n'est pas encore complètement objet donc... je ne suis pas tout à fait coutumière de ce genre de manipulations tout simplement...
 
Je te remercie pour ton aide en tout cas, je teste ca demain au taf mais ca devrait fonctionner  :ange: (encore qu'il me semblait avoir rajouté le ; pour tester... mais peut être un peu vite avant de partir)  
 
bonne soirée !  :hello:

Reply

Marsh Posté le 14-03-2006 à 20:55:29    

Ben tu auras quelques coups de fouet pour l'exemple dans ce cas :o
 
On récapitule :  
Dans une page HTML n'importe quel ensemble de balise
<b>mon texte</b>, <input>, <form>pleins de trucs dedans</form>
est représenté comme un objet au niveau de ce qu'on appelle le DOM
Document Object Model, Imagine le DOM comme un arbre, ou la racine est document, ensuite chaque enfant est une des balises que tu trouves dans ta page, et chaque balise aura elle aussi des enfants.
 
Pour mieux t'en rendre compte, ouvre firefox, et fait outils > Dom Inspector.
Dans la fenetre de guache tu auras l'arbre représentatif de ta page, et dans celle de droite tu as des informations précises sur l'objet selectionner, tu peux meme changer le mode d'affichage et choisir par exemple l'objet Javascript. tu verras bien par toi même j'ai la flème d'en faire plus.
 
Sinon les méthodes pour accéder à des objets de nos jours sont nombreuses.
 
document.getElementById() te retourne un pointeur sur l'objet en fonction de l'id que tu lui auras indiqué.
 
objetencours.getElementsByTagName("tag" ), cette fonction est appellée à partir de l'objet que tu auras récupérée, elle retourne un tableau dans le quel se trouvent tous les objets correspondant au tag demandé, exemple :  
input, b, div
après libre à toi de faire ce que tu veux

Reply

Marsh Posté le 14-03-2006 à 20:55:29   

Reply

Marsh Posté le 14-03-2006 à 21:45:06    

gatsu35 a écrit :

Ben tu auras quelques coups de fouet pour l'exemple dans ce cas :o
 
On récapitule :  
Dans une page HTML n'importe quel ensemble de balise
<b>mon texte</b>, <input>, <form>pleins de trucs dedans</form>
est représenté comme un objet au niveau de ce qu'on appelle le DOM
Document Object Model, Imagine le DOM comme un arbre, ou la racine est document, ensuite chaque enfant est une des balises que tu trouves dans ta page, et chaque balise aura elle aussi des enfants.
 
Pour mieux t'en rendre compte, ouvre firefox, et fait outils > Dom Inspector.
Dans la fenetre de guache tu auras l'arbre représentatif de ta page, et dans celle de droite tu as des informations précises sur l'objet selectionner, tu peux meme changer le mode d'affichage et choisir par exemple l'objet Javascript. tu verras bien par toi même j'ai la flème d'en faire plus.
 
Sinon les méthodes pour accéder à des objets de nos jours sont nombreuses.
 
document.getElementById() te retourne un pointeur sur l'objet en fonction de l'id que tu lui auras indiqué.
 
objetencours.getElementsByTagName("tag" ), cette fonction est appellée à partir de l'objet que tu auras récupérée, elle retourne un tableau dans le quel se trouvent tous les objets correspondant au tag demandé, exemple :  
input, b, div
après libre à toi de faire ce que tu veux


 
Merci pour ce petit rappel, très bien expliqué!  j'irai jeter un oeil dans firefox...  j'y vois plus clair en tout cas...  :jap:  :jap:  

Reply

Marsh Posté le 15-03-2006 à 08:53:10    

gatsu35 a écrit :

recolle les dernieres modifs que tu as fait à ton formulaire et à ton script


 
Voilà :  
La fonction  Javascript :
 

Code :
  1. function pop_it(formId)
  2. {
  3.    my_form = document.getElementById(formId);
  4.  
  5.    window.open("traitements/attente.php", "popup", "height=440, width=440, menubar='no', toolbar='no', location='no', status='no', scrollbars='yes'" );
  6.  
  7.    my_form.target = "popup";
  8.    my_form.submit();
  9. }


 
le formulaire :  
 

Code :
  1. <form action="traitements/extraction.php" method="post" name="formId" id="formId" ENCTYPE="multipart/ form-data">
  2. <table class="simpleTable" width="400px">
  3.  <tr>
  4.   <th colspan="2">Importation du fichier</th>
  5.  </tr>
  6.  <tr>
  7.   <td class="transparent alignG" width="45%">Fichier* </td>
  8.     <td class="transparent alignG">
  9.         <input type="file" name="fichier"/>
  10.    </td>
  11.  </tr>
  12.  <tr>
  13.   <td class="transparent alignG">Codes</td>
  14.     <td class="transparent alignG">
  15.         <input type="text" name="codes" class="large"/>
  16.    </td>
  17.  </tr>
  18.  <tr>
  19.   <td class="transparent alignC" colspan="2">
  20.    <input type="hidden" name="MAX_FILE_SIZE" value="10024">
  21.    <input type="submit" value="Envoyer" onclick="pop_it('formId');"/>
  22.   </td>
  23.  </tr>
  24. </table>
  25. </form>


 
Voilà, j'ai toujours un fichier introuvable au final...  
 
résultats :  
 

Code :
  1. $_POST['MAX_FILE_SIZE']? 10024
  2. $_POST['codes']? 34000
  3. $_POST['fichier']? C:\\Program Files\\wamp\\www\\P\\import\\fichier\\fichier.txt
  4. $_FILES['fichier']['tmp_name']?


Reply

Marsh Posté le 15-03-2006 à 10:02:12    

sunee a écrit :

...
Je trouve tes commentaires très intéressants  :heink:  En ce qui concerne l'attribut, c'est nawak dès l'instant où tu te moques  des standarts, ce qui n'est pas le cas de toutes les entreprises surtout quand c'est un élément de l'argumentaire de vente... Quant à la page d'attente là aussi, cela n'engage que toi mais à choisir entre passer 5 min devant une page vide à se demander ce qui se passe certains préfèreront une petite animation par ex.... surtout si les intéressés ne sont pas informaticiens du tout!  
Merci quand même de ta réponse  :sarcastic:


Reprenons dans l'ordre:
- en ce qui concerne l'attribut, je ne me moque pas des standarDs mais je trouve qu'il vaut mieux une page non-validée pour un attribut compris de tous les navigateurs que du javascript qui fait un pop-up
- la page d'attente n'a strictement rien a voir avec le fait que tu ouvres ( ou pas ) un pop-up. Tu peux très bien la faire sans avoir a utiliser un window.open!!!!  
Enfin concernant ton problème:
- il y a toujours un espace en trop dans le enctype
- il nous faudrait l'ensemble de code php( vu qu'a mon avis ça vient de la maintenant)

Message cité 1 fois
Message édité par anapajari le 15-03-2006 à 10:04:48
Reply

Marsh Posté le 15-03-2006 à 10:31:28    

anapajari a écrit :


Reprenons dans l'ordre:  
- en ce qui concerne l'attribut, je ne me moque pas des standarDs mais je trouve qu'il vaut mieux une page non-validée pour un attribut compris de tous les navigateurs que du javascript qui fait un pop-up  
- la page d'attente n'a strictement rien a voir avec le fait que tu ouvres ( ou pas ) un pop-up. Tu peux très bien la faire sans avoir a utiliser un window.open!!!!  


 
Expliqué comme ça c'est toujours mieux... le popup présente l'avantage de pouvoir déconnecter ce traitement du site et de la navigation intérieure... mais on est d'accord le target le fait aussi... sauf pour la taille de la fenêtre....  
 
Je ne suis pas fana de javascript de toute façon (la preuve) j'essaie seulement de faire au mieux avec les contraintes qui me sont imposées, ce sur quoi je bosse se rapproche d'avantage d'un logiciel que d'un site web classique à ceci près que les outils de dev ont été imposés même s'ils ne sont pas forcément les plus appropriés... (trop long à détailler ici et je pense pas que ca intéresse qui que ce soit de toute façon  :D )  
 

anapajari a écrit :


Enfin concernant ton problème:
- il y a toujours un espace en trop dans le enctype
- il nous faudrait l'ensemble de code php( vu qu'a mon avis ça vient de la maintenant)


 
Pour l'espace en trop, j'ai déjà répondu à ça : si je l'enlève je ne récupère plus aucun paramètre  :??:  :??:  
 
Je pense comme toi que ca doit venir du php, seulement mon site est découpé en div et il n'y a rien d'autre donc que le formulaire dans mon fichier... Le reste n'est pas rechargé, je vais chercher de ce côté là mais ce ne sont que des menus...  
 
j'ai un peu du mal à savoir d'où cela peut venir étant donné que je n'ai pas de problème avec les autres formulaires du site (mais en même temps c'est le seul endroit ou je dois télécharger un fichier et aucun traitement ne se fait dans une popup pour les autres formulaires...)  
 
Encore une espèce de bug mystique pour une bête erreur de syntaxe qui traine quelque part je parie  :sweat:


Message édité par sunee le 15-03-2006 à 10:32:06
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed