2009-05-17 8 views
0

Ok, j'ai une fonction de template qui est soumise via method = "POST". Mais je ne peux pas soumettre cela normalement, puisque c'est tout ce que je veux soumettre, et il y a déjà une balise définie au dessus du code et qu'en dessous du code, fermer le formulaire avec ça doit rester là. Depuis, il n'y a aucun moyen d'avoir des formulaires à l'intérieur des formulaires, j'utilise Javascript pour créer un formulaire et le soumettre à la volée. Mais j'ai besoin d'obtenir une copie de l'élément d'entrée de fichier défini dans le formulaire document.forms.creator. J'utilise PHP et Javascript pour accomplir ce que j'ai maintenant, mais le cloneNode (true) n'obtient pas le tableau $ _FILES ['image'] et le met dans le tableau $ _FILES ['sigImg'] :(Besoin d'un élément d'entrée de fichier cloné d'une forme dans une autre via PHP & Javascript

echo '<tr><td colspan="2"><a href="#" name="sig' . $user_info['id'] . '"></a><center><b>Signature Image Rotator</b></center><br /><center> 
Add Image: <input type="file" size="48" id="imagefile" name="image" />&nbsp;&nbsp;<input type="button" value="Upload" onclick="createFormAndSubmit()"></center>'; 


echo ' 
<script language="JavaScript" type="text/javascript"><!-- // --><![CDATA[ 
//helper function to create the form 
function getNewSubmitForm(){ 
var submitForm = document.createElement("FORM"); 
document.body.appendChild(submitForm); 
submitForm.enctype = "multipart/form-data"; 
submitForm.method = "POST"; 
return submitForm; 
} 

//function that creates the form, clones <input type="file" name="image">, 
//and then submits it 
function createFormAndSubmit(){ 
var submitForm = getNewSubmitForm(); 
var element = document.getElementById("imagefile"); 
    element = element.cloneNode(true); 
    element.id = \'sigImgId\'; //<- ID Assignment 
    element.name = \'sigImg\'; //<- NAME Assignment 
    submitForm.appendChild(element); 
submitForm.action= "', $scripturl, '?action=sigimages;sa=upload"; 
submitForm.submit(); 
} 
// ]]></script></td></tr>'; 

Comment puis-je obtenir un vrai clone de l'entrée de fichier défini dans le php echo et le placer dans la forme définie dans la fonction ??

createFormAndSubmit() S'il vous plaît, quelqu'un aider ...

+0

Juste pour vous assurer que je suis comprends bien, vous êtes désireux d'afficher un fichier sur le serveur dans une fenêtre contextuelle, mais toujours faire référence à ce fichier de la forme de la fenêtre d'origine? Si c'est le cas, aurait simplement l'enfant/iframe être la cible de la publication, alors que cela retourne un script pour ajouter un identifiant dans un champ caché, et le nom de fichier dans votre formulaire principal. – Tracker1

+0

Non, vous ne voulez pas de popup. Je veux juste cloner le dans la fonction createFormAndSubmit() et changer le nom et l'id à: name = "sigImg" id = "sigImgId" et quand submitForm.submit(); get est appelé, sigImg aurait dû définir $ _FILES ['sigImg'] à partir de l'entrée du fichier image. –

+0

un iframe ne fonctionnera pas car une fois l'action effectuée, il les ramène directement à la page sur laquelle ils se trouvaient. Il doit y avoir un moyen de cloner un élément d'entrée de fichier de sorte que lorsque l'élément cloné est soumis, il a défini $ _FILES à partir de l'original. J'ai besoin de ceci pour pouvoir vérifier la taille du fichier, le type mime, etc. –

Répondre

0

Ok, merci beaucoup Chris, va certainement garder cela à l'esprit. Avait juste trouvé un moyen de résoudre ce problème moi-même et j'utilise cette méthode qui change juste l'action de la forme et soumet, seul problème il soumet tout dans le formulaire au lieu de simplement l'objet imagefile. Mais je suppose que ce n'est pas vraiment un problème, ou est-ce? fonctionne de toute façon avec ce code:

// change the action and submit the form... 
function submitSigImg(){ 
var mainForm = document.forms.creator; 
mainForm.action= "', $scripturl, '?action=sigimages;sa=upload"; 
mainForm.submit(); 
} 

Ce ne modifie que l'action de la forme, il est déjà et que cette fonction ne se habitue à cliquer sur le bouton de téléchargement et redirige vers la page, il est pas problème lors de la soumission du formulaire soit normalement.

Encore une fois Merci :)

0

Le commentaire de Mark Allen sur l'autre thread suggère qu'au lieu d'ajouter votre nouvelle entrée clonée (qui IE ne donne pas la propriété de fichier sélectionnée) à l'autre formulaire, vous remplacez l'ancienne entrée avec la nouvelle entrée (qui semble correcte), puis vous mettez l'ancienne entrée sur votre formulaire de téléchargement.

donc votre code deviendrait:

// clone up a new one 
var oldFile = document.getElementById("imagefile"); 
var newFile = oldFile.cloneNode(true); 

// set props 
newFile.id = "sigImgId"; //<- ID Assignment 
newFile.name = "sigImg"; //<- NAME Assignment 

// replace old with new 
oldFile.parentNode.replaceChild(newFile, oldFile); 

// attach old to upload form 
submitForm.appendChild(oldFile);