move_uploade_file functie met Javascript

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bryan De Baar

Bryan De Baar

27/08/2020 00:52:20
Quote Anchor link
Goede avond,


Ik loop tegen een probleem aan en ik krijg het niet voor elkaar.
Het betreft een input file die ik met Javascript AJAX via PHP naar de server wil uploaden

Ik zal de code even zonder alle beveiliging tonen maar enkel de input, Javascript en een stukje PHP

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<input type="file" class="quote_attachment" id="quote_attachment"/>


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
var attachment         = document.getElementById("quote_attachment");
var file            = attachment.files[0].fileName;
xhttp.send('attachment ='+attachment);


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
move_uploaded_file($_FILES['attachment']['tmp_name'], '/quoteattachment/');
?>



Als ik in de PHP code print_r($_FILES['attachement']; doe dan krijg ik NULL of undefined terug.
Gewijzigd op 27/08/2020 00:52:44 door Bryan De Baar
 
PHP hulp

PHP hulp

28/03/2024 22:01:47
 
- Ariën  -
Beheerder

- Ariën -

27/08/2020 01:01:54
Quote Anchor link
attachement v.s. attachment.
Zie de verschillen.
Gewijzigd op 27/08/2020 01:02:16 door - Ariën -
 
Bryan De Baar

Bryan De Baar

27/08/2020 13:32:38
Quote Anchor link
Ik ben nu zover dat ik dit als output krijg C:\fakepath\image23.png

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php move_uploaded_file($_FILES['attachment']['tmp_name'], 'uploads'); ?>


Deze heb ik in een if statement gezet

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php if(move_uploaded_file($_FILES['attachment']['tmp_name'], 'uploads')){
echo "Gelukt";
}
else{
echo "mislukt";
}

 ?>

 


De map uploads staat in de zelfde map op de server als deze PHP file, maar toch krijg ik mislukt terug
Gewijzigd op 27/08/2020 13:35:19 door Bryan De Baar
 
- SanThe -

- SanThe -

27/08/2020 14:16:32
Quote Anchor link
'uploads' zal een directory zijn geef eens een naam mee: 'uploads/naam.jpg' (indien het een jpg is)
 
Thomas van den Heuvel

Thomas van den Heuvel

27/08/2020 15:10:40
Quote Anchor link
Heb je uberhaupt gecontroleerd wat er in $_FILES zit? Ik weet niet of een referentie naar het attachment-veld er automagisch voor zorgt dat de attachment verzonden wordt met een simpel 'attachment ='+attachment? Hoe bouw je "xhttp" verder op? Het feit dat je NULL / undefined terugkrijgt (is dit in PHP of JavaScript?) houdt waarschijnlijk in dat er in eerste instantie niets wordt geupload. Zou je niet iets met FormData moeten doen ofzo?

Deel het ook op in stappen; je controleert nu helemaal aan het einde of je file is gearriveerd. Sja, dan is het koffiedik kijken waar dit misging als je "mislukt" terugkrijgt. Ik zou het ten minste opsplitsen in twee delen:
- het uploaden via JavaScript enerzijds, en
- het verder afhandelen van de upload in PHP anderzijds

Dit zijn twee stappen die je compleet in afzondering van elkaar zou kunnen behandelen.

Het "probleem" is hier wederom niet het "probleem", het probleem is dat je -mogelijk in het algemeen- geen handvaten hebt om dit (soort) vraagstuk(ken) te tacklen. Je weet simpelweg niet hoe je (dit) moet debuggen wat blijkt uit het feit dat je niet kunt aangeven waar het misgaat. Als je dit kon dan was je waarschijnlijk zelf wel in staat geweest om de oorzaak dat het niet werkt weg te nemen. Dat zou je nu juist moeten onderzoeken want dan heb je de bron van je probleem te pakken, en (dan pas) kun je naar een oplossing toewerken.

Dit vergt misschien een zekere mate van abstractie. Zelfs als je ergens code hebt "geleend" hoef je niet precies inhoudelijk te begrijpen wat er gebeurt, maar je zult wel moeten snappen en kunnen controleren wat voor data je er in stopt en welke je vervolgens terug zou moeten ontvangen.

Stap 0 in dit proces is gewoon domweg informatie verzamelen. De makkelijkste methode hiervoor? Dump alles naar je scherm. Concentreer je op één stap. En pas als je weet dat onderdeel A volledig werkt, en je dus hebt uitgesloten dat daar de fout zit, heeft het pas zin om je verder te verdiepen in onderdeel B. Het is simpelweg een proces van stapsgewijze eliminatie. Gebruik de hulpmiddelen die PHP heeft (melden+weergeven van fouten). Lees eventuele foutmeldingen en begrijp wat deze betekenen. Controleer eventueel errorlogs (maar het rechtstreeks weergeven van fouten op je scherm is efficiënter). Raadpleeg php.net. Hier staat doorgaans glashelder uitgelegd wat een bepaalde return-waarde van een functie of methode betekent. $_FILES heeft ook een 'error' veld, die zou je eigenlijk altijd moeten inspecteren of deze de waarde UPLOAD_ERR_OK heeft voordat je ook maar overweegt om iets met het bestand te doen.

Ik zou je aanraden dat je leert te debuggen. Dit stelt je in staat om zelf je eigen code te analyseren, fouten op te sporen en zelf op te lossen. Dit vraagstuk is in principe een prima startpunt. Met een handjevol eenvoudige voorzieningen in je code is het verzamelen van informatie, en daarmee het debuggen van potentiële problemen, echt zeer eenvoudig. Dit draagt ook bij aan een groter begrip van hoe (je eigen) code werkt. Met deze hulpmiddelen til je jezelf naar een hoger niveau. Ik ben nog steeds van mening dat het leren debuggen de beste manier is om (echt) te leren programmeren. Het stelt je in staat om jezelf en anderen uit te leggen wat code doet en te motiveren waarom je dingen op een bepaalde manier programmeert.

Dan kan het voorkomen dat je er nog steeds niet uitkomt, en dan is er een forum als deze waar je je vraagstuk kunt plaatsen. Je kunt dan al meteen aangeven wat je hebt geprobeerd, waar je vastloopt met welke melding, en waarom je niet verder komt. Dat soort vragen zijn over het algemeen ook een stuk interessanter.
Gewijzigd op 27/08/2020 15:28:46 door Thomas van den Heuvel
 



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.