Javascript 如何在php中仅允许png文件类型

Javascript 如何在php中仅允许png文件类型,javascript,php,html,mysql,Javascript,Php,Html,Mysql,我正在尝试mysql和php,我想知道如何只允许png文件在表单输入的文件中提交。这是我目前的代码 <html> <head> <title>Profile Picture</title> </head> <body> <?php echo "<form action='newpfp.php' method='POST' enctype='multipart/form-data'>

我正在尝试mysql和php,我想知道如何只允许png文件在表单输入的文件中提交。这是我目前的代码

<html>
<head>
    <title>Profile Picture</title>
</head>
<body>

<?php
echo "<form action='newpfp.php' method='POST' enctype='multipart/form-data'>
    <input type='hidden' name='MAX_FILE_SIZE' value='32768'>
    <label for='screenshot'>Select New Profile Picture</label><br>
    <input type='file' name='screenshot' id='screenshot'><br>
    <input type='submit'>
    </form>
";
if(!empty($_FILES['screenshot']['tmpname'])){
    $newpfp= $_FILES['screenshot']['name'];
    if($newpfp_type=='image/png'){
    echo "<script type='text/JavaScript'>  
    console.log('$newpfp has been added to the thing'); 
    </script>";
    $dbc=mysqli_connect('localhost','root','','project')
    or die('Something bad happened on line 21');
    $query="INSERT INTO portal(profile_picture) VALUES('$newpfp');";
    $result=mysqli_query($dbc,$query)
    or die('Something happened on line 24');
    mysqli_close($dbc)
    or die('Something BAD happened on line 26');
}
}else{
    echo "<script type='text/JavaScript'>  
    prompt('That filetype is not allowed; Allowed file types: gifs, jpgs and png'); 
    </script>";
}
?>
</body>
</html>

侧面图
在何处声明$newpfp_类型?它总是
NULL
。 这就是为什么

但是你的代码不好。将所有php脚本放在文件顶部。将“第24行中的错误”替换为
$mysqli->error
,以查看实际发生的情况。。。并阅读有关sql激励的内容


此外,在sql中,我看不到“Where id=”。$id或其他内容…这意味着您将更新数据库中的所有入口。请小心,放置允许的文件类型是一个好的建议解决方案。您可以按照以下代码修复问题

     if(!empty($_FILES['screenshot']['tmpname'])){
        $newpfp = $_FILES['screenshot']['name']; //get file name
        
        $fileExplode = explode('.',$newfp); //explode filename for getting array
        $extension = end($fileExplode); //separating extension
        $allowedFiles = [ //allowed files
            'png','jpg','jpeg','PNG','JPEG','gif,'GIF'
        ];
        if(!in_array($extension, $allowedFiles)){ //check if the file exist in that array
            echo "<script type='text/JavaScript'>   
            prompt('That filetype is not allowed; Allowed file types: gifs, jpgs and png'); 
            </script>";
        }else{ //take another decision
            
            echo "<script type='text/JavaScript'>  
            console.log('$newpfp has been added to the thing'); 
            </script>";
            $dbc=mysqli_connect('localhost','root','','project')
            or die('Something bad happened on line 21');
            $query="INSERT INTO portal(profile_picture) VALUES('$newpfp');";
            $result=mysqli_query($dbc,$query)or die('Something happened on line 24');
            mysqli_close($dbc) or die('Something BAD happened on line 26');
    }
}
if(!empty($\u文件['screenshot']['tmpname'])){
$newpfp=$\u文件['screenshot']['name'];//获取文件名
$fileExplode=explode('.',$newfp);//用于获取数组的explode文件名
$extension=end($fileExplode);//分离扩展名
$allowedFiles=[//允许的文件
“png”、“jpg”、“jpeg”、“png”、“jpeg”、“gif”、“gif”
];
如果(!in_数组($extension,$allowedFiles)){//检查该数组中是否存在该文件
回声“
提示('不允许该文件类型;允许的文件类型:gifs、jpgs和png');
";
}否则{//再作决定
回声“
log(“$newpfp已添加到对象中”);
";
$dbc=mysqli_connect('localhost'、'root'、''、'project')
或者死(“第21行发生了不好的事情”);
$query=“插入门户(配置文件图片)值(“$newpfp”);”;
$result=mysqli_query($dbc,$query)或die(‘第24行发生了什么事’);
mysqli_close($dbc)或die(“第26行发生了不好的事情”);
}
}

您现在应该根据自己的要求修改代码

您可以通过文件扩展名或文件内容进行检查

// check from the client file extension which may be not reliable.
$png_mimetype = 'image/png';
if($png_mimetype == $_FILES['screenshot']["type"]){
    // pass
}

另一方面,请参阅关于sql注入以及准备好的和绑定的查询的重要性很难确切地说出您想要做什么,但是您知道您的PHP是在创建页面时执行的,而不是在提交页面时执行的?此外,您应该检查文件内容,而不仅仅是类型,因为常见的脚本kiddie级别的黑客正在重命名g恶意代码为
.jpg
。警告:您完全可以使用参数化的预处理语句,而不是手动生成查询。它们由或提供。永远不要信任任何类型的输入!即使您的查询仅由受信任的用户执行。
// check from the client file extension which may be not reliable.
$png_mimetype = 'image/png';
if($png_mimetype == $_FILES['screenshot']["type"]){
    // pass
}
// check by the file content
$png_mimetype = 'image/png';
$finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension
$mimetype = finfo_file($finfo, $_FILES['screenshot']["tmp_name"]);
finfo_close($finfo);
if($png_mimetype == $mimetype){
    // pass
}