я пытался вставить изображение в папку с сервером, а затем путь в базу данных, но я могу загрузить файл в папку сервера, чтобы не хранить какую-либо вещь в базе данных, например, Тип файла, размер файла и имя файла (я имею в виду путь). Я новичок в 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;
Я выполняю код. Проблема в вашей схеме
Data truncation: Data too long for column 'type' at row 1
Попробуйте выполнить следующие действия после выполнения вставок. Будет вставлено
ALTER TABLE 'users' CHANGE 'size' 'size' INT(30) NOT NULL;
Учитывая, что вы успешно подключились к своей базе данных, вам придется изменить свою инструкцию 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