Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Ongelma switch-casessa (php)

Wee [30.12.2009 21:23:29]

#

Terve, olen tekemässä pientä kuvauppia kotisivuilleni php:lla, ja ajattelin tarkistaa kuvan tiedostotyypin switch-case rakenteen avulla. Tuli ongelma, kun tuo koodi heittää aina default-kohtaan, tiedä sitten onko tuossa uploaderiformissa joku ongelma? Itselläni ei silmään sattunut...

Uppimisformi:

Kuva:<br>
<form method="post" enctype="multipart/form-data" action="process.php">
  <input type="file" name="imagefile" size="27">
  <br>Kommentit (valinnainen):<br>
  <textarea rows="textarea" width="20" cols="20" name="comments"></textarea><br>
  <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $maxfilesize ?>">
  <input type="submit" value="Upload" name="upload">
</form>

process.php:sta käytettävä osa:

<?php
include "header.php";

$userfile = $HTTP_POST_FILES['imagefile']['tmp_name'];

$userfile_name = $HTTP_POST_FILES['imagefile']['name'];

$userfile_size = $HTTP_POST_FILES['imagefile']['size'];

$userfile_type = $HTTP_POST_FILES['imagefile']['type'];

if($_POST['comments'])
{
	$comments = $_POST['comments'];
	if (get_magic_quotes_gpc() == 0)
	{
		$comments = addslashes($comments);
	}
	$comments = nl2br($comments);
}
else
{
	$comments = 'Tälle kuvalle ei ole kommentteja';
}

if ($userfile_type == 'image/x-png')
{
	$userfile_type = 'image/png';
}
if ($userfile_type == 'image/pjpeg')
{
	$userfile_type = 'image/jpeg';
}

$userfile_error = $HTTP_POST_FILES['imagefile']['error'];

if ($userfile_error > 0)
{
	echo 'Virhe: ';
	switch($userfile_error)
	{
		case 1: echo 'Kuva ylitti suurimman sallitun tiedostokoon'; break;
		case 2: echo 'Kuva ylitti suurimman sallitun tiedostkoon'; break;
		case 3: echo 'Sama kuva on jo ladattu serverille'; break;
		case 4: echo 'Et valinnut kuvaa'; break;
	}
	exit;
}

switch($userfile_type)
{
	case 'image/gif':
		break;
	case 'image/png':
		break;
	case 'image/jpeg':
		break;
	case 'image/bmp':
		echo "BMP:tä ei tueta. Ole hyvä, ja muuta kuvasi .png, .jpg, tai .gif -muotoon. ";
		exit;
	default:
		echo "Virhe: Lataamasi tiedosto ei ole kuva!";
		exit;
		break;
}

Kiitos avusta jo etukäteen!

Mod. lisäsi kooditagit

trilog [30.12.2009 21:39:46]

#

Mikä PHP:n versio on käytössä? $HTTP_POST_FILES on vanhentunut PHP:n versioissa > 4.1, sitä korvaa $_FILES-taulukko uudemmissa. Oletko tarkastanut minkä arvon muuttuja $userfile_type saa? Yksi syy voisi myös olla, että selain saattaa ilmoittaa kuvan mime-tyypiksi mitä vaan, joten siihen ei kannata luottaa.

Wee [30.12.2009 22:28:52]

#

Mjooh, firefoxilla tätä olen lähinnä kokeillut. Kokeilen katsoa tuon $userfile_type:n arvon, mutta saattaa olla että kyse on tuosta vanhentumisesta (muistaakseni palvelin tukee uudempaa, kuin 4.1.

Edit: Kiitos! Kyse oli juuri tästä! :)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta