<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<form method="post" enctype="multipart/form-data" action="uploadas.php">
<input type="file" name="file" id="file">
<input name="action" type="hidden" value="add">
<input type="submit" name="button" id="button" value="新增資料">
</form>
</body>
</html>
<?php
# 檢查檔案是否上傳成功
include("connMysqlupload.php");
if(isset($_POST["action"])&&($_POST["action"]=="add")){
$sql_query = "INSERT INTO updataasas (file) VALUES (?)";
$stmt = $db_link -> prepare($sql_query);
$stmt -> bind_param("s", $_POST["file"]);
$stmt -> execute();
$stmt -> close();
$db_link -> close();
if ($_FILES['file']['error'] === UPLOAD_ERR_OK){
echo '檔案名稱: ' . $_FILES['file']['name'] . '<br/>';
echo '檔案類型: ' . $_FILES['file']['type'] . '<br/>';
echo '檔案大小: ' . ($_FILES['file']['size'] / 1024) . ' KB<br/>';
echo '暫存名稱: ' . $_FILES['file']['tmp_name'] . '<br/>';
# 檢查檔案是否已經存在
if (file_exists('Filepaper/' . $_FILES['file']['name'])){
echo '檔案已存在。<br/>';
} else {
$file = $_FILES['file']['tmp_name'];
$dest = 'Filepaper/' . $_FILES['file']['name'];
# 將檔案移至指定位置
move_uploaded_file($file, $dest);
}
} else {
echo '錯誤代碼:' . $_FILES['file']['error'] . '<br/>';
}
}
?>
我是php新手,目前正在試做php傳送檔案名稱到資料庫的這個功能,目前遇到一些問題想請教一下各位~
資料庫有正常連線,我的問題是在form裡面加入enctype="multipart/form-data"可以正常上傳資料但檔名無法寫入資料庫,如果我那這段刪掉的話可以順利寫入資料庫但無法正常上傳檔案,那請問這是甚麼問題?
$file
是從哪來的bind_param
這個 method,而且第一個參數("s"
)應該是錯的,請參考PDOStatement::bindParam$stmt -> bind_param("s", $_POST["file"]);
不好意思~那段忘記復原了,我那段是打這樣才對~如果這樣的沒錯的話那問題是出在哪?
我一直在想說enctype="multipart/form-data"
是不是這段的問題
抱歉!第一次使用這個網站發問
抱歉之前看錯以為你是用 PDO,後來才發現是用 mysqli
你要的我猜是這樣
<?php
# 檢查檔案是否上傳成功
include("connMysqlupload.php");
if(
isset($_POST["action"]) &&
$_POST["action"]==="add" &&
isset($_FILES['file'])
) {
if ($_FILES['file']['error'] === UPLOAD_ERR_OK){
echo '檔案名稱: ' . $_FILES['file']['name'] . '<br/>';
echo '檔案類型: ' . $_FILES['file']['type'] . '<br/>';
echo '檔案大小: ' . ($_FILES['file']['size'] / 1024) . ' KB<br/>';
echo '暫存名稱: ' . $_FILES['file']['tmp_name'] . '<br/>';
# 檢查檔案是否已經存在
if (file_exists('Filepaper/' . $_FILES['file']['name'])){
echo '檔案已存在。<br/>';
} else {
$file = $_FILES['file']['tmp_name'];
$dest = 'Filepaper/' . $_FILES['file']['name'];
# 要儲存檔案的話才需要寫入資料庫
$sql_query = "INSERT INTO updataasas (file) VALUES (?)";
$stmt = $db_link -> prepare($sql_query);
$stmt -> bind_param("s", $dest);
$stmt -> execute();
$stmt -> close();
$db_link -> close();
# 將檔案移至指定位置
move_uploaded_file($file, $dest);
}
} else {
echo '錯誤代碼:' . $_FILES['file']['error'] . '<br/>';
}
}
資料庫要儲存的檔名從 $_FILES['file']['name']
拿就好了
好的感謝您~我試看看
有三點要注意的:
1.上傳檔案的「檔案變數」是$_FILES
而不是_$POST
關於「檔案」,從頭到尾都是$_FILES
,不用$_POST
2.變數命名不要用相同名字,會造成混淆
像你參考的這篇裡就用了不同的名稱: my_file
你從頭到尾都參考他的寫法
偏偏就是 file 這個變數不參考
結果就是你的 file 混淆了你自己
一下子是「檔案本身」
一下子又拿來當成「檔案的路徑檔名」
3.還沒確定上傳成功,就將檔名寫進資料庫
應該將這段寫在if ($_FILES['file']['error'] === UPLOAD_ERR_OK){
裡面而不是前面