Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Lege data bij POST in PHP, jQuery en AJAX

Pagina: 1
Acties:
  • 541 views

  • The Great HooD
  • Registratie: September 2009
  • Laatst online: 13-09-2014
Ik zit met een klein probleem. Ik wil een image uploader in PHP maken. Nu is dit helemaal gelukt, en wil ik het gaan implementeren in mijn bestaande applicatie. Probleem is echter dat het dan niet meer werkt. Ik heb verschillende bugtesten gedaan en zo kom ik op het probleem uit dat de data die doorgestuurd moet worden helemaal niet wordt doorgestuurd, sterker nog het lijkt alsof de hele PHP file niet wordt gebruikt.

1. Zou het kunnen komen dat ik 2 keer een POST gebruik. Ik heb in mijn applicatie een optie om een logo te uploaden, hier gebruiken ze dan een apart formulier voor met een aparte uploadknop, de gehele AJAX call werkt, wordt allemaal doorlopen, echter de data die ik terugkrijg is leeg, iets wat niet klopt en ik denk dat het PHP file niet wordt aangeroepen? Het rare is dat het los van de applicatie wel werkt, maar zodra ik het wil implementeren niet meer.

Hieronder staan de files. Ik log met de console wat voor data is doorgezonden, wat ik in mijn console krijg te zien is niets, leeg. Kan het zijn dat er een conflict in de javascript is? Want zodra dat het geval zou ik dat in mijn console te zien krijgen.

PHP:
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
<?php 
//kijken of er een bestand is geselecteerd 
if(isset($_FILES['bestand'])) { 
    //als het bestand groter is dan 102400 bytes(100kb) word hij niet toegelaten 
    if($_FILES['bestand']['size'] > 102400) { 
        echo "Het bestand is <b>" . $_FILES['bestand']['size'] . "</b>, het maximale toegstaan is <b>102400</b>"; 
    } else { 
        //kijken of het bestand wel een gif, png of jpg is 
        if($_FILES['bestand']['type'] == "image/gif" || $_FILES['bestand']['type'] == "image/png"  || $_FILES['bestand']['type'] == "image/pjpeg" || $_FILES['bestand']['type'] == "image/jpeg") { 
            //kijken of er een nieuwe naam aan het bestand is gegeven 
            if(empty($_POST['naam'])) { 
                $naam = $_FILES['bestand']['name']; 
            } else { 
                //strip de extensie om die achter de nieuwe bestandsnaam te plakken 
                $x = strrchr($_FILES['bestand']['name'], "."); 
                $naam = $_POST['naam'] . $x; 
            } 
            //het bestand uploaden met de nieuwe of oude naam 
            move_uploaded_file($_FILES['bestand']['tmp_name'], "uploads/" . $naam); 
            //voor linux of unix hosts chmodden we het bestand naar 777 zodat iedereen um kan zien 
            chmod("uploads/" . $naam, 0777); 
            echo "Het plaatje is geupload<br />";
            echo "Op deze plaats: uploads/". $naam ."<br />";
            echo "<img src='uploads/$naam'>";
        } else { 
            echo "Het bestand is geen png, jpg of gif"; 
        } 
    } 
}
?>


JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
jQuery(document).ready(function() {
jQuery("#uploadform").submit(function(e) {
        console.log('upload die handel');
        e.preventDefault();
        jQuery.ajax({
            url: "upload.php",
            type: "POST",
            data:  new FormData(this),
            contentType: false,
            cache: false,
            processData:false,
            success: function(data)
            {
                console.log('upload gelukt');
                console.log(data);
                $("#logouploadtekst").append(data);
            },
            error: function() 
            {
                $("#logouploadtekst").html('Great failure!');
            }           
       });
    });
    });


Heel simpel formpje:

HTML:
1
2
3
4
<FORM id="uploadform" ACTION="" METHOD="post" ENCTYPE="multipart/form-data"> 
<INPUT TYPE="file" NAME="bestand"><BR />
<INPUT TYPE="submit" NAME="submit" VALUE="Upload" id="uploadFormButton">
</FORM>

