Avatar billede swaq Nybegynder
06. juni 2003 - 13:31 Der er 49 kommentarer og
1 løsning

hidden - files - problem med overførsel af filer til anden form

Hejsa...

Jeg har en side med to form's (form1 og form2), den første tillader brugeren at oprette en aktivitet (det er til en aktivitetskalender), herunder kan brugeren uploade nogle filer der er relevante for aktiviteten. Det har altsammen virket fint indtil nu. Sagen er, at der nu er indført en ekstra form (form2), som hovedsagligt består af "hidden" felter. Formen er lavet for at give brugeren mulighed for at redigere eller godkende som aktivitet - inden denne gemmes på siden. Formen indeholder derfor to knapper - godkend og rediger - hvor godkend medfører at formen bliver sendt (dog til den samme php-fil) og aktiviteten gemmes. Rediger derimod, viser form1 igen, således brugeren kan redigere i sin tekst m.m.

Her er et udsnit at form1, hvor brugeren har mulighed for at uploade 5 filer...
<input type="file" size="48" name="upfile[]">
<input type="file" size="48" name="upfile[]">
<input type="file" size="48" name="upfile[]">
<input type="file" size="48" name="upfile[]">
<input type="file" size="48" name="upfile[]">

Hvordan får jeg videreført 'upfile[]' til den anden form (den med de mange skjulte felter)?

Som jeg har forstået det, bliver jeg nødsaget til at anvende hidden-felter på alle de variable som jeg vil sende fra form1 videre gennem form2, således de kan anvendes efter form 2.

Tidligere fik jeg fat i filerne således:
if (isset($_FILES['upfile'])) {...}
Men det indbar også at de kom direkte fra form1.

Opsummerende... Hvordan for jeg får 'upfile' fra form1 til form2 og derfra videre til gemme-funktionen?
Avatar billede roenving Novice
06. juni 2003 - 13:46 #1
Jeg ville skygge felterne altså skjulte felter på den anden form, men så:

-- lidt scripting onsubmit:

<form ... onsubmit="fetchValues(this);return true;">

function fetchValues(f){
  var upnew = this.upfile;
  var upold = document.form1.upfile;
  for (i=0;i<upold.length;i++){
    upfile[i].value = upold[i].value;
  }
  this.date.value = document.form1.date.value
  //og alle dine andre felter
}

-- så vidt jeg husker er value på en file-input 'bare' et filnavn, så det skulle virke med almindelige hidden-fields på din anden form, men ellers kan det jo blive nødvendigt med lidt mere ekstensive øvelser for at synkronisere egenskaber til file-inputs i en skjult del af form2 ...

hth
jes
Avatar billede swaq Nybegynder
06. juni 2003 - 13:50 #2
takker, jeg kigger på det... :-)
Avatar billede swaq Nybegynder
06. juni 2003 - 13:50 #3
Forresten, din onSubmit, ligger den på form1 eller 2?
Avatar billede swaq Nybegynder
06. juni 2003 - 13:53 #4
Hvad bruger du 'upnew' til?
Avatar billede swaq Nybegynder
06. juni 2003 - 13:55 #5
Og endeligt :-) Hvad mener du med 'date'?
Avatar billede roenving Novice
06. juni 2003 - 13:56 #6
uff -- en tavetosse, jeg ændrede lidt i konstruktionen (bare mere læselig kode):

  for (i=0;i<upold.length;i++){
    upnew[i].value = upold[i].value;
  }

Jeg går ud fra, at godkend på form2 er en submit-knap, så der skal onsubmitten lægges -- koden skal bare lægges (jeg gør det af princip altid i <head> ,-)
Avatar billede roenving Novice
06. juni 2003 - 13:57 #7
-- date bare som eksempel på andre felter som du ahr på form1 som skal med i overførslen ...
Avatar billede swaq Nybegynder
06. juni 2003 - 13:59 #8
hmm... jeg tror jeg er med halvvejs :-), hvad bruger du 'f' til? og 'this' henviser det til form2 eller siden generelt?
Avatar billede swaq Nybegynder
06. juni 2003 - 14:02 #9
Jeg viser dig lige hvordan de to forms ser ud...

Her er form 1:
<form enctype="multipart/form-data" action="" method="post" name="akForm" onSubmit="return check();">
...
<input ... (ligesom det står øverst i dette indlæg)
           

Her er form 2:
<form name='godkendelsesForm' method='POST' action='' onSubmit='fetchValues(this);'>
<input type="hidden" name="akDato" value="<? echo $akDato; ?>">
<input type="hidden" name="akForfatter" value="<? echo $akForfatter; ?>">
<input type="hidden" name="akEmail" value="<? echo $akEmail; ?>">
<input type="hidden" name="akOverskrift" value="<? echo
$akOverskrift; ?>">
<input type="hidden" name="akAktivitetIndhold" value="<? echo $akAktivitetIndhold; ?>">
<input type="hidden" name="akSted" value="<? echo $akSted; ?>">
<input type="hidden" name="akLink" value="<? echo $akLink; ?>">
<input type="hidden" name="upfile"> <!--//echo noget her??? Er det muligt?-->
Avatar billede swaq Nybegynder
06. juni 2003 - 14:07 #10
Her er siden: http://www.frederiksberg.dk/?id=Opret aktivitet

Brugernavn: 'eksperten'
Pass: 'ladmigse'
Avatar billede swaq Nybegynder
06. juni 2003 - 14:07 #11
Sludder og vrøvl!!!
Her er siden: http:frederiksberg-jujutsu.dk?id=Opret%20aktivitet
Avatar billede swaq Nybegynder
06. juni 2003 - 14:08 #12
ja, det går sku godt :O)
Prøver lige en sidste gang...
http://frederiksberg-jujutsu.dk?id=Opret%20aktivitet
Avatar billede roenving Novice
06. juni 2003 - 14:10 #13
-- endnu en tavetosse, ja, og jeg har slet ikke haft tid til nærmere at gennemgå det, endsige nærme mig den mindste lille test ;-(

Det gik vist for stærkt ,-|

function fetchValues(f){
  var upnew = f.upfile;
  var upold = document.form1.upfile;
  for (i=0;i<upold.length;i++){
    upnew[i].value = upold[i].value;
  }
  f.date.value = document.form1.date.value
  //og alle dine andre felter
}

-- hvis folk skal finde filer til upload, kan du vel ikke skrive noget i dem på forhånd, men der skal så være lige så mange hidden-inputs som du har file-inputs ...
Avatar billede swaq Nybegynder
06. juni 2003 - 14:16 #14
ok...
Det jeg mente med at skrive i inputfelterne var i det tilfælde, at en bruger har taste-taste, trykker 'Gem', hvorefter han ser sin aktivitet og skal godkende eller redigere den. Hvis han vælger rediger, kommer han tilbage til form1, hvor han nu kan ændre i det han har skrevet. (Derfor alle de der 'echo') Jeg bliver nemlig nødt til at skrive det han har skrevet, ellers skal han jo starte helt forfra... Det samme håbede jeg man kunne gøre med filerne, således, han ikke skal browse dem igen...
Avatar billede roenving Novice
06. juni 2003 - 14:17 #15
-- jeg fik opfattelsen af, at dine forms var tilstede samtidigt i brugerfladen, men som det du viser er, er der jo kun aktivitets-formen, så din form2 må jo have været igennem en behandling i din database ?-)
Avatar billede swaq Nybegynder
06. juni 2003 - 14:18 #16
ups... den kan ikke lige: "var upold = document.form1.upfile;"
Upfile er ikke et objekt..., hvad er der galt?
Avatar billede swaq Nybegynder
06. juni 2003 - 14:20 #17
nej, form2 er ikke sendt til db endnu. det der sker er, at:

