Informaticasite van het Sondervick College te Veldhoven                 © L.J.M van Haperen (bron : R.J. van der Beek)
 

Hoofdstuk 19. PHP en MySQL

19.2. Uploaden

Als je een pagina wilt maken waarin de bezoeker de gelegenheid wordt geboden een bestand te uploaden, dan maak je een formulier.

  19.2.1. De form-tag

De form-tag moet dan beslist als attribuut hebben: enctype="multipart/form-data"
Verder moet er in het formulier een input-venster van het type file zijn.
Als je dat op het formulier zet dan verschijnt achter dat venster automatisch het woord "bladeren".
En als je daar dan op klikt verschijnt er een verkenner-achtig venster en dan kun je het bestand uitkiezen. Als je een bestand selecteert en dan op Openen klikt dan verschijnt de naam er van in het input-venster.
En als je dan op Verzenden klikt wordt het bestand geupload, tenminste als er een script is dat dat regelt, want dat gebeurt niet zondermeer.
Daarover straks.

  19.2.2. Het formulier

Het formulier om te uploaden zou er als volgt uit kunnen zien:

<form enctype="multipart/form-data" action="verwerkupl.php" method=post>
<br>
Naam: <input type=text name="naam" size=20> <br>
Wachtwoord: <input type=password name="wachtwoord" size=20> <br>
Bestand: <input type=file name="bestand" size=20> <br>
<input type=submit name="submit" value=" Verzend het bestand "> <br>
</form>

en dat ziet er dan zo uit:

Naam:
Wachtwoord:
Bestand:

  19.2.3. De verwerking van het uploadbestand

Als er op de knop met "Verzend het bestand" is geklikt dan wordt de php-pagina met de naam "verwerkupl.php" gestart.
Dat kun je zien aan de form-tag, want die is als volgt:
<form enctype="multipart/form-data" action="verwerkupl.php" method=post>

De gegevens van het te uploaden bestand worden na de verwerking in de array $_FILES['bestand'] gezet, tenminste als bij de input-tag van het bestand name="bestand" staat.

De naam van het bestand zit dan in de variabele $_FILES['bestand']['name']
De grootte (in bytes) van het bestand zit dan in de variabele $_FILES['bestand']['size']
Het bestand wordt altijd eerst gekopieerd naar een map, waar je niet bij kunt, en krijgt daar een tijdelijke naam.
De naam van het tijdelijke bestand zit in de variabele $_FILES['bestand']['tmp_name']
Je moet het van die tijdelijke plaats kopiéren naar een map waar je wel bij kunt, en dat kan met de volgende opdracht (als $b de naam is waaronder het moet worden opgeslagen, en uploadmap de naam van de map):
copy ($_FILES['bestand']['tmp_name'],"uploadmap/$b");
of zo:
move_uploaded_file($_FILES['bestand']['tmp_name'],"uploadmap/$b");

Wil je dat het bestand in de map wordt gezet waarin het verwerkende script staat (dus in de actieve map) dan kun je als naam van de map gebruiken: "."
Voor de bovenliggende map kun je ".." gebruiken.

De php-pagina voor de verwerking kan er als volgt uit zien:

(we gaan er van uit dat het wachtwoord om te kunnen uploaden "geheim" is, en dat de naam er niet toe doet als hij maar uit drie of meer tekens bestaat)

<?php 

if (($_POST['wachtwoord']!="geheim") or (strlen($_POST['naam'])<3))
	{
	print("Het wachtwoord of de naam is ongeldig !<br><br>");
	print("Er wordt niets geupload !<br>");
	exit;
	}
if ($_FILES['bestand'])
	{
	$b=$_FILES['bestand']['name'];
	$l=$_FILES['bestand']['size'];
	$t=$_FILES['bestand']['tmp_name'];
	tijdelijke naam van het bestand
	print ("naam van het up te loaden bestand: ");
	print ("$b<br>");
	print ("grootte van het up te loaden bestand: ");
	print ("$l<br><br>");
	print ("tijdelijke naam van het bestand: ");
	print ("$t<br><br>");
	copy ($_FILES['bestand']['tmp_name'],"uploadmap/$b");
	print(" <br><br>OK");
	}
?>