文件上传到文件夹但路径未存储到数据库中

时间:2017-12-16 06:03:59

标签: php mysql

我试图将图像插入服务器文件夹,然后路径进入数据库,但我能够将文件上传到服务器文件夹,无法将任何东西存储到数据库中,如文件类型,文件大小和文件名(我的意思是路径)。我是php新手,请尽力帮助我。

使用php和mysql

的index.php

<form action="upload.php" method="post" enctype="multipart/form-data">
 <input type="file" name="file" />
 <button type="submit" name="btn-upload">upload</button>
</form>

upload.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'];
 $folder="uploads/";

 // new file size in KB
 $new_size = $file_size/1024;  
 // new file size in KB

 // make file name in lower case
 $new_file_name = strtolower($file);
 // make file name in lower case

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

 if(move_uploaded_file($file_loc,$folder.$final_file))
 {
  $sql="INSERT INTO tbl_uploads(file,type,size) VALUES('$final_file','$file_type','$new_size')";
  $smt=$db->prepare($sql);
 $smt->execute();

view.php

<table width="80%" border="1">
    <tr>
    <th colspan="4">your uploads...<label><a href="index.php">upload new files...</a></label></th>
    </tr>
    <tr>
    <td>File Name</td>
    <td>File Type</td>
    <td>File Size(KB)</td>
    <td>View</td>
    </tr>
    <?php
 $sql="SELECT * FROM tbl_uploads";
 $result=$db->query($sql);
    while($row=$result->fetch_object())
 {
  ?>
        <tr>
        <td><?php echo $row['file'] ?></td>
        <td><?php echo $row['type'] ?></td>
        <td><?php echo $row['size'] ?></td>
        <td><a href="uploads/<?php echo $row['file'] ?>" target="_blank">view file</a></td>
        </tr>
        <?php
 }
 ?>
    </table>

表格详情 enter image description here

 CREATE TABLE `tbl_uploads` (
      `id` int(10) NOT NULL AUTO_INCREMENT,
      `file` varchar(100) NOT NULL,
      `type` varchar(10) NOT NULL,
      `size` int(11) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2 个答案:

答案 0 :(得分:2)

我执行代码。 问题出在您的架构中

Data truncation: Data too long for column 'type' at row 1

尝试运行以下比执行插入它将插入

ALTER TABLE `users` CHANGE `size` `size` INT(30) NOT NULL;

答案 1 :(得分:1)

鉴于您已成功连接到数据库,您必须按如下方式修改sql语句:

$stmt = $db->prepare("INSERT INTO tbl_uploads(`file`,`type`,`size`) VALUES(?,?,?))"; 

$stmt->bindParam(1, $final_file);
$stmt->bindParam(2, $file_type);
$stmt->bindParam(3, $new_size);

if($stmt->execute())
{
     echo 'Success';
}
else
{
     echo 'Failed!';
}

另外,请确保您具有足够长度的正确字段类型,以便将数据存储在表格中。

如果您还没有制作并验证数据库连接,可以通过将以下代码添加到脚本顶部或添加记录之前来实现:

<?php
$dsn = 'mysql:host=localhost;dbname=YOURDBNAME';

try{
  $dbh = new PDO($dsn, 'db_username', 'db_password');
}catch (PDOException $e){
  die($e->getMessage());
}

请务必使用适当的值替换YOURDBNAME,db_username,db_password。

您还应查看以下参考资料: http://php.net/manual/en/pdo.prepared-statements.php

相关问题