PHP switch语句总是默认

时间:2014-02-28 00:32:19

标签: php html forms switch-statement

我正在关注一本书中的一些php示例并完成它们。下面的代码假设使用switch语句验证上载的文件类型是否与设置的有效类型匹配。有效类型包括:jpeg,png,tiff和gif。但是,代码似乎总是采用默认语句并突破循环。我甚至从网站上下载了这个例子,同样的问题正在发生!

echo <<<_END
<html><head><tile>PHP Form Upload</title></head>
<body>
<form method='post' action='upload2.php' enctype='multipart/form-data'>
Select a JPG, GIF, PNG or TIF File: 
<input type='file' name='filename' size='10' />
<input type='submit' value='Upload' /></form>
_END;

if ($_FILES)
{
$name = $_FILES['filename']['name'];

switch ($_FILES['filename']['type'])
{
    case 'image/jpeg':  $ext = 'jpg';   break;
    case 'image/gif':   $ext = 'gif';   break;
    case 'image/png':   $ext = 'png';   break;
    case 'image/tiff':  $ext = 'tiff';  break;
    default:            $ext = '';      break;
}

if ($ext){

    $n = "image.$ext";
    move_uploaded_file($_FILES ['filename']['tmp_name'],$n);
    echo "Uploaded image '$name' as '$n':<br />";
    echo "<img src='$n'";
}
else echo "'$name' is not a valid image file";
 }
 else echo "No image has been uploaded";

 echo "</body></html>"


 ?>

如果我说上传图片'image.jpg',它应该将$ ext设置为。$ jpg然后执行上传,但我只是得到了else语句:

else echo "'$name' is not a valid image file";

1 个答案:

答案 0 :(得分:0)

您的代码示例不起作用,因为文件mime类型不在您的case语句中。

修改代码,以便检查文件的mime类型:

else echo "'$name' is not a valid image file (".$_FILES['filename']['type']." unallowed)";

然后,如果要添加此mime类型,可以使用此修改中显示的类型相应地修改switch / case语句。

编辑:

请注意,您还可以使用var_dump() php函数来检查变量的内容。

else{
    echo "'$name' is not a valid image file (".$_FILES['filename']['type']." unallowed)";
    var_dump($_FILES['filename']);
}

编辑:

请记住在提供客户数据之前始终清理客户数据(htmlentities()可以解决问题),检查http://fr.php.net/htmlentities

echo "'$name' is not a valid image file (".htmlentities($_FILES['filename']['type'])." unallowed)";