move_uploade_file functie met Javascript
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)
1
2
3
2
3
var attachment = document.getElementById("quote_attachment");
var file = attachment.files[0].fileName;
xhttp.send('attachment ='+attachment);
var file = attachment.files[0].fileName;
xhttp.send('attachment ='+attachment);
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
Zie de verschillen.
Gewijzigd op 27/08/2020 01:02:16 door - Ariën -
Deze heb ik in een if statement gezet
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php if(move_uploaded_file($_FILES['attachment']['tmp_name'], 'uploads')){
echo "Gelukt";
}else{
echo "mislukt";
}
?>
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
'uploads' zal een directory zijn geef eens een naam mee: 'uploads/naam.jpg' (indien het een jpg is)
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