2009-05-17 3 views
0

자, method = "POST"를 통해 제출되는 템플릿 기능이 있습니다. 하지만이 코드는 정상적으로 제출할 수 없습니다.이 코드는 내가 제출하기를 원하는 것이기 때문에 이미 코드 위에 정의 된 태그가 있으며, 코드 아래에있는 태그가 남아 있어야합니다. 양식을 양식 안에 넣을 방법이 없으므로 양식을 작성하고 즉시 제출하려면 Javascript를 사용하고 있습니다. 하지만 document.forms.creator 양식에 정의 된 파일 입력 요소의 사본을 가져와야합니다. 지금 가지고있는 것을 성취하기 위해 PHP와 Javascript를 사용하고 있지만 cloneNode (true)가 $ _FILES [ 'image'] 배열을 가져 오지 않고 $ _FILES [ 'sigImg'] 배열로 설정하지 않습니다 : (PHP와 자바 스크립트를 통해 하나의 양식에서 다른 양식으로 복제 된 파일 입력 요소가 필요합니다.

나는 PHP는 에코에 정의 된 파일 입력의 실시간 복제를 얻고 createFormAndSubmit() 함수 ??

, 누군가가 도와주세요에 정의 된 형태로 배치 할 수 있습니다 방법

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>'; 

...

+0

그냥 내가, 당신은 팝업에 서버에 파일을 게시,하지만 여전히 원래 창의 양식에서 해당 파일을 참조하고자하는 제대로 이해하고 있는지 확인하기 위해? 그렇다면 자식/iframe을 게시 대상으로 설정 한 다음 id를 숨겨진 필드에 추가하는 스크립트와 주 양식의 파일 이름을 반환하십시오. – Tracker1

+0

아니요, 팝업을 원하지 않습니다. createFormAndSubmit() 함수 내에서 복제하고 이름과 ID를 다음과 같이 변경하십시오. name = "sigImg"id = "sigImgId"및 submitForm.submit(); get이 호출되면 sigImg는 이미지 파일 입력에서 $ _FILES [ 'sigImg']를 설정해야합니다. –

+0

iframe은 작업이 수행 된 후에 원래 있던 페이지로 바로 이동하기 때문에 작동하지 않습니다. 복제 된 요소가 제출되면 원본에서 $ _FILES가 설정되도록 파일 입력 요소를 복제하는 방법이 있어야합니다. 파일 크기, 마임 유형 등을 확인하려면이 파일이 필요합니다. –

답변

0

좋아, 덕분에 많은 크리스, 확실히이 점을 염두에 유지합니다. 이 문제를 직접 해결할 수있는 방법을 찾아 내고 양식의 동작을 변경하고 제출하는이 메서드를 사용하면 이미지 파일 개체 대신 양식의 모든 것을 제출하는 문제 만 발생합니다. 그러나 나는 그것이 정말로 문제가 아니라고 생각합니까? 그렇지 않습니까? 어쨌든이 코드와 함께 작동 : 이것은 그냥에서 만 업로드 버튼의 클릭에 사용됩니다이 기능 때문에 이미 다시 페이지로 리디렉션 형태의 동작을 변경

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

, 그것은이 아니다 문제는 정상적으로 양식을 제출할 때도 마찬가지입니다.

다시 감사합니다 :)

0

다른 스레드에 대한 Mark Allen의 의견에 따르면 새로운 복제 된 입력 (IE가 선택한 파일 속성을 제공하지 않음)을 다른 양식에 추가하는 대신 이전 입력을 새로운 입력 (적절하게 보입니다)을 입력 한 다음 이전 입력을 업로드 양식에 입력하십시오.

그래서 코드가 될 것이다 :

// 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); 
관련 문제