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
}
?>
"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?
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.
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.
"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.
@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
<?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";
}
?>
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.
<?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 ;-)
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:
<?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:
[quote="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.
[/quote]
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.