Archief - PHP: Afbeelding uploaden lukt niet

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

horse_99

Legacy Member
Hoi allemaal,

Ik ben bezig aan een upload script. Hieronder de code (tot nu toe):

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Uploaden</title>
</head>

<body>
<?

	// Als de array $_POST niet leeg is, dan is er informatie verzonden met het formulier.
	if(!empty($_POST)){
		
		// Initialiseren van de variabelen.
		$maximum_hoogte = 3000;		// In pixels.
		$maximum_breedte = 3000;	// In pixels.
		$maximum_grootte = 200;		// In KB.
		$extensies = array("jpg","gif");
		$path = "../upload/";
		
		// Achterhalen van de eigenschappen van de foto.
		$foto_name = $_FILES['foto']['name'];
		$foto_type = $_FILES['foto']['type'];
		$foto_size = $_FILES['foto']['size'];		
		$foto_afmetingen = getimagesize($_FILES['file']['tmp_name']);
		$foto_breedte = $foto_afmetingen[0];
		$foto_hoogte = $foto_afmetingen[1];
		$foto_extensie = strtolower(end(explode(".",$foto_name)));
		
		// Controleren van de bestandsgrootte van de foto.
		if($file_size > $maximum_grootte){
			$bericht .= "De bestandsgrootte van de foto die je wilt uploaden is te groot.<br />";
		}
		
		// Controleren van de breedte van de foto.
		if($foto_breedte > $maximum_breedte){
			$bericht .= "De breedte van de foto is te groot.<br />";
		}
		
		// Controleren van de hoogte van de foto.
		if($foto_hoogte > $maximum_hoogte){
			$bericht .= "De hoogte van de foto is te groote.<br />";
		}
		
		// Controleren van de extensie van de foto.
		if(!in_array($foto_extensie,$extensie)){
			$bericht .= "De foto is van het verkeerde type. GIF en JPG zijn de toegelaten typen.";
		}
		
		// De foto in de map opslagen.
		if(move_uploaded_file($_FILES['foto']['tmp_name'],$path . $foto_name) == TRUE){
			$bericht = "Het uploaden is gelukt.";
		}else{
			$bericht .= "Het uploaden is mislukt.";
		}
		
		// Het bericht weergeven.
		echo($bericht);
	
	}else{
?>
<form action="<?= $_SERVER['PHP_SELF'] ?>" method="post" enctype="multipart/form-data">
<label for="foto">Foto:</label><input type="file" id="foto" name="foto" /><button type="submit">Upload</button>
</form>
</body>
</html>
<?
	}
?>

Ik heb het hier lokaal getest en gebruik de laatste nieuwe WAMP server op een Windows XP Professional machine. Probleem is, wanneer ik op "Uploaden" druk, gebeurt er helemaal niets. Ik krijg geen bericht of zo, de foto wordt niet geupload, de pagina refresht gewoon bij wijze van spreken.

Ik heb hier al gezocht op het forum, omdat ik wist dat ik dezelfde problemen hier nog eens heb gezien. Daar heb ik in gelezen dat je op die machtigingen moest letten, dus ik heb "Alleen lezen" maar afgevinkt bij de eigenschappen van de map. Ik heb de variabele $path (de locatie van de map dus) al gewijzigd in de absolute locatie (dus vanaf de C schijf) en vanaf de locatie van het script, zoals het er nu staat dus, maar niets is tevergeefs.

Weet iemand raad?

Bedankt voor alle reacties! :applause:

MVG, Kristof.

Viper5000

Legacy Member
doe eens !empty($_FILES) ipv $_POST

het lijkt mij dat die refresh gewoon is dat je script opnieuw je eerste deel overslaat omdat $_POST leeg is

wat jij aanhaalt (ivm write permissions) zou een PHP error produceren wat bij jou niet het geval is

horse_99

Legacy Member
Viper5000 zei:
doe eens !empty($_FILES) ipv $_POST