if(isset($_POST['aktivitetGodkendt'])) {... HER GEMMES I DB (dvs. det sker når form2 bliver submittet ...}


"if(isset($_POST['sendAktivitet'])) {... HER ER FORM2 (dvs. if-sætningen vises hvis form1 er submittet ...}"
Avatar billede roenving Novice
06. juni 2003 - 14:20 #18
Der er kun een form -- og ikke nogen med navnet form1 .-|

Jeg tror kun du kan gøre det, hvis du har fået en absolut url, for som standard skjules brugerens actions udenfor browseren, du har jo selvfølgelig filnavnet, det kunne du vise ...
Avatar billede swaq Nybegynder
06. juni 2003 - 14:27 #19
ehh... høhø... skrev form1 og form2 for at gøre det kortere... men form1 = 'akForm' og form2 = 'godkendelsesForm'...

hmm... ok... det lader til at brugeren må browse nok engang...

desværre ser det udtil, at det heller ikke kan lade sig gøre at lave trickset med godkendelsesvinduet... Hvis jeg forsøger at uploade en fil: "c:\1.txt" vises denne fil lidt absurd i godkendelsesvinduet; "/tmp/phpuOEIKP", hvordan kan det lige være???
Avatar billede roenving Novice
06. juni 2003 - 14:28 #20
Skal det forstås sådan, at du først tager skemaet, som er udfyldt og returnerer det til brugeren _uden_ at gemme ?-)

-- for så ville det måske være værd at overveje, om det ikke var nemmere at arbejde med nogle skjulte/viste dele forsi vi så kunne bibeholde de oprindelige file-inputs, men skjule den første form og så vise den anden ...
Avatar billede swaq Nybegynder
06. juni 2003 - 14:30 #21
det er vist også det jeg forsøger at gøre, hehe... har bare ikke så stor succes med det :-)

hvad vil du i givetfald foreslå?
Avatar billede swaq Nybegynder
06. juni 2003 - 14:31 #22
Du kan evt. sende mig din mailadresse her: http://www.frederiksberg-jujutsu.dk/index.php?id=Mail%20Webmaster så kan jeg sende koden til dig, hvis du gider...
Avatar billede roenving Novice
06. juni 2003 - 14:34 #23
Lægge indholdet af den første form (undtaget file-inputs) ind i en <div id='form1' style="display:block">

og den anden form ind i en anden <div id='form2' style="display:none">

og dine file-inputs udenfor div'erne

Lave en submit på den anden form, og på den første form lave en action-knap, som skifter display-property på dem samt sørger for at feltværdier er synkroniserede ...
Avatar billede swaq Nybegynder
06. juni 2003 - 14:36 #24
wow... tabte lige pusten et øjeblik...
det med div'erne kan jeg nok klare...

også submitten på form2, meeen den med actionknappen og display-property samt feltværdierne kommer du nok til at hjælpe mig med :-)
Avatar billede roenving Novice
06. juni 2003 - 14:42 #25
-- det vil jeg også gerne <:-))

-- vi kom lidt forbi hinanden fra start, fordi jeg kigger på javascript mest udfra brugerflade-action-synspunktet, og ikke tænker så meget i serverside behandling ...

-- lige sådan en funktion, hvor du lige vil stille det indtastede op på en anden måde til godkendelse egner sig fortrinligt til client-side behandling, så brugeren ikke skal vente på knuder i forbindelsen (og du får lige en anelse mindre belastning og trafik på serveren !-)
Avatar billede swaq Nybegynder
06. juni 2003 - 14:45 #26
enig, men jeg syntes godt nok det driller lidt :-)

Forresten... tænk bare hvis man kunne det her på eksperten, så var mange indlæg formentligt bedre...
Avatar billede roenving Novice
06. juni 2003 - 14:47 #27
*gg*
Avatar billede swaq Nybegynder
06. juni 2003 - 14:50 #28
nå... nu har jeg lavet <div>-tag'ene men har lidt svært ved at ændre display-property i action="...", hvordan skal det gøres?
Avatar billede roenving Novice
06. juni 2003 - 14:50 #29
Men det der med at skjule/vise, dem har jeg pillet ved mange af bare indenfor de sidste dage/uger, så det er noget rimelig standard ,-)
Avatar billede swaq Nybegynder
06. juni 2003 - 14:52 #30
høhø... ikke lige for mig ;O)
Avatar billede roenving Novice
06. juni 2003 - 14:54 #31
*g*
Det er nemmest at gennemskue koden, hvis vi lægger den selvstændigt, og så kalder den onclick på en <button> eller <input type='button'> eller <a> ...
Avatar billede swaq Nybegynder
06. juni 2003 - 14:55 #32
kan du evt. give et eksempel :-)
Avatar billede swaq Nybegynder
06. juni 2003 - 14:56 #33
jeg kan sende dig koden, hvis du er interesseret...
Avatar billede roenving Novice
06. juni 2003 - 14:59 #34
På den første del:

<input type="button" name="sendAktivitet" value="Gem aktivitet" size="48" onclick="changeForm('Send');">

På den anden del:


<input type="button" name="Godkend" value="Godkend" size="48" onclick="this.form.submit()">

<input type="button" name="Rediger" value="Rediger" size="48" onclick="changeForm('Rediger');">

-- jeg kigger lige lidt på koden ...

(jeg har lavet alle til type=button for at være sikker på de er ens !-)
Avatar billede swaq Nybegynder
06. juni 2003 - 15:05 #35
great... har sat det ind i koden...
Avatar billede swaq Nybegynder
06. juni 2003 - 15:07 #36
changeForm('...') - hvad refererer Send og Rediger til?
Avatar billede roenving Novice
06. juni 2003 - 15:08 #37
-- og alt er indkapslet i den samme form ! (div'erne skiller bare sektioner i formen !-)

Hov, vil du overhovedet vise noget i den anden form, når alle felter er hidden ?-)
Avatar billede roenving Novice
06. juni 2003 - 15:09 #38
-- det er bare en mulighed for at skrive det ind i samme funktion, så vi ikke behøver flere !-)
Avatar billede swaq Nybegynder
06. juni 2003 - 15:10 #39
tjoo... ikke andet end brugerens input, hvilket jeg pt. gør ved hjælp af php, men det er nok en dum løsning...

Kan du give et lille eksempel på hvordan jeg arbejder med <div> ?
Avatar billede swaq Nybegynder
06. juni 2003 - 15:12 #40
lad os holde det hele i een form...
Avatar billede roenving Novice
06. juni 2003 - 15:16 #41
function changeForm(act){
  if (act=="Send"){
    f = document.akForm;
    //hvis du vil have nogle felter til at vise indtastninger uden mulighed for at redigere
    f.redNavn.value = f.akNavn.value;
    //kopier værdier slut
    document.getElementById('form1').style.display='none';
    document.getElementById('form2').style.display='block';
    f.Godkend.focus();
    return;
  }
  if (act=="Rediger"){
    document.getElementById('form2').style.display='none';
    document.getElementById('form1').style.display='block';
    f.akNavn.focus();
    return;
  }
}

Funktionen sender 'bare' brugeren frem og tilbage mellem to dele ag den samme form, men med vidt forskellige synsmæssige indtryk -- så indskrivning/godkendelse kan foregå client-side -- derfor er der i den første del også gjort plads til at kopiere værdier over i andre felter ...
Avatar billede roenving Novice
06. juni 2003 - 15:16 #42
Jeg prøver lige at lave et simplere eksempel, hvor du kan se funktionaliteten
Avatar billede swaq Nybegynder
06. juni 2003 - 15:17 #43
vil du stadig have at file-input holdes helt udenfor <div>?
Avatar billede roenving Novice
06. juni 2003 - 15:20 #44
Ja, sådan at de ikke ændres ( -- ha, vi kunne måske lave lidt tricks med deres style *g*)
Avatar billede swaq Nybegynder
06. juni 2003 - 15:25 #45
HOLD kæææææft hvor er det smart!!! Hvorfor talte jeg ikke med dig for 10 uger siden :-)
Avatar billede roenving Novice
06. juni 2003 - 15:54 #46
Jeg har kommet lidt 'lir' på, men det handler mest om ideen, prøv specielt at gå ind i navne- eller email feltet og skriv et mellemrum, når du er på godkendelses formen ;-)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<HTML>

<HEAD>

<TITLE>Swap forms</TITLE>

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">

