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
}
?>
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'
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.
@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: 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?
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 ;)
"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 ;)"