het lijkt mij dat die refresh gewoon is dat je script opnieuw je eerste deel overslaat omdat $_POST leeg is

wat jij aanhaalt (ivm write permissions) zou een PHP error produceren wat bij jou niet het geval is

Okee straks eens proberen :). Nu moet ik even weg.

Bedankt voor de reactie.

Groeten, Kristof.

Zeppelin

Legacy Member
Er staat toch nix in die $_POST? Hoe ik het altijd doe is door een <input type="hidden" name="check"> veldje te verwerken in het formulier, dan doe je bovenaan je script ipv if(!empty.....) gewoon if(isset ($_POST['check']))

Snapde?

killgore

Legacy Member
Zeppelin zei:
Er staat toch nix in die $_POST? Hoe ik het altijd doe is door een <input type="hidden" name="check"> veldje te verwerken in het formulier, dan doe je bovenaan je script ipv if(!empty.....) gewoon if(isset ($_POST['check']))

Snapde?
uhu, doe je gewoon best altijd voor forms, met hidden field werken dat bep. naam & waarde heeft voor dat form. Vooral handig voor scripts die verschillende forms moeten afhandelen (bv. edit, delete, new, bijhorende confirms, ...)

horse_99

Legacy Member
Okee, het script werkt :).

Het was inderdaad opgelost met bovenaan in het script

if(!empty($_POST)) te vervangen met if(!empty($_FILES))

Nu de foutafhandeling nog verfijnen, want die is precies nog geen 100% :s.

Bedankt voor de reacties allemaal. :applause:

@ Zeppelin en killgore: die tips zal ik zeker onthouden, bedankt!

MVG, Kristof.

Viper5000

Legacy Member
killgore zei:
uhu, doe je gewoon best altijd voor forms, met hidden field werken dat bep. naam & waarde heeft voor dat form. Vooral handig voor scripts die verschillende forms moeten afhandelen (bv. edit, delete, new, bijhorende confirms, ...)
in dat geval is het noodzakelijk, maar wat zeppelin zegt is overbodig en een slechte gewoonte (voor kleine sites is dat geen probleem, maar reken maar eens uit wat enkele bytes extra bandbreedte betekenen als de pagina 10000 hits per dag krijgt)

killgore

Legacy Member
Viper5000 zei:
in dat geval is het noodzakelijk, maar wat zeppelin zegt is overbodig en een slechte gewoonte (voor kleine sites is dat geen probleem, maar reken maar eens uit wat enkele bytes extra bandbreedte betekenen als de pagina 10000 hits per dag krijgt)
k, even uitrekenen:

<input type="hidden" name="testerdetest" value="eenbehoorlijklangevalue">

73 tekens = 73 byte (ik hoop da het ascii is :p)

*10000 hits = 370000 bytes

370000/1024 = 361,328125
dus, beetje naar boven afgerond : 362 kb (en dan nog berekend met redelijk lange naam en value, normaal zal zoiets niet meer dan 50 tekens zijn). De post&get informatie die wordt doorverstuurd is btw nog veel kleiner ;).

wow, is me dat fucking veel :ironic:, meeste sites waar er pages zijn die 10000 hits krijgen (wat al immens veel is dus) hebben bandwiths van ettelijke gigabytes, waarop dit kleine deeltje dus NIETS waard is.

dus aub, stop whining :), die methode met 1 hidden fieldje om je form te identificeren is een v/d betere methodes en kost uw server echt 2x niets hoor :).

|M°B|Morbuus

Legacy Member
Ksnap trouwens ni waar ze daar altijd mee afkomen van die bandbreedte ...
Wa maakt da nu uit, steek er dan een img minder in ofwa ma dit is meestal zever ...

killgore

Legacy Member
|M°B|Morbuus zei:
Ksnap trouwens ni waar ze daar altijd mee afkomen van die bandbreedte ...
Wa maakt da nu uit, steek er dan een img minder in ofwa ma dit is meestal zever ...
exactly my point :).
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan