файл загружен в папку, но путь не сохраняется в базе данных

0

я пытался вставить изображение в папку с сервером, а затем путь в базу данных, но я могу загрузить файл в папку сервера, чтобы не хранить какую-либо вещь в базе данных, например, Тип файла, размер файла и имя файла (я имею в виду путь). Я новичок в 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>

Подробности в таблице введите описание изображения здесь

 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 ответа

2
Лучший ответ

Я выполняю код. Проблема в вашей схеме

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

Попробуйте выполнить следующие действия после выполнения вставок. Будет вставлено

ALTER TABLE 'users' CHANGE 'size' 'size' INT(30) NOT NULL;
  • 0
    хотя я не могу хранить значения в базе данных
  • 0
    size` int (11) NOT NULL, и вы передаете больше 10, поэтому sql statment выдает ошибку. Лучше, если вы измените его на varchar (300). И он будет работать нормально. А также отзовите это на w3schools.com/PhP/php_mysql_prepared_statements.asp
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!';
}

Также убедитесь, что у вас есть соответствующие типы полей с достаточной длиной для хранения ваших данных в таблице.

Если вы не сделали и не подтвердили свое соединение с db, вы можете сделать это, добавив ниже код в начало вашего скрипта или непосредственно перед добавлением записи:

<?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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню