【问题标题】:Edit uploaded file编辑上传的文件
【发布时间】:2017-03-28 07:59:59
【问题描述】:

所以我做了一个文件上传网站,文件上传效果很好。 但问题是,稍后,当我想编辑文件(替换)时,文件不会像应有的那样更新。

我遇到一个问题,当我上传大写字母的文件时,我使用“strtolower”。当我想用“编辑”替换该文件时,“strtolower”似乎不起作用,我无法访问该文件。文件名显示在表格中,但是当我点击“查看”时,它没有获取文件,但它被上传到服务器。

这里是上传和edit.php的代码:

 if(isset($_POST['btn-upload']))
 {    

 $file = rand(1000,100000)."-".$_FILES['file']['name'];
 $file_loc = $_FILES['file']['tmp_name'];
 $file_size = $_FILES['file']['size'];
 $file_type = $_FILES['file']['type'];
 $first_name = $_POST['first_name'];
 $last_name = $_POST['last_name'];
 $user_city = $_POST['user_city'];
 $sifra = $_POST['sifra_izvoda'];
 $folder="uploads/";



 $new_size = $file_size/1024;  

 mb_internal_encoding('UTF-8');

 $new_file_name = mb_strtolower($file);


 $final_file = str_replace(' ','-',$new_file_name);

 if(move_uploaded_file($file_loc,$folder.$final_file))
 {
    $sql="INSERT INTO tbl_uploads(file,type,size,first_name,last_name,user_city,sifra) VALUES('$final_file','$file_type','$new_size','$first_name','$last_name','$user_city','$sifra')";
    mysql_query($sql);
    ?>
    <script>
    alert('Izvod je dodan');
    window.location.href='view.php?success';
    </script>
    <?php
}

这里是我要编辑上传文件时的代码:

 if(isset($_GET['edit_id']))
 {
 $sql_query="SELECT file, type, size, first_name, last_name, user_city,   sifra  FROM tbl_uploads WHERE id=".$_GET['edit_id'];
 $result_set=mysql_query($sql_query);
 $fetched_row=mysql_fetch_array($result_set);
}
if(isset($_POST['btn-update']))
{
  $file = rand(1000,100000)."-".$_FILES['file']['name'];
  $file_loc = $_FILES['file']['tmp_name'];
  $file_size = $_FILES['file']['size'];
  $file_type = $_FILES['file']['type'];
  $first_name = $_POST['first_name'];
  $last_name = $_POST['last_name'];
  $user_city = $_POST['user_city'];
  $sifra = $_POST['sifra_izvoda'];
  $folder="uploads/";

  $new_size = $file_size/1024;  

  mb_internal_encoding('UTF-8');

  $new_file_name = mb_strtolower($file);


  $final_file = str_replace(' ','-',$new_file_name);

  $tmp = move_uploaded_file($file_loc,$folder.$final_file);

  $insert_file = ($_FILES['file']['name'])?"file='$file', type='$file_type',     size='$file_size',":'';

 $sql_query = "UPDATE tbl_uploads SET $insert_file  first_name='$first_name', last_name='$last_name', user_city='$user_city', sifra='$sifra' WHERE id=".$_GET['edit_id'];


 if(mysql_query($sql_query))
 {
   header("Location: view.php");
 ?>

【问题讨论】:

  • 每次在新代码中使用the mysql_ 数据库扩展a Kitten is strangled somewhere in the world 时,它都已被弃用,并且已经存在多年,并且在 PHP7 中永远消失了。如果您只是学习 PHP,请花精力学习 PDOmysqli 数据库扩展。 Start here
  • 您对SQL Injections 持开放态度,应该真正使用Prepared Statements 而不是连接您的查询。特别是因为你根本没有逃避它们!如果您使用 MySQLi 或 PDO,则可以使用准备好的语句,而不是上面提到的那些已弃用的 mysql_* 函数。
  • 你为什么不在更新查询上实际使用 $final_file-name 呢?出于某种原因,您使用的是原始文件名,而不是更新的文件名?那可能是你的问题...
  • @RiggsFolly 这很有趣 :) 我知道,但我不擅长 PHP,内部工作需要它,反正没有外人会到达那里。
  • 著名的遗言“for internal workings”... 然后它被复制/粘贴到一个真正的项目中,而没有人意识到它和哎呀,整个数据库被释放了暗网,在他们删除所有表格之前。

标签: php file upload


【解决方案1】:

好的,解决方法是这样的:

$new_size = $file_size/1024;  

  mb_internal_encoding('UTF-8');
  $new_file_name = mb_strtolower($file);
  $final_file = str_replace(' ','-',$new_file_name);
  $tmp = move_uploaded_file($file_loc,$folder.$final_file);

  $insert_file = ($_FILES['file']['name'])?"file='$final_file', type='$file_type', size='$file_size',":'';


 $sql_query = "UPDATE tbl_uploads SET $insert_file  first_name='$first_name', last_name='$last_name', user_city='$user_city', sifra='$sifra' WHERE id=".$_GET['edit_id'];

我将 file='$final_file 添加到查询中,现在它可以正确更新

【讨论】:

    猜你喜欢
    • 2012-04-15
    • 1970-01-01
    • 2018-09-30
    • 1970-01-01
    • 2014-04-14
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    • 2016-07-15
    相关资源
    最近更新 更多