2014年2月17號 星期一
一:關於manage document):今天之前有兩個問題一直不明白:
1)怎樣將一個數據庫讀出的記錄文件(show.php)顯示在主界面(main.php)恰當的位置上,主要是佈局上的問題?
2)之前的(manage document)的main.php主界面還沒有完善,使其主界面效果看起來更好?
今天,早上一來,就在構思怎樣把界面弄得漂亮些,然後就先找些圖片素材,感覺看起來舒服就採用.關於主界面設計:
採用了頁眉,導航條,主顯示區,尾頁四部分. 對頁眉,尾頁各自寫入top.php和bottom.php.導航條還需要進一步完善,主顯示區應該隨點擊的菜單,顯示不同的頁面,所以主顯示區的頁面調用需要進步一研究.
關於第一個問題,今天解決了,主要是採用了table佈局,在合適的位置調用其顯示的部分.
關於第二個問題.今天也基本完善了!效果還挺好的!
二:明天來研究下怎樣下載文件?
1)昨天主界面有個問題,就是界面列表菜單選擇沒有按照預期顯示,只顯示了<option value="0'">上海</option> ,顯示了0[解決]
今天改了過來,<option value="上海'">上海</option> ,但是插不進數據庫中,怎沒能插不進去數據庫呢?自己測試了下,發現是sql語句有問題,sql語句中數字可以不帶單引號,而現在是字符串,所以就得帶單引號了! 小小記錄一下.
下載文件可以有兩種方式,一種是普通文件下載方式(準備採用這種,簡單,缺點就是不夠安全),第二中用安全下載方式.
目前採用第一種方式,第二中有待學習
三:今天把刪除文檔操作搞了一下!基本可以大概實現其功能,有待完善.準備細化一下自己的知識點:
HTML中的超級鏈接:
超級鏈接可以是一個字,一個詞,或者一組詞,也可以是一副圖像,您可以點擊這些內容來跳轉到新的文檔或者當前前文檔的某個部分.
在開發中頁面之間的跳轉一般都採用超級鏈接,超文本的連接的重要特性之一,使用者可以從一個頁面直接跳轉到其他頁面,圖形和服務器.一個連接的基本格式:
<a href="資源地址">鏈接文字</a>
標籤<A>表示一個連接的開始,</A>表示連接的結束 屬性href 定義連接所指的地方,通過點擊鏈接文字可以達到指定的文件.
四:學習嘗試用switch和include語句設計框架
其實現原理是:應用switch語句,根據超級鏈接中傳遞的變量進行判斷,根據不同變量值應用include調用不同的子文件.
五:關於對onmousemove事件的學習:
定義和用法onmousemove事件是在鼠標移動時發生的,語法:onmousemove = "SomeJavascriptCode"; 參數和描述,javascript是必須的,規定該事件時執行javascript.
示例:
<img src="/i/eg_mouse2.jpg" alt="mouse"
οnmοusemοve="alert('您的鼠標剛纔經過了圖片!')" />
六:關於超級鏈接傳遞參數值:
<a href="index.php?"res=<?php echo urlencode('明日科技');?></a>
這段代碼是爲超級鏈接設置一個參數res,設置參數值爲'明日科技',通過urlencode()函數對參數值進行編碼.
<?php
if(isset($_GET['link'])) /*通過isset()函數驗證$_GET['res']是否存在*/
{
$link=$_GET['link'; /*如果存在則將該值賦給變量$res*/]
}
else{
$link="首頁";
}
switch($link){
.......
終於把用超級鏈接調用文件弄出來了,其實很簡單,就是自己第一次嘗試,有時候$_GET[' ']寫成了$GET,我檫,不仔細導致我的進度明顯慢了好多!
七:關於對簡單分頁技術的理解
分頁核心技術在於確定當前的頁數,然後利用MySQL中的LIMIT關鍵字來指定輸出的對應的記錄數啊.
如當前第一頁,就輸出LIMIT 0,4(這裏第一頁只輸出4條記錄),如果想輸出第二頁就是LIMIT 4,4 ,第三頁就是 LIMIT 8,4 ....第n也就是LIMIT(n-1)x4,4
採用超級鏈接獲取參數$p,
八:關於查詢功能開發:
1)方式採用時間段查詢:
在SQL語句中,對指定範圍內的數據進行查找可以有兩種方式:
第一種通過關鍵字between ...and ...實現.語法格式如下:
select 要查找的字段 from 表名 where 字段名 between 初始值 and 終止值;
第二中方式是通過比較運算符實現.語法格式如下:
select 要查找的字段 from 表名 where 字段名 >初始值 and 字段名 <終止值;
2)關於模糊查詢
$sql=mysql_query("select * from tb_jour where wznr like '%$keyword%' order by id desc limit 2");
$info=mysql_fetch_array($sql);
這裏簡單介紹下mysql_fetch_array()函數,
使用mysql_query()函數執行select 語句時,成功將返回查詢結果集,返回結果集後,使用mysql_fetch_array()函數可以將查詢結果集信息,並放入一個數組中.
3)關於模糊查詢中的遇見的一個小問題:
也就是常用的do.{} while(); 和 while .() {}
$info=mysql_fetch_array($sql);
if($info==false)
{
echo "<br><div align=center>對不起,沒有查找到您要查找的內容!</div>";
}
else
{
?>
<table width="100%" border="2" cellpadding="0" cellspacing="0" bordercolor="#FFFFFF">
<tr align="left" valign="middle" class="style3" >
<td height="18"> <div align="center">資源名稱</div></td>
<td>共享者</td>
<td height="18">關鍵字</td>
<td height="18">簡單描述</td>
<td height="18">上傳時間</td>
<td height="18">下載區域</td>
</tr>
<?php
do
{
?>
<tr align="center" valign="middle" class="style1">
<td height="15">
<div align="left"><span class="style2"><?php echo $info['filename'];?></span></div></td>
<td height="15">
<div align="left"><span class="style2"><?php echo $info['staff'];?></span></div></td>
<td height="15">
<div align="left"><span class="style2"><?php echo $info['tag'];?></span></div></td>
<td height="15">
<div align="left"><span class="style2"><?php echo $info['des'];?></span></div></td>
<td height="15">
<div align="left"><span class="style2"><?php echo $info['time'];?></span></div></td>
<td height="15">
<div align="left"><a href="../document/<?php echo $info['filename'];?>">點擊下載</a></div></td>
</tr>
<?php
}while($info=mysql_fetch_array($sql));
}
剛開始以爲可以用while(){}句型替換掉,測試發現後總是顯示記錄不全,查後發現第一條記錄直接被忽視了!所以,採用do {} while ();還是比較好,第一條其實已將被讀到數組中了採用這種方式,不需要判斷條件,先讀出錄入的數據信息,然後再錄入第二條! 採用while(){}句型,第一條直接被忽視了! ,其實整個代碼可以被改造,採用while();句型也可以!小小的記錄一下!
八:關於文件刪除學習
PHP中文件刪除函數unlink()
unlink()函數用於刪除一個文件,如果成功,則返回true,否則返回false.
語法:bool unlink(string filename)
例子:
<?php unlink("test.txt"); ?>
示例:刪除Doc目錄下的所有文件.
PHP中的Del.php
<html>
<head>
<title>
刪除示例
</title>
</head>
<body>
<form method="post" name="form1" action="CkDel.php" id="form1">
<input type="submit" value="刪除" name="delbutton">
</form>
</body>
</html>
CkDel.php
<?php
$path="../DOC/";
if(is_dir($path))
{
echo"指定的文件夾存在";
if($dh=opendir($path))
{
while(($file=readdir($dh)))
{
if( $file!="." && $file!="..")
{
$fullpath="$path"."$file";
if(!is_dir($fullpath))
{
if(unlink("$fullpath"))
{
echo "已經成功刪除$fullpath";
}
else
{
echo "刪除失敗!";
}
}
else
{
echo "$fullpath是一個目錄";
}
}
}
}
closedir($dh);
}
else
{
echo "指定文件夾不存在";
}
?>
效果:刪除文件加DOC目錄下的所有文件.使DOC爲空文件.
<今天終於把刪除功能寫出來了>
//刪除文件函數delfile($path,$file) ,參數給出目錄路徑和要刪除的文件名.
/*
輸入參數爲$path; 文件存儲路徑 $path="../document/";
輸入參數爲$file; 刪除文件名稱
*/
function delfile($path,$file)
{
//先判斷指定的文件夾是否存在
if(is_dir($path))
{
//指定文件夾存在,那就打開指定目錄
if(opendir($path))
{
//文件全路徑
$fullpath="$path"."$file";
// echo "$fullpath";
if(!is_dir($fullpath)) //判斷文件是子目錄還是子文件,如果是子文件,就刪除
{
if(unlink("$fullpath"))
{
echo "$fullpath文件已經成功刪除";
}
else
{
echo "刪除文件失敗!";
}
}
else
{
echo "不能直接刪除目錄操作!";
}
}
else
{
echo "打開指定目錄出錯!";
}
}
else
{
echo "指定的文件夾目錄$path不存在";
}
}
做刪除功能今天調試遇到一個需要注意的問題: 我們通過提交的關鍵字id來得到要刪除的文件名稱集,我們應該先刪除文件後,然後再刪除數據庫中的記錄!前後關係必須懂!今天就是因爲把數據庫中的記錄都刪除了,然後在獲取刪除的文件名,可想而知,這是不可能的!記錄已經被刪了,怎沒還能讀出來呢! 記錄下自己的過失!
<?php
include_once("../Conn/Conn.php"); //包含數據庫文件
//文件存儲路徑
$path="../document/";
if($_POST['conn_id']!=""){
for($i=0;$i<count($_POST['conn_id']);$i++)
{
//獲取數據庫的文件名稱記錄
$dbfile=mysql_query("select * from tb_document where id='".$_POST['conn_id'][$i]."'",$conn);
if($info=mysql_fetch_array($dbfile))
{
//獲取記錄的文件名稱
$delfile=$info['filename'];
// echo "filename";
}
//調用刪除函數
delfile($path,$delfile);
//刪除數據庫中的數據
$result=mysql_query("delete from tb_document where id='".$_POST['conn_id'][$i]."'",$conn);
if($result)
{
echo "<script>alert('刪除數據庫文件記錄成功!');window.location.href='delfile.php';</script>";
}
else
{
echo "刪除數據庫文件記錄失敗!";
}
}
}
//刪除文件函數
/*
輸入參數爲$path; 文件存儲路徑 $path="../document/";
輸入參數爲$file; 刪除文件名稱
*/
function delfile($path,$file)
{
//先判斷指定的文件夾是否存在
if(is_dir($path))
{
//指定文件夾存在,那就打開指定目錄
if(opendir($path))
{
//文件全路徑
$fullpath="$path"."$file";
// echo "$fullpath";
if(!is_dir($fullpath)) //判斷文件是子目錄還是子文件,如果是子文件,就刪除
{
if(unlink("$fullpath"))
{
echo "$fullpath文件已經成功刪除";
}
else
{
echo "刪除文件失敗!";
}
}
else
{
echo "不能直接刪除目錄操作!";
}
}
else
{
echo "打開指定目錄出錯!";
}
}
else
{
echo "指定的文件夾目錄$path不存在";
}
}
?>
2014年03月10日:
case 1:簡單描述如果少於10個字,跳轉頁面就會出現異常!
這個case上傳數據庫時,就已經對傳入的字符進行判斷,如果小於10,就會跳出提示框! 此次操作原因是<script> </script>少了一個斜槓!
case 2:上傳文檔的大小,怎樣獲取其小數2位數,如果文件比較大,就用MB作單位,如果文件比較小,就如KB作單位.
例如:數字結果爲3.1415926 ,結果應該是3.14.需要用到這個函數floor.該函數是捨去取整.如floor(3.664544) ,結果就是4.
我們可以採用先乘以100,然後再取整,然後再除以一百,
例如 $a=floor((3.1415926*100))/100 .就可以得到3.14.
經常用到小數點後取幾位,但不能進位的情況。比如3.149569 取小數點後兩位,最後兩位不能四捨五入。結果應該是3.14。需要用到這個函數floor。該函數是捨去取整。如floor(4.66456) 結果:4 。 floor(9.1254) 結果9 。所以要去小數點後兩位,需要先乘以100,然後捨去取整,在除以100 $a=floor(3.149569*100)/100
2014年4月1號:今天學習下Session 管理
Session(會話)是指在用戶訪問web站點上的時期內存儲的用戶操作的一些動作.
Session的生命週期是從用戶訪問頁面開始,到斷開與網站的連接爲止,形成Session的生命週期.
Session在Web技術中佔有非常重要的地位.由於網頁是一種無狀態的連接程序,無法記錄用戶的瀏覽狀態,因此必須通過Session記錄用戶的有關信息,以供用戶再次以此身份對Web服務器提供要求時確認.
php中會話啓動的方式有兩種:一種是應用session_start()函數;另一種是應用session_register()函數爲會話登錄一個變量來隱含地啓動會話.
Cookie與Session的比較:
Sessions是將信息保存在服務器上,並通過一個Session ID來傳遞客戶端的信息,服務器在接收到Session ID後根據這個ID來提供相關的Session信息資源;
而Cookie是所有的信息以文本文件的形式保存在客戶端,並由瀏覽器進行管理和維護.
由於Session爲服務器存儲,遠程用戶沒有辦法修改Session文件內容;而Cookie爲客戶端存儲,所有Session要比Cookie安全的多.當然是用Session還有很多優點,如控制容易,可以按照用戶定義存儲(存儲於數據庫中)等.
2014年04月04日:
還需要解決一些驗證問題:
例如註冊時,綁定手機時,看手機格式是否正確,郵箱格式時候正確!
瀏覽器的兼容性問題也得解決!
2014年0408日:
昨天空閒時間把註冊的一些小問題解決掉了!在沒有登錄之前,非法進入主頁面也解決掉了!
做下小記錄!
還需要把登出小功能做了!(註銷)
2014年0411日:
怎樣添加驗證碼功能!
2014年0425:
又要擴展下這個東西,今天主要任務:怎樣實現多文件上傳:
HTML <form>標籤的enctype屬性
定義和用法
enctype 屬性規定在發送到服務器之前應該如何對錶單數據進行編碼。
默認地,表單數據會編碼爲 "application/x-www-form-urlencoded"。就是說,在發送到服務器之前,所有字符都會進行編碼(空格轉換爲 "+" 加號,特殊符號轉換爲 ASCII HEX 值)。
語法
<form enctype="value">
屬性值
值 描述
application/x-www-form-urlencoded 在發送前編碼所有字符(默認)
multipart/form-data 不對字符編碼。
在使用包含文件上傳控件的表單時,必須使用該值。
text/plain 空格轉換爲 "+" 加號,但不對特殊字符編碼。
2014年04月28號
昨天實現了多文件上傳,後面要實現需要創建目錄,然後將文檔上傳到固定的目錄中!
文檔分類:
創建分類目錄,目的上讓不同的文檔傳入到不同改的分類目錄中,
然後將創建的分類,放入到數據庫中,做記錄.
在多文件上傳的界面,顯示不同的分類.
2014年05月13號
今天上傳大文件報錯如下:
Warning: POST Content-Length of 23373902bytes exceeds the limitof 8388608bytes in Unknown on line 0
現在解答:
我們使用POST請求提交的數據大小超過了服務器的最大限制數(8388608字節=8MB)
出現上述錯誤的原因是,在PHP的配置文件php.ini中,默認存在如下配置信息(在php.ini中,行首的分號”;”表示當前行是註釋,不會生效):
;腳本解析輸入數據(類似 POST
和 GET)允許的最大時間,單位是秒。它從接收所有數據到開始執行腳本進行測量的。
max_input_time = 60
;允許客戶端單個POST請求發送的最大數據
post_max_size = 8M
;是否開啓文件上傳功能
file_uploads = On
;文件上傳的臨時存放目錄(如果不指定,使用系統默認的臨時目錄)
;upload_tmp_dir =
;允許單個請求上傳的最大文件大小
upload_max_filesize =
2M
;允許單個POST請求同時上傳的最大文件數量
max_file_uploads =
20
從上面的配置信息中我們可以看出,PHP的默認配置信息就是導致PHP文件上傳時提示文件大小超出限制的“罪魁禍首”。上述配置信息中給出了各個指令選項對應的中文註釋信息,大家可以根據自己的實際需求情況對php.ini配置文件進行相應的修改
2014年5月26號:
今天主要是實現創建根目錄,以便於在根目錄中再次創建子目錄.
這裏先對幾個函數的理解:
dirname 返回路勁中的目錄部分,string dirname(string path) 返回 path的父目錄
mkdir 創建文件目錄,只能創建一級目錄.
is_dir 用於判斷文件名給出的目錄是否是有效目錄
[需求]創建多及目錄!例如:$dir="../document/renyao";
<?php
$path_dir="../document/renyaobin";
mkdirs($path_dir);
function mkdirs($dir, $mode=0777)
{
if(is_dir($dir) || @mkdir($dir,$mode)) return TRUE;
if(!mkdirs(dirname($dir),$mode)) return FALSE;
return @mkdir($dir,$mode);
}
?>
2014年5月28號 今天實現下用PHP代碼實現文件安全下載,我們一般實現下載都是調用url來下載,但是遇到ie能識別打開的文件就不能用這種方式了,比如下載圖片,html網頁等,這時就需要編程來實現,下來我們用PHP代碼來解決此問題:
<?php
//我們需要下載../document/renyb/Learning Python_4.pdf
//文件下載路徑
$file_path="../document/renyb/Learning Python_4.pdf";
$filename="Learning Python_4.pdf";
//首先檢查文件是否存在
if(!file_exists($file_path))
{
echo "文件找不到";
}
else
{
//打開指定文件
$file =fopen($file_path,"r");
header("Content-type:application/octet-stream"); //輸出MIME類型
header("Accept-ranges:bytes"); //可接受的範圍
header("Accept-length:".filesize($file_path)); //文件長度
header("Content-Disposition:attachment;filename=".$filename); //默認的文件保存對話框中的文件名稱
//輸出文件內容
echo fread($file,filesize($file_path));
fclose($file);
}
?>
2014年5月29日 關於目錄樹的學習
我們想要一個什麼樣的目錄樹:
我們有一個根目錄:
根目錄下我們創建一級菜單,在每一個一級菜單,我們在創建一個子菜單,然後當我們點擊子菜單的時候,就可以在主界面主顯示在子目錄中的所有文檔.