【发布时间】:2020-11-04 19:45:42
【问题描述】:
这是图片上传的HTML代码
<form id="imageUpload" action="" class="form-horizontal form-material" method="POST" enctype="multipart/form-data">
<div class="form-group">
<label class="col-md-6">Image</label>
<div class="col-md-6">
<input type="file" class="form-control form-control-line" name="portfolioimage">
</div>
<div class="form-group">
<label class="col-md-6">Select Package</label>
<div class="col-md-6">
<select class="form-control form-control-line" name="packageName">
<option selected disabled>-- SELECT PACKAGE -- </option>
<?php
while ($row = mysqli_fetch_row($result)) {
echo "<option>$row[1]</option>";
}
?>
</select>
</div>
</div>
<div class="form-group ">
<div class="col-sm-6">
<input type="submit" class="btn btn-success" value="ADD" name="addbtn">
</div>
</div>
</form>
这是我的 php 代码,用于将图像作为包名称和日期时间戳上传。
<?php
if(isset($_POST['addbtn']))
{
$errors= array();
$package_name = $_POST['packageName'];
$query = "select id from packages where title='$package_name'";
$result = mysqli_query($con,$query);
$row = mysqli_fetch_row($result);
$package_id = $row[0];
$image=$_FILES['portfolioimage']['name'];
// $file_size =$_FILES['portfolioimage']['size'];
$file_tmp =$_FILES['portfolioimage']['tmp_name'];
$file_type=$_FILES['portfolioimage']['type'];
$file_ext=strtolower(end(explode('.',$_FILES['portfolioimage']['name'])));
$file_tmp=$_FILES['portfolioimage']['tmp_name'];
$extensions= array("jpeg","jpg","png");
if(in_array($file_ext,$extensions)=== false){
$errors[]="extension not allowed, please choose a JPEG or PNG file.";
}
// if($file_size > 2097152){
// $errors[]='File size must be excately 2 MB';
// }
$timestamp = date("mdYHis");
$imageName = $package_name . $timestamp ."." . $file_ext;
if(empty($errors)==true)
{
$uploadDir = '../Admin/images/portfolio_images';
$dest = $uploadDir . "/" . $imageName ;
$moveIMG = move_uploaded_file($file_tmp,$dest);
if($moveIMG){
echo"<script language='javascript'> alert('Image Moved') </script>";
} else {
echo"<script language='javascript'> alert('Move failed') </script>";
}
$str = "INSERT INTO portfolio_images (image,package_id) VALUES ('$imageName',$package_id)";
$query = mysqli_query($con,$str);
if($query == 1)
{
echo"<script language='javascript'> alert('Image Uploaded') </script>";
}
else
{
echo"<script language='javascript'> alert('".$str."') </script>";
}
}
else
{
print_r($errors);
}
}
?>
if 部分 $moveIMG 中的条件给出错误值。 尝试了不同的方法来存储在 dest 路径,但经过这么多尝试它没有工作。它在第一次提交时使用相同的代码,但现在无法正常工作。
可能是你们中的一个人可以找到错误!
【问题讨论】:
-
警告:您的代码容易受到 SQL 注入攻击。您应该使用参数化查询和准备好的语句来帮助防止攻击者通过使用恶意输入值来破坏您的数据库。 bobby-tables.com 给出了风险解释,以及如何使用 PHP / mysqli 安全地编写查询的一些示例。 切勿将未经处理的数据直接插入您的 SQL。按照您现在编写代码的方式,有人可以轻松窃取、错误更改甚至删除您的数据。
-
phpdelusions.net/mysqli 还包含使用 mysqli 编写安全 SQL 的好例子。参数化查询还将大大降低由于未转义的输入值而导致意外语法错误的风险。
-
无论如何,“不工作”到底是什么意思?您是否看到特定的错误或警告,和/或任何意外行为?具体描述当您尝试运行代码时会发生什么。您是否将 PHP 设置为将错误和警告记录到文件中?如果是这样,请检查那里是否有任何错误,例如关于文件权限或类似的。如果您没有设置错误日志记录,请启用它然后再次检查。
-
根据文档,如果 PHP 认为上传存在问题, move_uploaded_file 也会失败。但你似乎没有检查这一点。您需要检查
$_FILES['portfolioimage']['error']的内容。 php.net/manual/en/features.file-upload.errors.php 解释了您可能在此处看到的错误代码。另见php.net/manual/en/features.file-upload.php -
当任何有上传权限的人都可以在服务器上部署自己的代码并让服务器执行它时,为什么还要麻烦 SQL 注入呢?
标签: php html mysql forms file-upload