Ik heb een probleem met het submitten van een form.
Het definitieve checken gebeurt in PHP.
Maar om te voorkomen dat een file onnodig temp wordt opgeslagen
validate ik de form ook in javascript.

De procedure is al volgt:

1 - een bestand wordt gekozen
2 - (eventueel tekst en) bestand worden gecheckt.
3 - bij oke wordt de 'submitknop' getoond.
4 - versturen

Wanneer ik alles de eerste keer juist heb werkt alles door naar PHP.
En wordt het bestand opgeslagen.

Is er wat verkeerd dan komt vanuit javascript de melding wat er verkeerd is.
Maar dan wordt de vorige juiste submit herhaald, en weer opnieuw opgeslagen.

Ik heb al geprobeerd met aparte input file reset, met form.reset(), met location.reload();
Ook wat geprobeerd met onsubmit = "return showname()".
Maar krijg het niet voor elkaar.
De uitwerking is dan wat anders...
Maar in ieder geval niet correct.

Hier wat stukjes uit de javascript en HTML.
Myvar is de waarde voor oke(1) of fout(0);


<form id = "vorm" method="post" enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input type="hidden" name="MAX_FILE_SIZE" value="4000000">
<div class="upload" id="upload"><input name="userfile"  id = "userfile"  type="file" style="text-align:left;" onchange = "showname()"></div>
<div class="uploadA"><input type="image" id="process" name="process" type="submit" value= "submit" src="button2.png" border="0"></div> 
</form>

<script>
var myVar = 1;

function showname () {
.
.
.
.
.
if (myVar == 0)
{
//document.getElementById("userfile").value = null;
//vorm.reset();
//location.reload();
}
}



[size=xsmall]Toevoeging op 20/10/2017 14:48:20:[/size]

Ik denk dat het opgelost is...
Myvar weg en in die plek: return false;


<div class="upload" id="upload"><input name="userfile"  id = "userfile"  type="file" style="text-align:left;" onchange = "return showname()"></div>

De submit met image werkt niet in IE11 en Edge.
Ook al geprobeerd om image in de button te zetten bij CSS.
Maar werkte ook niet.

Chrome en Safari geven geen probleem.


<div class="uploadA">
<input type="image" id="process" value= "submit" name="process" src="button2.png" border="0">
</div>

Even voor de duidelijkheid, er wordt niets "onnodig" opgeslagen tenzij jouw code dit zelf doet. Bestanden worden standaard geupload naar een tijdelijke locatie die op een gegeven moment wordt geleegd. Alleen tijdens de uitvoering van code heb je toegang tot, of liever gezegd, weet je van het bestaan van, geuploade bestanden. Deze informatie trek je uit $_FILES. Met behulp van de informatie in deze superglobal verplaats je de bestanden naar een andere, permanente(re) locatie. Na afloop van de uitvoering van je code bestaat $_FILES niet meer, dus de "link" (verwijzingen naar de tijdelijke bestandsnamen op de tijdelijke locatie) naar de geuploade bestanden zijn dan verloren/niet langer bekend waardoor deze dan dus praktisch gezien niet meer "bestaan".

Als het foutloos invullen van het formulier zo'n heikel punt is zou je de bestanden apart kunnen uploaden (in een apart formulier - zie voor inspiratie bijvoorbeeld hoe je in gmail attachments kunt toevoegen), maar dit houdt dan ook in dat je het verwijderen (naast het verplaatsen naar een permanente(re) locatie) van bestanden zelf zult moeten regelen.

EDIT: het is dus in principe geen probleem dat er bestanden worden geupload, deze worden normaal gesproken vanzelf opgeschoond.
Bedanktvoor je reactie.
Het probleem is nu opgelost...
Toch via button. En in CSS een image.
Toen werkte alles.
Wat betreft de tijdelijke opslag.
Ik praat over validate via javascript (clientside).
En als er fouten in zitten wordt er niet gesubmit.
Dus niet doorgestuurd naar PHP.
Dan wordt er toch niks opgeslagen?

Is alles oke dan wordt alles doorgestuurd naar de PHP.
En wederom gevalideerd.
Als er niets verstuurd wordt, wordt er ook niets opgeslagen nee.

Reageren