[ Voor 57% gewijzigd door The Great HooD op 13-09-2014 13:06 ]


  • Merethil
  • Registratie: December 2008
  • Laatst online: 21:36
Volgens mij moet je in je php script sowieso $_POST uitlezen ipv files. Verder kan ik niet goed zien wat je voor data meestuurt, kan je je form laten zien?

  • The Great HooD
  • Registratie: September 2009
  • Laatst online: 13-09-2014
Merethil schreef op zaterdag 13 september 2014 @ 13:03:
Volgens mij moet je in je php script sowieso $_POST uitlezen ipv files. Verder kan ik niet goed zien wat je voor data meestuurt, kan je je form laten zien?
Zie mijn edit hierboven.

Ja in mijn bestaande applicatie lees ik nu alle post variabelen uit die ik via Javascript en AJAX naar de PHP file stuur..

Verwijderd

Heb je enig idee wat er zou gebeuren als ik een bestand zou uploaden dat "shell.php" heet en waarbij ik zou aangeven dat het mimetype image/gif heeft?

  • Saven
  • Registratie: December 2006
  • Laatst online: 21-11 09:51

Saven

Administrator

Volgens mij kun je niet uploaden via AJAX

  • The Great HooD
  • Registratie: September 2009
  • Laatst online: 13-09-2014
Verwijderd schreef op zaterdag 13 september 2014 @ 13:07:
Heb je enig idee wat er zou gebeuren als ik een bestand zou uploaden dat "shell.php" heet en waarbij ik zou aangeven dat het mimetype image/gif heeft?
Op dit moment probeer ik eerst nog te zorgen dat een daadwerkelijke image uploaden werkt. Dan kan ik gaan kijken naar beveiliging.

  • The Great HooD
  • Registratie: September 2009
  • Laatst online: 13-09-2014
Saven schreef op zaterdag 13 september 2014 @ 13:09:
Volgens mij kun je niet uploaden via AJAX
Als het mij lukt apart van mijn bestaande applicatie moet het ook lukken zodra ik het wil implementeren.

  • Merethil
  • Registratie: December 2008
  • Laatst online: 21:36
The Great HooD schreef op zaterdag 13 september 2014 @ 13:07:
[...]

Zie mijn edit hierboven.

Ja in mijn bestaande applicatie lees ik nu alle post variabelen uit die ik via Javascript en AJAX naar de PHP file stuur..
Volgens wat je aan ons laat zien in je ts lees je toch echt $_FILES uit ipv $_POST...

  • Slurpgeit
  • Registratie: November 2003
  • Laatst online: 19-11 09:28
Misschien zie ik het niet goed, maar als ik nu een .php bestand upload en met een proxy (Burp, ZAP, etc.) de content type naar image/jpg aanpas, dan kan ik dus php bestanden uploaden (en uitvoeren)?

  • Saven
  • Registratie: December 2006
  • Laatst online: 21-11 09:51

Saven

Administrator

The Great HooD schreef op zaterdag 13 september 2014 @ 13:09:
[...]

Als het mij lukt apart van mijn bestaande applicatie moet het ook lukken zodra ik het wil implementeren.
Daar heb je een library voor nodig met fancy dingetjes. Plain AJAX ga je niet mee kunnen uploaden :w

http://stackoverflow.com/a/13033190

https://www.google.nl/#q=php+ajax+upload

[ Voor 4% gewijzigd door Saven op 13-09-2014 13:15 ]


  • The Great HooD
  • Registratie: September 2009
  • Laatst online: 13-09-2014
Merethil schreef op zaterdag 13 september 2014 @ 13:10:
[...]


Volgens wat je aan ons laat zien in je ts lees je toch echt $_FILES uit ipv $_POST...
Ja je hebt gelijk, maar dit is op dit moment de uploader op zichzelf. In de applicatie waar ik deze uploader probeer in te verwerken lees ik wel de POSTS uit:

PHP:
1
2
3
4
5
6
$naam        = $_POST['naam'];
$organisatie            = $_POST['organisatie'];
$straatennr     = $_POST['straatennr'];
$emailadres = $_POST['email'];
$straatennr = $_POST['straatennr'];
$postcode = $_POST['postcode'];


JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var naam            = jQuery('input[name=naam]').val();
    
        var organisatie     = jQuery('input[name=organisatie]').val();
        
        var straatennr      = jQuery('input[name=straatennr]').val();
        var postcode        = jQuery('input[name=postcode]').val();

 var  post_data = {'naam':naam, 'organisatie':organisatie, 'straatennr':straatennr, 'postcode':postcode};

jQuery.ajax({
        type : 'POST',
        url : 'zendemail.php',
        data :  post_data,
        success: function(data){
           jQuery('#resultaat').html(data);
        },
        error:function(){
            alert("failure");        
        }
    });
Saven schreef op zaterdag 13 september 2014 @ 13:14:
[...]

Daar heb je een library voor nodig met fancy dingetjes. Plain AJAX ga je niet mee kunnen uploaden :w

https://www.google.nl/#q=php+ajax+upload
Een library zoals jQuery? ;w

[ Voor 11% gewijzigd door The Great HooD op 13-09-2014 13:21 ]


  • Saven
  • Registratie: December 2006
  • Laatst online: 21-11 09:51

Saven

Administrator

The Great HooD schreef op zaterdag 13 september 2014 @ 13:14:
[...]

Ja je hebt gelijk, maar dit is op dit moment de uploader op zichzelf. In de applicatie waar ik deze uploader probeer in te verwerken lees ik wel de POSTS uit:

PHP:
1
2
3
4
5
6
$naam        = $_POST['naam'];
$organisatie            = $_POST['organisatie'];
$straatennr     = $_POST['straatennr'];
$emailadres = $_POST['email'];
$straatennr = $_POST['straatennr'];
$postcode = $_POST['postcode'];


JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var naam            = jQuery('input[name=naam]').val();
    
        var organisatie     = jQuery('input[name=organisatie]').val();
        
        var straatennr      = jQuery('input[name=straatennr]').val();
        var postcode        = jQuery('input[name=postcode]').val();

 var  post_data = {'naam':naam, 'organisatie':organisatie, 'straatennr':straatennr, 'postcode':postcode};

jQuery.ajax({
        type : 'POST',
        url : 'zendemail.php',
        data :  post_data,
        success: function(data){
           jQuery('#resultaat').html(data);
        },
        error:function(){
            alert("failure");        
        }
    });



[...]

Een library zoals jQuery? ;w
Ik probeer je gewoonte te helpen hoor, maar je wil niet luisteren?

  • The Great HooD
  • Registratie: September 2009
  • Laatst online: 13-09-2014
Saven schreef op zaterdag 13 september 2014 @ 13:51:
[...]

Ik probeer je gewoonte te helpen hoor, maar je wil niet luisteren?
En ik probeer je te zeggen dat ik met jQuery dit wel allemaal kan doen. Maar goed. De "hulp" hier op T.net is tegenwoordig ook niet meer wat het geweest is. Ga zelf wel weer verder. Lezen is oh zo lastig.

  • Merethil
  • Registratie: December 2008
  • Laatst online: 21:36
The Great HooD schreef op zaterdag 13 september 2014 @ 13:14:
[...]

Ja je hebt gelijk, maar dit is op dit moment de uploader op zichzelf. In de applicatie waar ik deze uploader probeer in te verwerken lees ik wel de POSTS uit:

PHP:
1
2
3
4
5
6
$naam        = $_POST['naam'];
$organisatie            = $_POST['organisatie'];
$straatennr     = $_POST['straatennr'];
$emailadres = $_POST['email'];
$straatennr = $_POST['straatennr'];
$postcode = $_POST['postcode'];


JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var naam            = jQuery('input[name=naam]').val();
    
        var organisatie     = jQuery('input[name=organisatie]').val();
        
        var straatennr      = jQuery('input[name=straatennr]').val();
        var postcode        = jQuery('input[name=postcode]').val();

 var  post_data = {'naam':naam, 'organisatie':organisatie, 'straatennr':straatennr, 'postcode':postcode};

jQuery.ajax({
        type : 'POST',
        url : 'zendemail.php',
        data :  post_data,
        success: function(data){
           jQuery('#resultaat').html(data);
        },
        error:function(){
            alert("failure");        
        }
    });



[...]

Een library zoals jQuery? ;w
Dit is volgens mij een heel andere POST die je probeert te doen, hier komt je bestand helemaal niet in voor. Maak nou eens een normale, goede post met alle code erin die relevant is en waar het (ongeveer) mis gaat.
The Great HooD schreef op zaterdag 13 september 2014 @ 14:32:
[...]

En ik probeer je te zeggen dat ik met jQuery dit wel allemaal kan doen. Maar goed. De "hulp" hier op T.net is tegenwoordig ook niet meer wat het geweest is. Ga zelf wel weer verder. Lezen is oh zo lastig.
Dit maakt het er voor anderen natuurlijk niet aantrekkelijker op om mee te willen helpen. Vriendelijkheid is ook niet meer wat het geweest is...

  • The Great HooD
  • Registratie: September 2009
  • Laatst online: 13-09-2014
Merethil schreef op zaterdag 13 september 2014 @ 14:42:
[...]


Dit is volgens mij een heel andere POST die je probeert te doen, hier komt je bestand helemaal niet in voor. Maak nou eens een normale, goede post met alle code erin die relevant is en waar het (ongeveer) mis gaat.
Ja dit is ook een deel van de andere applicatie, om je te laten zien dat ik het wel met $_POST ophaal.
Zie mijn eerste post:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
jQuery(document).ready(function() {
jQuery("#uploadform").submit(function(e) {
        console.log('upload die handel');
        e.preventDefault();
        jQuery.ajax({
            url: "upload.php",
            type: "POST",
            data:  new FormData(this),
            contentType: false,
            cache: false,
            processData:false,
            success: function(data)
            {
                console.log('upload gelukt');
               HIER GAAT HET MIS > ER IS GEEN DATA console.log(data);
                $("#logouploadtekst").append(data);
            },
            error: function() 
            {
                $("#logouploadtekst").html('Great failure!');
            }           
       });
    });
    });

Zie hierboven het gaat mis door het feit dat ik geen data terugkrijg..

Wat betreft de implementatie, ik kan wel de hele applicatie hierin zetten maar dat is een zo'n grote applicatie dat dat het niet waard is..
Dit maakt het er voor anderen natuurlijk niet aantrekkelijker op om mee te willen helpen. Vriendelijkheid is ook niet meer wat het geweest is...
Ik wordt er gewoon een beetje moe van.

[ Voor 3% gewijzigd door The Great HooD op 13-09-2014 14:49 ]


  • Saven
  • Registratie: December 2006
  • Laatst online: 21-11 09:51

Saven

Administrator

Hoe vaak moet ik nog zeggen dat je via een AJAX post niet kunt uploaden?

  • The Great HooD
  • Registratie: September 2009
  • Laatst online: 13-09-2014
Saven schreef op zaterdag 13 september 2014 @ 14:52:
Hoe vaak moet ik nog zeggen dat je via een AJAX post niet kunt uploaden?
Dan moet je me toch uitleggen waarom mij dat wel lukt...?

HTML:
1
2
3
4
5
6
7
8
9
<FORM id="uploadform" ACTION="" METHOD="post" ENCTYPE="multipart/form-data"> 
<INPUT TYPE="file" NAME="bestand"><BR />
<INPUT TYPE="submit" NAME="submit" VALUE="Upload" id="uploadFormButton">
</FORM>

<div id="logouploadtekst"></div>

</body>
</html>


JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
jQuery(document).ready(function() {
jQuery("#uploadform").submit(function(e) {
        console.log('upload die handel');
        e.preventDefault();
        jQuery.ajax({
            url: "upload.php",
            type: "POST",
            data:  new FormData(this),
            contentType: false,
            cache: false,
            processData:false,
            success: function(data)
            {
                console.log('upload gelukt');
                console.log(data);
                $("#logouploadtekst").append(data);
            },
            error: function() 
            {
                $("#logouploadtekst").html('Great failure!');
            }           
       });
    });
    });


PHP:
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
<?php 
//kijken of er een bestand is geselecteerd 
if(isset($_FILES['bestand'])) { 
    //als het bestand groter is dan 102400 bytes(100kb) word hij niet toegelaten 
    if($_FILES['bestand']['size'] > 102400) { 
        echo "Het bestand is <b>" . $_FILES['bestand']['size'] . "</b>, het maximale toegstaan is <b>102400</b>"; 
    } else { 
        //kijken of het bestand wel een gif, png of jpg is 
        if($_FILES['bestand']['type'] == "image/gif" || $_FILES['bestand']['type'] == "image/png"  || $_FILES['bestand']['type'] == "image/pjpeg" || $_FILES['bestand']['type'] == "image/jpeg") { 
            //kijken of er een nieuwe naam aan het bestand is gegeven 
            if(empty($_POST['naam'])) { 
                $naam = $_FILES['bestand']['name']; 
            } else { 
                //strip de extensie om die achter de nieuwe bestandsnaam te plakken 
                $x = strrchr($_FILES['bestand']['name'], "."); 
                $naam = $_POST['naam'] . $x; 
            } 
            //het bestand uploaden met de nieuwe of oude naam 
            move_uploaded_file($_FILES['bestand']['tmp_name'], "uploads/" . $naam); 
            //voor linux of unix hosts chmodden we het bestand naar 777 zodat iedereen um kan zien 
            chmod("uploads/" . $naam, 0777); 
            echo "Het plaatje is geupload<br />";
            echo "Op deze plaats: uploads/". $naam ."<br />";
            echo "<img src='uploads/$naam'>";
        } else { 
            echo "Het bestand is geen png, jpg of gif"; 
        } 
    } 
}
?>

[ Voor 83% gewijzigd door The Great HooD op 13-09-2014 14:59 ]


  • Merethil
  • Registratie: December 2008
  • Laatst online: 21:36
The Great HooD schreef op zaterdag 13 september 2014 @ 14:47:
[...]

Ja dit is ook een deel van de andere applicatie, om je te laten zien dat ik het wel met $_POST ophaal.
Zie mijn eerste post:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
jQuery(document).ready(function() {
jQuery("#uploadform").submit(function(e) {
        console.log('upload die handel');
        e.preventDefault();
        jQuery.ajax({
            url: "upload.php",
            type: "POST",
            data:  new FormData(this),
            contentType: false,
            cache: false,
            processData:false,
            success: function(data)
            {
                console.log('upload gelukt');
               HIER GAAT HET MIS > ER IS GEEN DATA console.log(data);
                $("#logouploadtekst").append(data);
            },
            error: function() 
            {
                $("#logouploadtekst").html('Great failure!');
            }           
       });
    });
    });

Zie hierboven het gaat mis door het feit dat ik geen data terugkrijg..

Wat betreft de implementatie, ik kan wel de hele applicatie hierin zetten maar dat is een zo'n grote applicatie dat dat het niet waard is..


[...]

Ik wordt er gewoon een beetje moe van.
Je hebt dit form:
HTML:
1
2
3
4
<FORM id="uploadform" ACTION="" METHOD="post" ENCTYPE="multipart/form-data"> 
<INPUT TYPE="file" NAME="bestand"><BR />
<INPUT TYPE="submit" NAME="submit" VALUE="Upload" id="uploadFormButton">
</FORM>


En stuurt het naar je upload.php bestand met de volgende jquery:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
jQuery(document).ready(function() {
jQuery("#uploadform").submit(function(e) {
        console.log('upload die handel');
        e.preventDefault();
        jQuery.ajax({
            url: "upload.php",
            type: "POST",
            data:  new FormData(this),
            contentType: false,
            cache: false,
            processData:false,
            success: function(data)
            {
                console.log('upload gelukt');
                console.log(data);
                $("#logouploadtekst").append(data);
            },
            error: function() 
            {
                $("#logouploadtekst").html('Great failure!');
            }           
       });
    });
    });


Toch?

Ik zie je echter NERGENS in je PHP dit doen:

PHP:
1
2
3
if(isset($_FILES['bestand'])) {
  //code
}


behalve in een los stukje code dat we niet eens weten waar het staat.

Je stuurt een bestand op via een POST, maar probeert hem nergens uit te lezen. En voor je zegt dat het ergens anders in je code zit: Maak een DEGELIJKE testcase waar wij mee kunnen kijken of we het kunnen oplossen.
Als je geen zin hebt in moeite doen, noch in ons van de juiste informatie voorzien, ga dan ook niet zeuren dat we niet willen helpen, want tot nu toe heb ik drie man gezien die wilden helpen en allen heb je tot nu toe afgebekt omdat we het niet willen snappen terwijl we niet alle informatie hebben.

  • The Great HooD
  • Registratie: September 2009
  • Laatst online: 13-09-2014
Ik denk dat we er niet uitkomen. Ik heb een beetje het gevoel dat ik in herhaling val en constant dezelfde stukken code hier aan het posten ben.


Je ziet me nergens _FILES doen? Really? :')

[ Voor 46% gewijzigd door The Great HooD op 13-09-2014 15:17 ]


  • Merethil
  • Registratie: December 2008
  • Laatst online: 21:36
The Great HooD schreef op zaterdag 13 september 2014 @ 15:14:
Ik denk dat we er niet uitkomen. Ik heb een beetje het gevoel dat ik in herhaling val en constant dezelfde stukken code hier aan het posten ben.


Je ziet me nergens _FILES doen? Really? :')
Lees het eens goed: Ik zeg dat ik je nergens _FILES zie doen in de code waar je probeert je code in te bouwen.
Als je nou eens neerzet:
"Ik heb deze code:
code:
1
//code

"
waarbij //code wordt vervangen met je huidige, volledige (of voor zover nodig volledige) upload.php,
dan kunnen we meekijken met wat jij nu in je .PHP hebt staan. Zolang we twee loshangende stukken code hebben waarbij je zegt "Zodra ik code1 in code2 wil stoppen, gaat 't stuk" komen we er natuurlijk niet uit.

Maar mocht je geen hulp meer willen omdat we blijkbaar constant hetzelfde vragen (gezien je niet levert ;) ), zet dan, mocht je in je eentje uitvinden wat er mis is, in ieder geval het eindresultaat hier neer voor anderen.
Mocht je toch willen dat we je helpen, lees dan nog eens wat iedereen zegt en maak gewoon een duidelijke test.

[ Voor 4% gewijzigd door Merethil op 13-09-2014 15:41 ]


  • juiced01
  • Registratie: December 2009
  • Laatst online: 21-11 16:43
Overigens werkt de HTML5 FormData API in Internet Explorer pas vanaf versie 10. Ik weet niet of je applicatie cross-browser compatible moet zijn, maar misschien is het iets om rekening mee te houden.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

The Great HooD schreef op zaterdag 13 september 2014 @ 15:14:
Ik denk dat we er niet uitkomen. Ik heb een beetje het gevoel dat ik in herhaling val en constant dezelfde stukken code hier aan het posten ben.


Je ziet me nergens _FILES doen? Really? :')
Misschien moet je eens kappen met dat toontje tegen mensen die je proberen te helpen. :')

Ik ga dit topic sluiten. Als je geen advies wil moet je geen topic openen.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1

Dit topic is gesloten.