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.
<?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="<?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>
<?php
}
?>
AHA! Nu kom ik verder. Ik heb een heel klein gif bestandje gemaakt en geupload. Nog wel met foutmeldingen, maar ik kom in ieder geval in de loop...
Warning: move_uploaded_file(/images/plaatje.gif) [function.move-uploaded-file]: failed to open stream: No such file or directory in C:\xampp\htdocs\leerphp\afbeelding.php on line 23
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\xampp\tmp\php73A0.tmp' to '/images/plaatje.gif' in C:\xampp\htdocs\leerphp\afbeelding.php on line 23
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:
[quote="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.
<?php
if ($_POST["knop"])
//als het wat is?
?>
<?php
if (is_uploaded_file($_FILES['afbeelding']['tmp_name']))
//als het wat is?
?>
<?php
if (!move_uploaded_file($_FILES['afbeelding']['tmp_name'], $pad.$doelbestandsnaam.$extensie[0])
//dit ook geen goede if statement*
?>
Het is bijvoorbeeld
<?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 ;-)
[/quote]
Dank allemaal! Het werkt. Met een klein bestand en het juiste pad: $pad = "images/"; werkt de boel nu. Natuurlijk moet je de filesize in je PHP.ini regelen, en dat komt later in het boek vast nog aan de orde.
In ieder geval weer veel nieuwe ideeën en bronnen (zoals tizag) waar ik verder mee kan! Dit is het uiteindelijke, werkende script:
<?php
if ($_POST["knop"]) {
$doelbestandsnaam = "plaatje";
$pad = "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";
exit;
}
echo "Het bestand ".$_FILES['afbeelding']['name']." is geupload";
} else {
echo "Het uploaden is niet gelukt";
echo $_FILES['afbeelding']['error'];
}
} else {
?>
<form enctype="multipart/form-data" action="<?php echo $_SERVER["PHP_SELF"]?>" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="150000" />
Upload afbeelding: <input name="afbeelding" type="file" />
<input type="submit" value="Uploaden" name="knop" />
</form>
<?php
}
?>
alleen een beetje jammer dat je niks met onze aanwijzingen doet..
Ik doe daar zeker wat mee en waardeer het ook zeer, Stefan. Elke opmerking geeft meer inzicht en ik heb er ook zeker een stel opgeschreven voor verder gebruik. Ik heb voor nu alleen even zo veel mogelijk het boek van Arjan Burger aangehouden, omdat daar een doorgaande lijn inzit en ik anders straks bij vervolgopdrachtjes niet meer weet wat ik zelf allemaal anders heb gedaan en heb aangepast naar aanleiding van jullie reacties. Het is gewoon even praktischer zo...
Dat is nu het nadeel als er 'voorbeelden' een-op-een gebruikt worden. Je kunt de opdrac ht beter zelf schrijven ipv overtypen. Dan snap je ook wat je doet, en nog belangrijker waarom.