<STYLE TYPE="text/css">
.label{
font-family:Verdana,Arial,sans-serif;
font-weight:bold;
font-size:8pt;
color:blue;
}
.input{
font-family:Times New Roman,Courier,serif;
font-weight:normal;
font-size:10pt;
}
.file{
font-family:Times New Roman,Courier,serif;
font-weight:normal;
font-size:10pt;
}

</STYLE>
<SCRIPT LANGUAGE="javascript" TYPE="text/javascript">
function changeForm(act){
  if (act=="Send"){
    f = document.akForm;
    //hvis du vil have nogle felter til at vise indtastninger uden mulighed for at redigere
    f.rdNavn.value = f.akNavn.value;
    f.rdEmail.value = f.akEmail.value;
    //kopier værdier slut
    document.getElementById('form1').style.display='none';
    document.getElementById('form2').style.display='block';
      document.styleSheets[0].rules[2].style.color='red';
    document.styleSheets[0].rules[2].style.fontFamily='Verdana,Arial,sans-serif';
    f.Godkend.focus();
    return;
  }
  if (act=="Rediger"){
    document.getElementById('form2').style.display='none';
    document.getElementById('form1').style.display='block';
    document.styleSheets[0].rules[2].style.color='black';
    document.styleSheets[0].rules[2].style.fontFamily='Times New Roman,Courier,serif';
    f.akNavn.focus();
    return;
  }
}
</SCRIPT>

</HEAD>

<BODY ONRESIZE ONLOAD>
<FORM NAME="akForm" ACTION="" ONSUBMIT="">

<DIV ID='form1' STYLE="display:block">
<H1>Indskriv oplysninger</H1><BR>
<TABLE BORDER="0">
  <TR><td class="label">Navn:</TD><TD ID="td1" CLASS="input"><INPUT NAME="akNavn" TYPE="text" size="48"></TD></TR>
  <TR><td class="label">Email:</TD><TD ID="td2" CLASS="input"><INPUT NAME="akEmail" TYPE="text" size="48"></TD></TR>
</TABLE>
<BR>
<input type="button" name="sendAktivitet" value="Gem aktivitet" size="48" onclick="changeForm('Send');">
<BR>
</DIV>
<DIV ID='form2' STYLE="display:none">
<H1>Godkend oplysninger</H1><BR>

<TABLE BORDER="0">
  <TR><td class="label">Navn:</TD><TD><INPUT CLASS="label" NAME="rdNavn" onfocus="this.form.Rediger.focus()" TYPE="text" size="48"></TD></TR>
  <TR><td class="label">Email:</TD><TD><INPUT CLASS="label" NAME="rdEmail" onfocus="this.form.Rediger.focus()" TYPE="text" size="48"></TD></TR>
</TABLE>
<BR>
<input type="button" name="Godkend" value="Godkend" size="48" onclick="alert('Her ville formen normalt\n være blevet sendt!')">
<BR>

<input type="button" name="Rediger" value="Rediger" size="48" onclick="changeForm('Rediger');">
<BR>

</DIV><BR>

<INPUT class="file" TYPE="file" NAME="upfile[]" SIZE="48"><BR>
<INPUT class="file" TYPE="file" NAME="upfile[]" SIZE="48"><BR>
<INPUT class="file" TYPE="file" NAME="upfile[]" SIZE="48"><BR>
<INPUT class="file" TYPE="file" NAME="upfile[]" SIZE="48"><BR>
<INPUT class="file" TYPE="file" NAME="upfile[]" SIZE="48"><BR>

</FORM>
</BODY>

</HTML>

-- bare prøv ...
Avatar billede swaq Nybegynder
06. juni 2003 - 16:32 #47
Super !!! Mange takker og bukker!

Send et svar så du ka' få dine mere end velfortjente point!
Avatar billede roenving Novice
06. juni 2003 - 16:37 #48
Velbekomme '-)
Avatar billede swaq Nybegynder
07. juni 2003 - 15:39 #49
Du får 200 point for ulejligheden, endnu engang mange tak :-)
Avatar billede roenving Novice
07. juni 2003 - 15:41 #50
-- og jeg takker for points ;~}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester