Via HTML geselecteerd bestand met PHP in een map plaatsen
Als ik - beginner met PHP - één of twee foto's met de naam van een fotograaf wil vastleggen, loop ik soms tegen een probleem aan. De foto’s worden geselecteerd en de naam van een fotograaf ingevuld in een formulier:
INVULLEN.html
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<form method="post" enctype="multipart/form-data" action="VERWERKEN.php">
Maker van foto: <input type="text" name="Fotograaf" size="30 required="required" />
Foto 1: <input type="file" name="foto1" size="40" required="required" />
Foto 2: <input type="file" name="foto2" size="40" />
<input name="Submit" type="submit" value="Stuur foto(s)" />
</form>
Maker van foto: <input type="text" name="Fotograaf" size="30 required="required" />
Foto 1: <input type="file" name="foto1" size="40" required="required" />
Foto 2: <input type="file" name="foto2" size="40" />
<input name="Submit" type="submit" value="Stuur foto(s)" />
</form>
Het formulier wordt na verzenden verwerkt.
VERWERKEN.php
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
$input_name = $_POST['Fotograaf'] ;
$input_name = strip_tags($input_name);
if (isset($_FILES['foto1']['name']))
{ $input_foto = $_FILES['foto1']['name'];
if (!empty($input_foto))
{ $temp_foto = $_FILES['foto' . $tel]['tmp_name'];
enz..
$input_name = strip_tags($input_name);
if (isset($_FILES['foto1']['name']))
{ $input_foto = $_FILES['foto1']['name'];
if (!empty($input_foto))
{ $temp_foto = $_FILES['foto' . $tel]['tmp_name'];
enz..
Vaak werkt dit wel, maar soms krijg ik een foutmelding:
Undefined index: foto1 in C:\wamp\www\VERWERKEN.php
Ik vermoed dat er iets mis is met het jpgbestand (misschien te groot??) maar dan verwacht ik dat $_FILES['foto1']['name']) leeg is en dat
$_POST['Fotograaf'] wel gevuld/bekend is.
Kan iemand dit verklaren en weet iemand wat er aan gedaan kan worden?
B.V.D.!
In gebruik WAMP (Windows 10, Apache 2.4.9, MySqL 5.6.17, PHP 5.5.12
Het correcte verhaal.
OM het geheel op gebied kloppend te maken zul je even in je php.ini moeten kijken wat of de maximale grote voor een upload is, is aan te passen door de waarde te verhogen & wamp te herstarten.
Gewijzigd op 26/02/2016 02:05:06 door Yoop Overmaat
Quote:
echo $file = $_FILES['afbeelding']['tmpnaam'];
en dat moet dan zijn
Quote:
if(isset($_FILES['afbeelding'])){
echo $_FILES['afbeelding']['tmpnaam'];
}
echo $_FILES['afbeelding']['tmpnaam'];
}
Soms bestaat in je code blijkbaar de afbeelding niet (misschien bijvoorbeeld omdat je het ergens unset maar dan nog wel weer aanhaalt ergens). Ben ook beginner trouwens maar hier liep ik zelf vooral tegenaan vaak.
Gewijzigd op 26/02/2016 08:43:50 door Leen Bekkema
Als ik in de php.ini de maximale grootte voor een upload aanpas, wordt de kern van het probleem niet opgelost. Er kan dan nog steeds een te groot bestand gebruikt worden, al zal dat minder voorkomen.
Yoop Overmaat op 26/02/2016 01:57:40:
Ik houd mij zoveel mogelijk aan de XHTML standaard (zoals required = "required") dat geeft tot nog toe geen problemen.
Toevoeging op 26/02/2016 10:45:54:
Ook bedankt voor de reactie!
Leen Bekkema op 26/02/2016 08:43:07:
Waarschijnlijk heb je zoiets ergens staan:
en dat moet dan zijn
Dat klopt. Maar soms krijg ik helemaal geen informatie van het formulier doorgegeven. Mijn noodoplossing is, de verwerking beginnen met:
Quote:
echo $file = $_FILES['afbeelding']['tmpnaam'];
en dat moet dan zijn
Quote:
if(isset($_FILES['afbeelding'])){
echo $_FILES['afbeelding']['tmpnaam'];
}
echo $_FILES['afbeelding']['tmpnaam'];
}
Dat klopt. Maar soms krijg ik helemaal geen informatie van het formulier doorgegeven. Mijn noodoplossing is, de verwerking beginnen met:
Undefined index: foto1 in C:\wamp\www\VERWERKEN.php
Bij deze foutmelding krijg je ook een regelnummer (... on line xyz) die je precies vertelt waar het misgaat.
Als je tegen een blanco pagina staart is dit een indicatie dat er niet genoeg geheugen gereserverd was voor de uitvoer van het script. Hier krijg je doorgaans enkel een melding van in bepaalde (apache?) logs maar niet altijd in je reguliere log.
Nog een pitfall is dat je zowel de maximale grootte per upload in dient te stellen (upload_max_filesize), alsmede de maximaal toegestane totale grootte van alle POST/FILES data (post_max_size). En dan heb je ook nog de geheugenlimiet van het (verwerkende) script zelf (memory_limit).
Idealiter is upload_max_filesize < post_max_size < memory_limit.
Thomas van den Heuvel op 26/02/2016 12:08:56:
Undefined index: foto1 in C:\wamp\www\VERWERKEN.php
Bij deze foutmelding krijg je ook een regelnummer (... on line xyz) die je precies vertelt waar het misgaat.
Bij deze foutmelding krijg je ook een regelnummer (... on line xyz) die je precies vertelt waar het misgaat.
In welke regel het soms fout gaat, is volkomen duidelijk: daar waar ik $_FILES['foto1']['name'] gebruik of - als ik de volgorde verander - daar waar ik $_POST['Fotograaf'] gebruik.
Er zit in ieder geval nog een fout in je fotograaf-veld:
size="30 required="required"
dit moet zijn:
size="30" required="required"
Daarnaast zou je, voordat je een geupload bestand gaat verwerken, eerst $_FILES['<veldnaam>']['error'] moeten controleren. De waarde van deze error moet gelijk zijn aan 0, of beter, de constante UPLOAD_ERR_OK. Dit houdt in dat de upload geslaagd is.
Voordat je iets met het geupload bestand doet zou je dus deze controle moeten uitvoeren, en mogelijk nog andere controles, bijvoorbeeld of de upload ook echt een afbeelding betreft. Oftewel, filter je input voordat je hier verder mee aan de slag gaat.
size = "30" is een tikfout van mij in het voorbeeld.
Ik begin de verwerking voortaan altijd met: