Uploaden van een foto

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Karin Gijssen

Karin Gijssen

17/10/2012 14:36:16
Quote Anchor link
Ik ben bezig met het Handboek PHP 5.3. Ik wil nu een plaatje uploaden naar een map en de link toevoegen aan de database. Het uploaden lukt alleen niet. Ook het script dat ik bij het boek heb gedownload, werkt niet. Hij gaat rechtstreeks naar de melding "Het uploaden is niet gelukt". Dat zou betekenen dat er al iets foutgaat in de regel: if (is_uploaded_file($_FILES['afbeelding']['tmp_name']))

Iemand enig idee? Hieronder het script.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
if ($_POST["knop"]) {
  $doelbestandsnaam = "plaatje";
  $pad = "C:/xampp/htdocs/leerphp/images";
  if (is_uploaded_file($_FILES['afbeelding']['tmp_name'])) {
      // bestandgrootte controleren
      if ($_FILES['afbeelding']['size'] > 150000){
          echo "Het bestand is te groot";
          exit;
      }

      //extensie controleren
      if (!preg_match("/((.gif|.jpg|.png)$)/", $_FILES['afbeelding']['name'], $extensie)) {
          echo "Het bestand is niet van het juiste type";
          exit;
      }

      if (!move_uploaded_file($_FILES['afbeelding']['tmp_name'], $pad.$doelbestandsnaam.$extensie[0])){
          echo "Het bestand kon niet verplaatst worden";
      }

      echo "Het bestand ".$_FILES['afbeelding']['name']." is geupload";
  }
else {
      echo "Het uploaden is niet gelukt";
  }
}
else {
?>

<form enctype="multipart/form-data" action="
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $_SERVER["PHP_SELF"]?>
" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="15000" />
Upload afbeelding: <input name="afbeelding" type="file" />
<input type="submit" value="Uploaden" name="knop" />
</form>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
}
?>
 
PHP hulp

PHP hulp

23/11/2024 10:43:42
 
Kris Peeters

Kris Peeters

17/10/2012 14:42:03
Quote Anchor link
Kijk hier eens naar:

$pad.$doelbestandsnaam.$extensie[0]
...

Dit betekent dat $pad moet eindigen met een / .
Dus sowieso moet dat worden

$pad = "C:/xampp/htdocs/leerphp/images/";
Gewijzigd op 17/10/2012 14:42:40 door Kris Peeters
 
Karin Gijssen

Karin Gijssen

18/10/2012 00:03:16
Quote Anchor link
Dank je Kris, ik pas het aan.

Maar dat verklaart nog niet de fout.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

18/10/2012 00:43:56
Quote Anchor link
Hallo Karin,

lees eens http://www.tizag.com/phpT/fileupload.php. je ziet daar dat is_uploaded_file() niet gebruikt wordt. Wat mij betreft kun je regel 5 en dus ook regel 20 tm 22 er uit halen. met move_uploaded_file() komt de fout dat er geen bestand is toch wel aan het licht. de foutmelding van regel 17 kun je dan beter wel even aanpassen naar iets als 'het uploaden is niet gelukt probeer het later nog eens'

Groet frank
Gewijzigd op 18/10/2012 00:44:31 door Frank Nietbelangrijk
 
Chris PHP

Chris PHP

18/10/2012 07:45:36
Quote Anchor link
Karin,

Het is niet aan te raden om 'het echte pad' op te geven wat je op regel 4 doet. Maar bijvoorbeeld alleen /images.

Tevens controleer je niets in je if statements, wat een beetje raar is.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
if ($_POST["knop"])
//als het wat is?
?>

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
if (is_uploaded_file($_FILES['afbeelding']['tmp_name']))
//als het wat is?
?>

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
if (!move_uploaded_file($_FILES['afbeelding']['tmp_name'], $pad.$doelbestandsnaam.$extensie[0])
//dit ook geen goede if statement*
?>


Het is bijvoorbeeld
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
if (isset($_POST["knop"]))
//Nu kijkt hij of je $_POST['knop'] gevult is
?>


Dit pas je ook zo toe bij de if is_uploaded_file statement om te kijken of het gevult is. Je kunt ook empty gebruiken, beide doen in principe het zelfde alleen omgedraaid!

isset kijkt of er een waarde is, en empty kijkt of er geen waarde is. !isset kijkt of er geen waarde is, en !empty kijkt of er wel een waarde is.
Gewijzigd op 18/10/2012 07:47:51 door Chris PHP
 
Ozzie PHP

Ozzie PHP

18/10/2012 08:20:04
Quote Anchor link
@Chris: jouw beredenering klopt niet volledig. Zowel is_uploaded_file() en move_uploaded_file() returnen allebei true on succes en false bij een failure. Die if statements zijn dus prima in orde.
 
Chris PHP

Chris PHP

18/10/2012 08:28:40
Quote Anchor link
Ozzie PHP op 18/10/2012 08:20:04:
@Chris: jouw beredenering klopt niet volledig. Zowel is_uploaded_file() en move_uploaded_file() returnen allebei true on succes en false bij een failure. Die if statements zijn dus prima in orde.


Ik zeg ook niet dat ze niet prima zijn, echter is het niet gebruikelijk om ze niet te controleren. Bijvoordbeeld met een isset of if (is_uploaded_file($_FILES['afbeelding']['tmp_name']) == true ). Voor zover ik weet krijg je ook in elk PHP boek bij if statements een controle, en niet alleen if (is_uploaded_file($_FILES['afbeelding']['tmp_name'])) bijvoorbeeld.

Tevens heb ik nog nooit een if statement gezien waar zo gecontroleerd wordt met een , ertussen.

Aanghezien ze aan het leren is, kun je het toch net zo goed meteen correct doen niet dan?
 
Ozzie PHP

Ozzie PHP

18/10/2012 08:43:20
Quote Anchor link
"Ik zeg ook niet dat ze niet prima zijn, echter is het niet gebruikelijk om ze niet te controleren."

Ze worden wel gecontroleerd... de functie zelf geeft 'true' of 'false' terug. Feitelijk staat er dus dit:

if (TRUE) {
...
}

"Tevens heb ik nog nooit een if statement gezien waar zo gecontroleerd wordt met een , ertussen."

Ik weet niet wat je hiermee bedoelt. Die komma is gewoon een scheiding van parameters binnen de functie.
 
Chris PHP

Chris PHP

18/10/2012 08:51:27
Quote Anchor link
Ozzie,

Hoe weet jij nu of je controleerd of true of false? Als je eenmaal meer uitgebreidere scripts gaat schrijven controleer je welleens op true en in sommige situaties op false. Als je het niet controleerd en aangeeft wat je verwacht, verlies je compleet het overzicht van je script en wordt troubleshooten heel lastig.

Want van een script met 30 regels is dat nog wel te overzien, maar wanneer het er 200+ gaan worden is het verhaal compleet anders. Nogmaals de TS is aan het leren, waarom het op deze manier aanleren wanneer de kans groot is dat je in de problemen komt.

Over de comma , ik heb een ) over het hoofd gezien, dus niet in de gaten gehad dat het extra parameters waren voor de move_uploaded_file. Dus dat is een domme leesfout van mij ;)
 
Ozzie PHP

Ozzie PHP

18/10/2012 08:56:59
Quote Anchor link
"Hoe weet jij nu of je controleerd of true of false"

Omdat die functies altijd true of false returnen. Dit kun je per functie terugvinden op php.net. Bij een functie die true of false retourneert is een dergelijke controle gebruikelijk.

"Over de comma , ik heb een ) over het hoofd gezien, dus niet in de gaten gehad dat het extra parameters waren voor de move_uploaded_file. Dus dat is een domme leesfout van mij ;)"

Kan gebeuren ;)
 
Stefan WM

Stefan WM

18/10/2012 08:57:23
Quote Anchor link
Chris, als je aan het programmeren bent of debuggen of wat dan ook en je ziet staan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
if ( $bool )
{

    //doe iets
}
?>

Dan weet je toch dat hij checkt op true? PHP doet dit standaard en zal dan nooit controleren op false.
Zo zou je false kunnen checken met:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
if ( !$bool )
{

    //doe iets
}
?>
 
Chris PHP

Chris PHP

18/10/2012 09:06:36
Quote Anchor link
Ozzie PHP op 18/10/2012 08:56:59:
"Hoe weet jij nu of je controleerd of true of false"

Omdat die functies altijd true of false returnen. Dit kun je per functie terugvinden op php.net. Bij een functie die true of false retourneert is een dergelijke controle gebruikelijk.


LOL, ik weet dat het altijd true of false is. Maar wanneer verwacht je een true en wanneer een false, als je niet defineert wat je verwacht?

Stel $_POST['test'] moet gevult zijn, en ik maak if ($_POST['test']). Nu schrijf ik dus een script dat er 'vanuit' gaat dat hij gevult moet zijn, zoniet gaat hij naar de else.
Maar wat als ik nu verwacht dat hij false is? Hoe kun jij nog zien wat het doel van je if statement is, wanneer je dit niet defineert?

Snapt u een beetje wat ik bedoel? :D
 
Ozzie PHP

Ozzie PHP

18/10/2012 09:08:21
Quote Anchor link
Zie de opmerking van Stefan hierboven. Duidelijk genoeg toch?
 
Albert de Wit

Albert de Wit

18/10/2012 09:08:21
Quote Anchor link
Ik zou geen uploadsysteem kunnen schrijven zonder op tizag te kijken, en dat terwijl ik het zeker meer dan 5 keer gebruikt heb. Ik zou de instructies op tizag.com gewoon volgen. Geweldige tutorials heeft die site.
 
Chris PHP

Chris PHP

18/10/2012 09:08:49
Quote Anchor link
@Stefan,

Zo kun je het idd ook doen, echter zet ik er persoonlijk liever == true of false achter, omdat dit gewoon veel duidelijker en overzichtelijker is. Maar is natuurlijk een persoonlijke manier van schrijven.

Nogmaals de TS is aan het leren, dus dan zie je een ! snel over het hoofd in het begin.
 
Ozzie PHP

Ozzie PHP

18/10/2012 09:11:33
Quote Anchor link
"Nogmaals de TS is aan het leren, dus dan zie je een ! snel over het hoofd in het begin."

Ja, zo ken ik er nog meer... ;)

Dat het een persoonlijke manier van schrijven is en dat het jouw voorkeur heeft, daar kan ik me in vinden. Maar waar het om gaat is dat het absoluut niet fout of verkeerd is. Het een is niet beter dan het ander. En zoals het in de code stond was het dus gewoon goed.
 
Reshad F

Reshad F

18/10/2012 11:17:57
Quote Anchor link
@Chris bij een Boolean is het inderdaad zo dat je if($variabele) kan gebruiken omdat je alleen op true controleert en met een uitroepteken ervoor voor false.
jou manier kan voor een Boolean gebruikt worden maar dit is "Officieel" bedoeld om iets te vergelijken wat een bepaalde waarde moet hebben. dit wordt overigens zover als ik weet in elk programmeer taal gehanteerd. voorbeeldje van php.net

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
// == is an operator which tests
// equality and returns a boolean

if ($action == "show_version") {
    echo "The version is 1.23";
}


// this is not necessary...
if ($show_separators == TRUE) {
    echo "<hr>\n";
}


// ...because this can be used with exactly the same meaning:
if ($show_separators) {
    echo "<hr>\n";
}

?>
 
Karin Gijssen

Karin Gijssen

18/10/2012 11:39:31
Quote Anchor link
Leuk om zoveel discussie te zien, aangezien het script uit het PHP studieboek komt. (Handboek PHP 5.3 van Arjan Burger). Maar hoe je het ook wendt of keert...het probleem is nog steeds niet duidelijk. Waarom komt het script niet voorbij de eerste if? Ik zal zeker even met tigzag aan de gang gaan.

Toevoeging op 18/10/2012 11:40:56:

Chris NVT op 18/10/2012 07:45:36:
Karin,

Het is niet aan te raden om 'het echte pad' op te geven wat je op regel 4 doet. Maar bijvoorbeeld alleen /images.

Tevens controleer je niets in je if statements, wat een beetje raar is.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
if ($_POST["knop"])
//als het wat is?
?>

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
if (is_uploaded_file($_FILES['afbeelding']['tmp_name']))
//als het wat is?
?>

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
if (!move_uploaded_file($_FILES['afbeelding']['tmp_name'], $pad.$doelbestandsnaam.$extensie[0])
//dit ook geen goede if statement*
?>


Het is bijvoorbeeld
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
if (isset($_POST["knop"]))
//Nu kijkt hij of je $_POST['knop'] gevult is
?>


Dit pas je ook zo toe bij de if is_uploaded_file statement om te kijken of het gevult is. Je kunt ook empty gebruiken, beide doen in principe het zelfde alleen omgedraaid!

isset kijkt of er een waarde is, en empty kijkt of er geen waarde is. !isset kijkt of er geen waarde is, en !empty kijkt of er wel een waarde is.


Nomaals: dit script komt uit een studieboek. Ik heb het niet zelf verzonnen ;-)
Gewijzigd op 18/10/2012 11:56:41 door Karin Gijssen
 
Stefan WM

Stefan WM

18/10/2012 11:41:35
Quote Anchor link
Chris NVT op 18/10/2012 09:06:36:

Stel $_POST['test'] moet gevult zijn, en ik maak if ($_POST['test']). Nu schrijf ik dus een script dat er 'vanuit' gaat dat hij gevult moet zijn, zoniet gaat hij naar de else.
Maar wat als ik nu verwacht dat hij false is? Hoe kun jij nog zien wat het doel van je if statement is, wanneer je dit niet defineert?

Snapt u een beetje wat ik bedoel? :D


Dat kan als volgt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
if($_POST['test'])
{

    //doe iets
}
?>


echter is dit niet de veiligste manier omdat je niet weet of hij ook daadwerkelijk gevuld is hiervoor kun je beter het volgende doen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php

if( isset( $_POST['test'] ) && !empty( $_POST['test'] ) )
{

    //alles is gevuld
}
?>
 
Ozzie PHP

Ozzie PHP

18/10/2012 11:44:16
Quote Anchor link
Karin Gijssen op 18/10/2012 11:39:31:
Waarom komt het script niet voorbij de eerste if?

Over welke if heb je het nu?

@Stefan: isset is voldoende hoor. Wel is het raadzaam om de waarde van de $_POST variabele te controleren.
 
Karin Gijssen

Karin Gijssen

18/10/2012 11:59:52
Quote Anchor link
Ozzie PHP op 18/10/2012 11:44:16:
Karin Gijssen op 18/10/2012 11:39:31:
Waarom komt het script niet voorbij de eerste if?

Over welke if heb je het nu?

@Stefan: isset is voldoende hoor. Wel is het raadzaam om de waarde van de $_POST variabele te controleren.


Ik bedoel de if (is_uploaded_file($_FILES['afbeelding']['tmp_name']))
Inmiddels heb ik bij de foutmelding de regel toegevoegd: echo $_FILES['afbeelding']['error']; Die geeft een twee terug. Dat zou betekenen dat de filesize groter is dan in het html document aangegeven. Dus ga ik daar nog eens naar kijken.
 

Pagina: 1 2 volgende »



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.