Hoe post ik een variabele met formdata?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Java developer met testervaring

Java developer met testervaring Functieomschrijving "De drempel tussen de burger en de Belastingdienst zo laag mogelijk houden: dat is de belangrijke taak van ons team. Dit doen we door het burgerportaal Mijn Belastingdienst continu te verbeteren." René, Java-specialist bij de Belastingdienst. De keten Interactie is een samenwerkingsverband van alle dienstonderdelen binnen de Belastingdienst. Samen zorgen we dat het contact met burgers en bedrijven goed kan plaatsvinden. Onze belangrijkste opgave? Zoveel mogelijk digitaliseren. Dat doen we binnen het onderdeel Informatievoorzieningen (IV), de ICT-organisatie van de Belastingdienst. Denk bij de producten die IV-Interactie ontwikkelt en onderhoudt aan portalen, formulieren en authenticatie- en

Bekijk vacature »

Snelle Jaap

Snelle Jaap

29/08/2018 19:36:10
Quote Anchor link
Ik probeer een javascript variabele te posten met formdata maar om de een of andere reden is de inhoud altijd leeg.

Op drie verschillende manieren heb ik geprobeerd het aan de praat te krijgen zonder succes.

Dit is mijn code op het moment:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<script>
$(function () {
    'use strict';
    var url = window.location.hostname === 'site.nl/demo/server/php/' ?
                '//site.nl/' : 'demo/server/php/';
    $('#fileupload').fileupload({
        url: url,
        dataType: 'json',
        formData: [
          { name: 'custom_dir', value: '/fileupload/<?PHP echo $_GET['bedrijf'] ?>/<?PHP echo $_GET['alias'] ?>/' },
          { name: 'cat_id', value: '<?PHP echo $gtc['id']; ?>'},
          { name: 'name', value: $( "#filename" ).val()},
      ],
      add: function (e, data) {
            data.context = $('<button/>').text('Uploaden starten').addClass('font-15 btn btn-secondary btn-lg waves-effect btnadd fullwidth')
                .appendTo('.uploadbutton')
                .click(function () {
                    data.submit();
                });
        },
        done: function (e, data) {
            $.each(data.result.files, function (index, file) {
                $('<p/>').text(file.name).appendTo('#files');
            });
        },
        progressall: function (e, data) {
            var progress = parseInt(data.loaded / data.total * 100, 10);
            $('#progress .progress-bar').css(
                'width',
                progress + '%'
            );
        }
    }).prop('disabled', !$.support.fileInput)
        .parent().addClass($.support.fileInput ? undefined : 'disabled');
});
</script>


Het gaat om dit stuk:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
formData: [
          { name: 'custom_dir', value: '/fileupload/<?PHP echo $_GET['bedrijf'] ?>/<?PHP echo $_GET['alias'] ?>/' },
          { name: 'cat_id', value: '<?PHP echo $gtc['id']; ?>'},
          { name: 'name', value: $( "#filename" ).val()},
      ],


De twee bovenstaande waardes worden netjes gepost maar de onderste blijft leeg, dat ziet er zo uit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
------WebKitFormBoundary59O7sCnGuJdp2LnV
Content-Disposition: form-data; name="custom_dir"

/fileupload/nieuw_bedrijf/inkoop_van_diensten/
------WebKitFormBoundary59O7sCnGuJdp2LnV
Content-Disposition: form-data; name="cat_id"

95
------WebKitFormBoundary59O7sCnGuJdp2LnV
Content-Disposition: form-data; name="name"


------WebKitFormBoundary59O7sCnGuJdp2LnV
Content-Disposition: form-data; name="files[]"; filename="198970050.pdf"
Content-Type: application/pdf


------WebKitFormBoundary59O7sCnGuJdp2LnV--


Naast bovenstaande manier heb ik het ook zo geprobeerd:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
var filename = $( "#filename" ).val();


Met daaronder dan:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
{ name: 'name', value: filename},


Ook dit blijft leeg.

Ten slotte probeerde ik het zo:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
var input = $('#filename');

//met dan daaronder

{ name: 'name', value: input.val()},


Wat doe ik verkeerd? Het vreemde is, als ik mijn input veld een standaard waarde geef, dan werkt het wel. Maarja ik wil natuurlijk dat mensen zelf de naam aan kunnen geven ipv dat dit vooraf vast staat...
 
PHP hulp

PHP hulp

20/10/2021 03:16:53
 
Thomas van den Heuvel

Thomas van den Heuvel

29/08/2018 23:52:38
Quote Anchor link
Dit zal iig nooit gelijk zijn aan een hostname:
site.nl/demo/server/php/

Daarnaast weet ik ook niet of je via $_GET parameters wilt injecteren in je JavaScript, weet niet precies wat de insteek is maar ik denk dat er andere/betere manieren zijn.

Als #filename het id is van een uploadveld, daar kun je sowieso weinig of niets mee, dit wordt afgeschermd, waarschijnlijk mede uit veiligheidsoverwegingen. Als je een custom naam wilt opgeven zul je hiervoor een apart veld moeten opgeven denk ik. Ook zul je bij het uploaden moeten controleren of je niet toevallig iets aan het overschrijven bent misschien.

Het is ook handig als je erbij vermeldt of / welke plugin/library of wat dan ook je hiervoor gebruikt? Is dit de eerder vermelde blueimp? Heb je de documentatie aldaar bekeken? En mist er toevallig geen leading slash in /demo/server/php/? Even uitproberen en debuggen maar.
 
Rob Doemaarwat

Rob Doemaarwat

30/08/2018 00:49:46
Quote Anchor link
Dit hele circus wordt al uitgevoerd op het moment dat je pagina laadt. Op dat moment zal die #filename nog geen waarde hebben. Geen idee hoe, maar je zult die formData pas moeten schrijven nadat er een keuze is gemaakt (en voordat ie 'm upload).

Maar zit de originele bestandsnaam niet gewoon in je $_FILES['files']['name']?
 
Snelle Jaap

Snelle Jaap

30/08/2018 10:56:38
Quote Anchor link
@thomas Het is mijn eigen inputveld (gewoon tekst) die ik heb toegevoegd. Ik heb namelijk zelf een functie toegevoegd om naast het uploaden ook de uploadgegevens toe te voegen in mijn database (custom directory, en id van de pagina waar vanaf wordt geupload), nu wil ik ook de optie meegeven dat iemand een eigen naam kan kiezen voor het bestand welke dan in een lijst weergeven wordt. Het gaat idd om blueimp. Slash haalt niks uit, alles werkt ook naar behoren (ook het opslaan in de database van de custom directory en id) maar de naam blijft leeg.

@rob Ik zoek niet de filename van het bestand, die weet ik wel te achterhalen (zit al in mijn formdata post wanneer ik in mijn network tab kijk). Wat ik probeer is de mogelijkheid te creeeren om zelf een naam te kiezen voor een bestand.
 
Rob Doemaarwat

Rob Doemaarwat

30/08/2018 13:04:33
Quote Anchor link
Maar, dan blijft m'n eerste opmerking overeind: alles in $('#fileupload').fileupload({ ... }) wordt bij de initialisatie van de pagina uitgevoerd. Wat de gebruiker dus daarna in het veld #filename plaatst komt niet meer in de formData. Op de XHR submit zul je dus in moeten (kunnen) haken.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.