最簡(jiǎn)單的方法是:你建一個(gè)網(wǎng)頁(yè),做好表單(但是別在這個(gè)表單中寫入上傳)再在在表單中建一個(gè)框架,框架中引用上傳頁(yè)面提交表單時(shí)提交框架中的上傳圖片頁(yè),上傳圖片成功后,(一般上傳成功后你可以返回上傳成功,上傳圖片地址,或者就算上傳出錯(cuò)的話,你也可以返回出錯(cuò)信息)由返回值(這個(gè)JS控制)來確認(rèn)是否提交父頁(yè)面(也就是你的表單是否提交)(上傳成功的話,你再把返回的地址用JS填寫到表單中的上傳圖片地址,再用JS提交表單)
在成都做網(wǎng)站、成都網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)中從網(wǎng)站色彩、結(jié)構(gòu)布局、欄目設(shè)置、關(guān)鍵詞群組等細(xì)微處著手,突出企業(yè)的產(chǎn)品/服務(wù)/品牌,幫助企業(yè)鎖定精準(zhǔn)用戶,提高在線咨詢和轉(zhuǎn)化,使成都網(wǎng)站營(yíng)銷成為有效果、有回報(bào)的無錫營(yíng)銷推廣。創(chuàng)新互聯(lián)建站專業(yè)成都網(wǎng)站建設(shè)10多年了,客戶滿意度97.8%,歡迎成都創(chuàng)新互聯(lián)客戶聯(lián)系。
完成!
這個(gè)方法我覺得最簡(jiǎn)單.
就是用了一點(diǎn)點(diǎn)JS的知道
子框架中引用父框架中的JS時(shí),用parent.父框架中的函數(shù)就可以了
php實(shí)現(xiàn)上傳圖片保存到數(shù)據(jù)庫(kù)的方法。具體分析如下:
php 上傳圖片,一般都使用move_uploaded_file方法保存在服務(wù)器上。但如果一個(gè)網(wǎng)站有多臺(tái)服務(wù)器,就需要把圖片發(fā)布到所有的服務(wù)器上才能正常使用(使用圖片服務(wù)器的除外)
如果把圖片數(shù)據(jù)保存到數(shù)據(jù)庫(kù)中,多臺(tái)服務(wù)器間可以實(shí)現(xiàn)文件共享,節(jié)省空間。
首先圖片文件是二進(jìn)制數(shù)據(jù),所以需要把二進(jìn)制數(shù)據(jù)保存在mysql數(shù)據(jù)庫(kù)。
mysql數(shù)據(jù)庫(kù)提供了BLOB類型用于存儲(chǔ)大量數(shù)據(jù),BLOB是一個(gè)二進(jìn)制對(duì)象,能容納不同大小的數(shù)據(jù)。
BLOB類型有以下四種,除存儲(chǔ)的最大信息量不同外,其他都是一樣的。可根據(jù)需要使用不同的類型。
TinyBlob?????? 最大 255B
Blob????????????? 最大 65K
MediumBlob? 最大 16M
LongBlob????? 最大 4G
數(shù)據(jù)表photo,用于保存圖片數(shù)據(jù),結(jié)構(gòu)如下:
CREATE?TABLE?`photo`?(??
`id`?int(10)?unsigned?NOT?NULL?auto_increment,??
`type`?varchar(100)?NOT?NULL,??
`binarydata`?mediumblob?NOT?NULL,??
PRIMARY?KEY??(`id`)??
)?ENGINE=MyISAM?DEFAULT?CHARSET=latin1?AUTO_INCREMENT=1?;
upload_image_todb.php代碼如下:
?php??
//?連接數(shù)據(jù)庫(kù)??
$conn=@mysql_connect("localhost","root","")??or?die(mysql_error());??
@mysql_select_db('demo',$conn)?or?die(mysql_error());?//?判斷action??
$action?=?isset($_REQUEST['action'])??$_REQUEST['action']?:?'';?
//?上傳圖片??
if($action=='add'){??
$image?=?mysql_escape_string(file_get_contents($_FILES['photo']['tmp_name']));??
$type?=?$_FILES['photo']['type'];??
$sqlstr?=?"insert?into?photo(type,binarydata)?values('".$type."','".$image."')";??
@mysql_query($sqlstr)?or?die(mysql_error());??
header('location:upload_image_todb.php');??
exit();??
//?顯示圖片??
}elseif($action=='show'){??
$id?=?isset($_GET['id'])??intval($_GET['id'])?:?0;??
$sqlstr?=?"select?*?from?photo?where?id=$id";??
$query?=?mysql_query($sqlstr)?or?die(mysql_error());??
$thread?=?mysql_fetch_assoc($query);??
if($thread){??
header('content-type:'.$thread['type']);??
echo?$thread['binarydata'];??
exit();??
}??
}else{??
//?顯示圖片列表及上傳表單??
???
!DOCTYPE?HTML?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN"?""??
html??
head??
meta?http-equiv="content-type"?content="text/html;?charset=utf-8"??
title?upload?image?to?db?demo?/title??
/head??
body??
form?name="form1"?method="post"?action="upload_image_todb.php"?enctype="multipart/form-data"??
p圖片:input?type="file"?name="photo"/p??
pinput?type="hidden"?name="action"?value="add"input?type="submit"?name="b1"?value="提交"/p??
/form??
?php??
$sqlstr?=?"select?*?from?photo?order?by?id?desc";??
$query?=?mysql_query($sqlstr)?or?die(mysql_error());??
$result?=?array();??
while($thread=mysql_fetch_assoc($query)){??
$result[]?=?$thread;??
}??
foreach($result?as?$val){??
echo?'pimg?
src="upload_image_todb.php?action=showid='.$val['id'].'t='.time().'"
width="150"/p';??
}??
???
/body??
/html??
?php??
}??
?
程序運(yùn)行截圖和數(shù)據(jù)庫(kù)截圖:
1:表單提交,在表單中輸入留言,然后提交表單到后臺(tái)PHP;
2:PHP接收表單數(shù)據(jù),然后處理數(shù)據(jù):一般做存表操作;
3:在另外一個(gè)頁(yè)面顯示:訪問另外一個(gè)頁(yè)面,PHP讀取表中存儲(chǔ)的數(shù)據(jù),顯示給用戶
根據(jù)你的程序,重新寫了一套,你自己看一下吧,后面都有相關(guān)的標(biāo)注,會(huì)加深印象,你原程序那個(gè)$filename是程序原本的文件名,沒得到的話,真讓我感覺匪夷所思……不管了,重寫一個(gè)吧,你給的信息也太少了,到底怎么回事也沒弄明白。
哦哦,忽然想到一種可能啊,你好好檢查一下你的數(shù)據(jù)庫(kù)字段,看看是不是char 類型,或text,或varcharf都可以,別是其它不支持的類型哦,這點(diǎn)很重要,不然我這套程序,依舊你也寫不進(jìn)去!!!
?php
include "conn.php";
mysql_select_db("mydb");
if(is_uploaded_file|$_FILES['Filedata']['tmp_name']){ //這一句是用來判斷是否有文件上傳來的。如果有的放,才執(zhí)行下面的內(nèi)容;
$Filedata = $_FILES["Filedata"];
$name = $Filedata['name']; //真實(shí)的文件名字是這個(gè),而不是tmp_name, 要知道,tmp_name是臨時(shí)文件名,是php系統(tǒng)臨時(shí)分配的文件名,只起到一個(gè)短時(shí)間中轉(zhuǎn)的作用。而這個(gè)才是真正的文件名(確切地說,應(yīng)該是上傳時(shí)原文件名。上傳后,這個(gè)文件名是可以隨意更改的。)但是在我這套程序中,好像沒用到它哦。
$type = $Filedata['type']; //這些和上面下面都是一樣,都是$_FILES[]這個(gè)系統(tǒng)變量自動(dòng)生成的一系列參數(shù)。這個(gè)是文件類型;
$size = $Filedata['size']; //這個(gè)是文件大小,以字節(jié)為單位;
$tmp_name = $Filedata['tmp_name']; //這個(gè)是臨時(shí)文件名,看到了吧,重點(diǎn)就在這里,進(jìn)行移動(dòng)的時(shí)候這個(gè)會(huì)用到哦。
$error = $Filedata['error']; //這個(gè)是上傳中是否有什么錯(cuò)誤,如果有錯(cuò)誤的話,會(huì)返回錯(cuò)誤,沒有是false;
////////////////////////////////////////////
//
//===========以下是對(duì)文件進(jìn)行服務(wù)器端驗(yàn)證,做好相關(guān)工作的話,可在一定程度上防止被傳木馬
//
/////////////////////////////////////////////
if($size=30000){
exit('您上傳的文件大小超過限定');
}
switch($type){ //這里我用圖片文件進(jìn)行說明,如果你的是其它文件的話,也可以按這個(gè)方法進(jìn)行處理。
case 'image/pjpeg' : $nameback='.jpg'; //jpeg
break;
case 'image/jpeg' : $nameback='.jpg'; //jpg
break;
case 'image/gif' : $nameback='.gif'; //gif
break;
case 'image/png' : $nameback='.png'; //png
break;
case 'image/bmp' : $nameback='.bmp'; //bmp
break;
case exit('類型犯規(guī)!');
} //switch end
///////////////////////////////////////////
//
//以下是對(duì)文件進(jìn)行上傳后處理,包括更改文件名、寫入數(shù)據(jù)庫(kù)。(當(dāng)然還可以加入判斷是否有重復(fù)文件等,這里就不做實(shí)例了。)
//
///////////////////////////////////////////
if($nameback $error==0){
$filename='UF_' . date("Ymdhs") . $nameback; //新文件名的命名規(guī)則中間的是時(shí)間,就是這一步,可以在一定程序上防止被惡意上傳;
$fileplace='uploads/' . $filename; //上傳后要修改的文件(包括目錄)
$fileroot='uploads/'; //上傳后文件放置目錄;
file_put_contents("catcah.txt",$tmp_name); //存放臨時(shí)文件名
move_uploaded_file($tmp_name, $fileplace); //注意,這里放的是包括目錄和文件名的變量哦,并且在這個(gè)過程中,上傳的文件名也更改啦。
$username = mysql_real_escape_string($_POST['username']);
$query =@mysql_query( "INSERT INTO `$username`(`fname`,`file`)VALUES('$filename','$uploadfile')")or die("error");
}//last if end
}//upload and writefile end(the first if end)
?
不過看你的另一個(gè)字段已經(jīng)寫進(jìn)去了,好像不應(yīng)該是數(shù)據(jù)庫(kù)的問題,也許是$_FILES['Filedata']["name"]根本就沒有取到值?,你不妨在那里echo一下,看看是不是有取到,要學(xué)會(huì)如何調(diào)試哦,調(diào)式能力可以考驗(yàn)一個(gè)phper水準(zhǔn)的重要項(xiàng)目啊。
本文實(shí)例講述了PHP實(shí)現(xiàn)上傳圖片到數(shù)據(jù)庫(kù)并顯示輸出的方法。分享給大家供大家參考,具體如下:
1.
創(chuàng)建數(shù)據(jù)表
CREATE
TABLE
ccs_image
(
id
int(4)
unsigned
NOT
NULL
auto_increment,
description
varchar(250)
default
NULL,
bin_data
longblob,
filename
varchar(50)
default
NULL,
filesize
varchar(50)
default
NULL,
filetype
varchar(50)
default
NULL,
PRIMARY
KEY
(id)
)engine=myisam
DEFAULT
charset=utf8
2.
用于上傳圖片到服務(wù)器的頁(yè)面
upimage.html
!doctype
html
html
lang="en"
head
meta
charset="UTF-8"
meta
name="viewport"
content="width=device-width,
user-scalable=no,
initial-scale=1.0,
maximum-scale=1.0,
minimum-scale=1.0"
meta
http-equiv="X-UA-Compatible"
content="ie=edge"
style
type="text/css"
*{margin:
1%}
/style
titleDocument/title
/head
body
form
method="post"
action="upimage.php"
enctype="multipart/form-data"
描述:
input
type="text"
name="form_description"
size="40"
input
type="hidden"
name="MAX_FILE_SIZE"
value="1000000"
br
上傳文件到數(shù)據(jù)庫(kù):
input
type="file"
name="form_data"
size="40"br
input
type="submit"
name="submit"
value="submit"
/form
/body
/html
3.
處理圖片上傳的php
upimage.php
?php
if
(isset($_POST['submit']))
{
$form_description
=
$_POST['form_description'];
$form_data_name
=
$_FILES['form_data']['name'];
$form_data_size
=
$_FILES['form_data']['size'];
$form_data_type
=
$_FILES['form_data']['type'];
$form_data
=
$_FILES['form_data']['tmp_name'];
$dsn
=
'mysql:dbname=test;host=localhost';
$pdo
=
new
PDO($dsn,
'root',
'root');
$data
=
addslashes(fread(fopen($form_data,
"r"),
filesize($form_data)));
//echo
"mysqlPicture=".$data;
$result
=
$pdo-query("INSERT
INTO
ccs_image
(description,bin_data,filename,filesize,filetype)
VALUES
('$form_description','$data','$form_data_name','$form_data_size','$form_data_type')");
if
($result)
{
echo
"圖片已存儲(chǔ)到數(shù)據(jù)庫(kù)";
}
else
{
echo
"請(qǐng)求失敗,請(qǐng)重試";
注:圖片是以二進(jìn)制blob形式存進(jìn)數(shù)據(jù)庫(kù)的,像這樣
4.
顯示圖片的php
getimage.php
?php
$id
=2;//
$_GET['id'];
為簡(jiǎn)潔,直接將id寫上了,正常應(yīng)該是通過用戶填入的id獲取的
$dsn='mysql:dbname=test;host=localhost';
$pdo=new
PDO($dsn,'root','root');
$query
=
"select
bin_data,filetype
from
ccs_image
where
id=2";
$result
=
$pdo-query($query);
$result=$result-fetchAll(2);
//
var_dump($result);
$data
=
$result[0]['bin_data'];
$type
=
$result[0]['filetype'];
Header(
"Content-type:
$type");
echo
$data;
到瀏覽器查看已經(jīng)上傳的圖片,看是否可以顯示
是沒有問題的,證明圖片已經(jīng)以二進(jìn)制的形式存儲(chǔ)到數(shù)據(jù)庫(kù)了
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php+mysql數(shù)據(jù)庫(kù)操作入門教程》、《php+mysqli數(shù)據(jù)庫(kù)程序設(shè)計(jì)技巧總結(jié)》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結(jié)》及《php常見數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
您可能感興趣的文章:php實(shí)現(xiàn)上傳圖片保存到數(shù)據(jù)庫(kù)的方法php上傳圖片存入數(shù)據(jù)庫(kù)示例分享php上傳圖片到指定位置路徑保存到數(shù)據(jù)庫(kù)的具體實(shí)現(xiàn)php中如何將圖片儲(chǔ)存在數(shù)據(jù)庫(kù)里php下將圖片以二進(jìn)制存入mysql數(shù)據(jù)庫(kù)中并顯示的實(shí)現(xiàn)代碼php
從數(shù)據(jù)庫(kù)提取二進(jìn)制圖片的處理代碼php將圖片保存入mysql數(shù)據(jù)庫(kù)失敗的解決方法php將圖片文件轉(zhuǎn)換成二進(jìn)制輸出的方法php圖片的二進(jìn)制轉(zhuǎn)換實(shí)現(xiàn)方法
這是WEB上傳方式的文件列表形式,你在安裝論壇?這是PHP論壇,前面那些不帶.php的是文件夾,后面那些是根目錄下的PHP文件,每一個(gè)PHP文件都代表了一個(gè)特定的功能,比如POST.PHP就是回貼功能,NOTICE.PHP是公告功能,MESSAGE.PHP是短信功能,INDEX.PHP是首頁(yè),
至于文件夾,
admin 是管理員后臺(tái)管理論壇的頁(yè)面庫(kù)
attachment 是論壇上傳附件的存放處
data 是一些固定數(shù)據(jù),比如論壇的數(shù)據(jù)庫(kù)存放處
hack 為論壇的插件安裝處
htm_data 靜態(tài)頁(yè)面的部份數(shù)據(jù),不常用
images 論壇所需的圖片的存放處
ipdata IP地址數(shù)據(jù)庫(kù)存放處
lang 多語(yǔ)言支持的數(shù)據(jù)庫(kù)
require 包含了論壇的各種所需的變量啊,設(shè)定什么的,不能輕易改
simple 不常用
template 論壇的模板存放處,即風(fēng)格文件存放處
再次提醒,樓主提的文題范圍太大,建議先熟悉一下論壇操作再來研究這些.
wap 改名 刪除
分享名稱:php主頁(yè)面上傳數(shù)據(jù) php實(shí)現(xiàn)圖片上傳
網(wǎng)站網(wǎng)址:http://chinadenli.net/article12/hgosgc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、網(wǎng)站設(shè)計(jì)、電子商務(wù)、小程序開發(fā)、域名注冊(cè)、企業(yè)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)