[PHP] Uploaden van images

Pagina: 1
Acties:

Onderwerpen


  • Sjoerd
  • Registratie: December 2003
  • Niet online
Ik ben momenteel op stage en moet een CMS systeem maken, mijn teksten aanpassen werkt al super nu komen de afbeeldingen.
(ik had echter voor deze week geen PHP ervaring) en ben dus nog niet echt "pro" maarja ik leer snel bij :)

hier dan de code die niet werkt ;)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php  
$naam = 1; 
$uploaddir = "images\covers/"; 
$uploadfile = $uploaddir.basename($_FILES['foto']['name']); 

if ($_SERVER['REQUEST_METHOD'] == 'POST') 
    { 
    if(move_uploaded_file($_FILES['foto']['tmp_name'],$uploadfile)) 
        { 
        if(rename($uploadfile, "$uploaddir/$naam.jpg")) 
            { 
            die ("De afbeelding is succesvol ge-upload."); 
            } 
        else 
            { 
            die ("Er is een fout opgetreden tijdens het uploaden"); 
            } 
        } 
    else 
        { 
        die ("Er is een fout opgetreden tijdens het uploaden"); 
        } 
    } 
?> 
nog een html formpje en gedoe


als ik het nu "run" krijg ik:

Notice: Undefined index: foto in c:\program files\easyphp1-8\www\beekman\uploaden.php on line 4

Ik snap de error eingelijk niet goed.

Modelbouw - Alles over modelbouw, van RC tot diorama


  • RTBravo
  • Registratie: April 2000
  • Laatst online: 10-09 19:00

RTBravo

Verkopen jullie ook jojn?

Heb je het bestand element in je HTML form wel foto genoemd?

  • mosymuis
  • Registratie: Maart 2002
  • Laatst online: 27-04 11:53
Beginnersvraag. Als er geen formulier is gesubmit, heeft de server de foto nog niet ontvangen en bevat $_FILES dat element dus nog niet. Daarom altijd eerst controleren op de aanwezigheid van variabelen met isset(). Een oplossing voor het voorkomen van de notice is ook het werken op een lager error niveau, zie daarvoor error_reporting. Dat is echter niet aan te raden voor de ontwikkeling, omdat je zo fouten negeert.

  • Sjoerd
  • Registratie: December 2003
  • Niet online
de rest van de code ook nog even dan maar ;)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<form enctype="multipart/form-data" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 
<table width="100%" border="0"> 

<tr> 
    <td><font size="3" face="Arial">Je kan hier alleen Jpg (.jpg) afbeeldingen mee uploaden.</font><p></td> 
</tr> 
<tr> 
    <td><input type="file" name="foto"></td> 
</tr> 
<tr> 
    <td>
<p></td> 
</tr> 
<tr> 
    <td><input type="submit" value="Afbeelding uploaden"></td> 
</tr> 
</table>

Modelbouw - Alles over modelbouw, van RC tot diorama


  • PowerFlower
  • Registratie: Juni 2001
  • Laatst online: 20-09 21:00

PowerFlower

être diable et jouer fleur

langezwieper schreef op donderdag 16 februari 2006 @ 10:36:
Notice: Undefined index: foto in c:\program files\easyphp1-8\www\beekman\uploaden.php on line 4

Ik snap de error eingelijk niet goed.
In de array is een van de twee indexen niet te vinden: 'foto' of 'name'. Denk ik als ik zo snel ff kijk.

Overigens is het bij PHP, en zeker als het om uploaden gaat, wel handig te zeggen welke versie je draait en waarop (Windows, zo te zien? IIS, Apache?) maar in dit geval lijkt het gewoon aan je array te liggen, en die zien we niet ;)

  • KabouterSuper
  • Registratie: September 2005
  • Niet online
Doe eens een print_r($_FILES), dan zie je snel genoeg wat er in dit array zit. En zoals mosymuis terecht opmerkt...als je niks hebt gesubmit, zal deze array leeg zijn, en is het logisch dat je een foutmelding op regel 4 krijgt. Als je de assignment van $uploadfile binnen de if ($_SERVER['REQUEST_METHOD'] == 'POST') zet, is het probleem opgelost.

[ Voor 64% gewijzigd door KabouterSuper op 16-02-2006 10:46 ]

When life gives you lemons, start a battery factory


  • Kaasplank
  • Registratie: Februari 2001
  • Niet online
je gebruikt op regel 3 een / en \ door elkaar. Misschien dat ie daardoor fout gaat op regel 4

  • mosymuis
  • Registratie: Maart 2002
  • Laatst online: 27-04 11:53
omg, de error is toch zo duidelijk als wat? Het element "foto" ontbreekt, wat wss alleen zo is als de pagina met GET word opgevraagd.

  • Sjoerd
  • Registratie: December 2003
  • Niet online
@juggernaut als ik het verander naar: $uploaddir = "images/covers/"; krijg ik

Notice: Use of undefined constant auto1 - assumed 'auto1' in c:\program files\easyphp1-8\www\beekman\uploaden.php on line 2
Notice: Undefined index: foto in c:\program files\easyphp1-8\www\beekman\uploaden.php on line 4
dus ik laat het maar zoals het is :)

@mosymuis met error_reporting 0 krijg ik idd geen melding meer en geeft hij de melding dat er is upgeload (maar dat is dus niet)
en sorry dat ik het niet meteen zag :/ ookal is voor jou de error zo duidelijk als iets

@kaboutsuper met r($_FILES) zie ik idd dat de array leeg is zoals mosymuis zei dus daar ik ga maar is verder mee

dus kga maar is prullen met de post en array bedankt alvast ;)

Modelbouw - Alles over modelbouw, van RC tot diorama


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Dit is gewoon begrijpend lezen inderdaad. Je FILES-array heeft een index 'foto', maar die bestaat niet voordat je formulier gesubmit is. Met die reden geeft je script netjes een notice, omdat je die index wel aan het gebruiken bent. Kijk eens naar isset() en verwerk dat in je PHP-code.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 12:54
Wat loopt iedereen hier weer te blaten?

Die error betekent simpelweg dat je gebuik maakt van een variabele die je zelf nog niet hebt geinitialiseerd. Deze bestaat nog niet, of is nog niet aangemaakt, op het moment dat je nog niet gesubmit hebt. Het is altijd goed om variabelen eerst te initialiseren. Bij formulier afhandeling is het gebruikelijk om de gesubmitte waarden te controlen met behulp van isset(). (Of die variabele die je wilt gebruiken wel bestaat, dus ingevuld is in je form.)

Dat is wat je achter die notice, dus geen error, moet zoeken.

  • jdsm
  • Registratie: Januari 2004
  • Laatst online: 07-02-2019
'foto' is inderdaad nog niet gedefinieerd zonder dat het form gesubmit is, dit kun je oplossen door je submit button een naam te geven en te check of deze is verstuurd.

Verander de regel:
HTML:
1
<input type="submit" value="Afbeelding uploaden">

naar
HTML:
1
<input type="submit" name="Upload" value="Afbeelding uploaden">


Verander vervolgens:
PHP:
1
$uploadfile = $uploaddir.basename($_FILES['foto']['name']);

naar
PHP:
1
2
3
if (isset($_POST['Upload'])) {
$uploadfile = $uploaddir.basename($_FILES['foto']['name']);
}


Dan zou je error verdwenen moeten zijn.

[ Voor 14% gewijzigd door jdsm op 16-02-2006 11:02 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

iNFERiON: dan werkt het script niet meer zodra je submit via Javascript, want dan wordt de waarde van de submitknop niet meegegeven. Controleer liever of $_FILES['foto'] geset is.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • jdsm
  • Registratie: Januari 2004
  • Laatst online: 07-02-2019
-NMe- schreef op donderdag 16 februari 2006 @ 11:12:
iNFERiON: dan werkt het script niet meer zodra je submit via Javascript, want dan wordt de waarde van de submitknop niet meegegeven. Controleer liever of $_FILES['foto'] geset is.
O ja, inderdaad. Ik ben nog niet helemaal wakker :p
*Gaat nog maar eens een bak koffie halen*

Dus idd @ TS, het moet dan
PHP:
1
2
3
if (isset($_FILES['foto'])) {
$uploadfile = $uploaddir.basename($_FILES['foto']['name']);
}


worden en dat wat ik over die name voor die button had gezet hoef je dan ook niet meer te doen ;)

[ Voor 13% gewijzigd door jdsm op 16-02-2006 11:15 ]


  • Sjoerd
  • Registratie: December 2003
  • Niet online
_/-\o_ super

Alles werkt nu, ik had ondertussen ook nog een goede tutorial gevonden waar ik ok nuttige code uit heb kunnen gebruiken,leren voor de geintresseerde en de Tweakers DB:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
  <?php
//kijken of er een bestand is geselecteerd
if(isset($_FILES['bestand'])) {
    //als het bestand groter is dan 302400 bytes word hij niet toegelaten
    if($_FILES['bestand']['size'] > 302400) {
        echo "Het bestand is <b>" . $_FILES['bestand']['size'] . "</b>, het maximale toegstaan is <b>302400</b>";
    } else {
        //kijken of het bestand wel een gif, png of jpg is
        if($_FILES['bestand']['type'] == "image/gif" || $_FILES['bestand']['type'] == "image/png"  || $_FILES['bestand']['type'] == "image/pjpeg" || $_FILES['bestand']['type'] == "image/jpeg") {
            //kijken of er een nieuwe naam aan het bestand is gegeven
            if(empty($_POST['naam'])) {
                $naam = $_FILES['bestand']['name'];
            } else {
                //strip de extensie om die achter de nieuwe bestandsnaam te plakken
                $x = strrchr($_FILES['bestand']['name'], ".");
                $naam = $_POST['naam'] . $x;
            }
            //het bestand uploaden met de nieuwe of oude naam
            move_uploaded_file($_FILES['bestand']['tmp_name'], "images/navigatie/" . $naam);
            //voor linux of unix hosts chmodden we het bestand naar 777 zodat iedereen hem kan zien
            chmod("images/navigatie/" . $naam, 0777);
        } else {
            echo "Het bestand is geen png, jpg of gif";
        }
    }
} else {
    echo "Selecteer een plaatje";
}
?>


;) voor de beginnende phpers net als mij erg makkelijk :Y)

[ Voor 14% gewijzigd door Sjoerd op 16-02-2006 12:41 ]

Modelbouw - Alles over modelbouw, van RC tot diorama


  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
Nog een tip dan... Als het je bedoeling is om alleen plaatjes te uploaden kun het beste even het bestand zelf checken. Met getimagesize() kun je eenvoudig controleren om welk soort afbeeldingsbestand het gaat. En dat is altijd zekerder dan de check op het mime-type dat de gebruiker meestuurt.

Regeren is vooruitschuiven

Pagina: 1