Via HTML geselecteerd bestand met PHP in een map plaatsen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

LHM  van Exel

LHM van Exel

25/02/2016 18:06:10
Quote Anchor link
Hallo,

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)
PHP script in nieuw venster Selecteer het PHP script
1
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>

Het formulier wordt na verzenden verwerkt.
VERWERKEN.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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..


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
 
PHP hulp

PHP hulp

25/12/2024 15:39:40
 
Yoop Overmaat

Yoop Overmaat

26/02/2016 01:57:40
Quote Anchor link
Het volgende aan het formulier valt direct op, required="required" <- zoiets gaat je fouten geven.

Het correcte verhaal.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<input type="file" name="foto1" size="40" required>


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
 
Leen Bekkema

Leen Bekkema

26/02/2016 08:43:07
Quote Anchor link
Waarschijnlijk heb je zoiets ergens staan:

Quote:
echo $file = $_FILES['afbeelding']['tmpnaam'];


en dat moet dan zijn

Quote:
if(isset($_FILES['afbeelding'])){
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
 
LHM  van Exel

LHM van Exel

26/02/2016 10:36:41
Quote Anchor link
Bedankt voor de snelle reactie!
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:
Het volgende aan het formulier valt direct op, required="required" <- zoiets gaat je fouten geven.
Het correcte verhaal.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<input type="file" name="foto1" size="40" required>


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:

Quote:
echo $file = $_FILES['afbeelding']['tmpnaam'];

en dat moet dan zijn
Quote:
if(isset($_FILES['afbeelding'])){
echo $_FILES['afbeelding']['tmpnaam'];
}


Dat klopt. Maar soms krijg ik helemaal geen informatie van het formulier doorgegeven. Mijn noodoplossing is, de verwerking beginnen met:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
if (!isset($_FILES['foto1']['error']) )  
{ echo "Foto kan (Fotoos kunnen) niet worden verwerkt<br />";
  exit ("Waarschijnlijk te groot?");}
 
Thomas van den Heuvel

Thomas van den Heuvel

26/02/2016 12:08:56
Quote Anchor link
required="required" is bij mijn weten gewoon goed.

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.
 
LHM  van Exel

LHM van Exel

26/02/2016 14:58:49
Quote Anchor link
Bedankt.
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.

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.
 
Thomas van den Heuvel

Thomas van den Heuvel

26/02/2016 16:14:06
Quote Anchor link
Ik kan je probleem niet verklaren. De enige reden die ik kan verzinnen is dat je VERWERKEN.php rechtstreeks aanroept zonder iets te POSTen.

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.
 
LHM  van Exel

LHM van Exel

27/02/2016 18:36:43
Quote Anchor link
Thanx Thomas.

size = "30" is een tikfout van mij in het voorbeeld.

Ik begin de verwerking voortaan altijd met:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
if ($_FILES['foto']['error']) <> 0)  
        {    exit ("Er is een fout opgetreden.");
        }
 



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.