您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“如何理解簡(jiǎn)單的php新聞發(fā)布系統(tǒng)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“如何理解簡(jiǎn)單的php新聞發(fā)布系統(tǒng)”吧!
簡(jiǎn)單的php新聞發(fā)布系統(tǒng)教程(第一版)第一講:用 phpmyadmin 建立數(shù)據(jù)庫首先建立一個(gè)數(shù)據(jù)庫,名為 yayu 。在這個(gè)數(shù)據(jù)庫下建立一個(gè)數(shù)據(jù)表,名為 news 。下面進(jìn)入一個(gè)重點(diǎn),那就是在表 news 下建立各個(gè)字段。
那么,什么叫字段呢?通俗點(diǎn),就是一類事物的總稱。比如說,所有的新聞發(fā)表時(shí)間用一個(gè)名詞來代表(從偶的經(jīng)驗(yàn)來看,用 phpmyadmin 建立 字段可以用中文,但從習(xí)慣來說還是用英文,沒辦法,計(jì)算機(jī)美國最牛嘛)。偶們用“ time ”來表示。在字段 time 下可以有很多“發(fā)表時(shí)間”,那 么如何來區(qū)分這些時(shí)間呢,這個(gè)可以查詢其它字段下的內(nèi)容,比如偶們建立新聞的標(biāo)題的字段為“ title ”, title 字段下的內(nèi)容按照常理說來是 沒有一樣的。所以可以通過一個(gè)標(biāo)題來查詢這個(gè)發(fā)表時(shí)間。其實(shí)我們可以讓每個(gè) title 或 time 下的內(nèi)容都對(duì)應(yīng)一個(gè)編號(hào),那就是字段——
“ id ”:字段“ id ”是一個(gè)人們默認(rèn)的首選字段,其它字段下的內(nèi)容可以重復(fù)出現(xiàn),但這個(gè)字段卻是從 1 開始增大的阿拉伯?dāng)?shù)字。在設(shè)置這 個(gè)字段時(shí),要設(shè)置主鍵、索引、唯一以及 auto-increment 。這個(gè) auto-increment 就是自動(dòng)增加的意思。當(dāng)任一字段增加內(nèi)容 時(shí),這個(gè)字段就自動(dòng)增加 1 ,也就是說,任一字段都對(duì)應(yīng)一個(gè)唯一的 id ,比如 1 、 2 、 0 27 ……
下面談?wù)勑侣劜糠肿侄蔚慕ⅰ?/p>
1. id :意義為每個(gè)新聞的編號(hào),它是唯一的,類型為 tingint ,這個(gè) tingint 類型無須指定長度,系統(tǒng)默為 4 ;在“額外”中選擇 auto-increment ,并選擇主鍵。
2. author :意義為作者 (新聞發(fā)布人),設(shè)置類型為 varchar ,設(shè)置這個(gè)字段長度時(shí),如果考慮作者均為中國人,則 8 個(gè)字節(jié)為上限( 4 個(gè)漢字),但如果考慮到作者 可能為外國人, 8 個(gè)字節(jié)顯然太少了,對(duì)其它字段也存在同樣的問題,在這里偶們把長度設(shè)置為 8 吧。
3. title :意義為新聞標(biāo)題,類型為 varchar ,長度為 60 吧,屬性為 primany key 。
4. content :意義為新聞的內(nèi)容,類型為 text 。這個(gè)類型無須設(shè)置長度了。
5. source :意義為新聞的來源,類型為 varchar ,長為 60 。
6. date :意義為發(fā)表時(shí)間,類型為 datetime ,長度無須設(shè)置,屬性為 primany key 。
下面補(bǔ)充以下字段類型的相關(guān)內(nèi)容:
1 . date :時(shí)間和日期類型。時(shí)間和日期類型還包括以下:
⊕ datetime : 0000-00-00 00:00:00
⊕ date: 0000-00-00
⊕ timestamp: 00000000000000 ( 14 個(gè) 0 ,長度取決于顯示尺寸)
⊕ time: 00:00:00
⊕ year: 0000
2 . conten t 字段代表新聞內(nèi)容,由于其容量可能會(huì)很大,因此采用 text 類型(最多支持 65535 字節(jié))
3 . title 字段設(shè)置為 primany key ,如果不會(huì)有一條以的新聞具有相同的發(fā)表時(shí)間, date 字段也可以作為? primany key ,這樣今后對(duì)新聞的排序和檢索會(huì)更加方便。
4 . text 類型的字段雖然也屬于一種字符類型,但其大小不能指定,如果設(shè)置長度,則系統(tǒng)會(huì)提示 SQL 語句出錯(cuò)。
現(xiàn)在, news 數(shù)據(jù)表就建立好了。
由于新聞不是所有人都能增加的,只能有管理員來做,所以現(xiàn)在我們?cè)賮斫?shù)據(jù)表 users 來存放管理員們。
1 : id :類型為 tinyint ,額外設(shè)置為 auto-increment、主鍵。
2 : name :意義為管理員名稱,類型為 varchar ,長為 8 ,屬性為 primany key 。
3 : password :意義為密碼, 類型為 varchar ,長為 32 。
4 : mail :一樣為郵件地址, 類型為 varchar ,長為 30 。
現(xiàn)在,兩個(gè)數(shù)據(jù)庫就設(shè)置好了,下面偶們進(jìn)入新聞程序的開發(fā)中。
芽雨原創(chuàng)php新聞系統(tǒng)教程(第一版) 第二講:新聞程序的基礎(chǔ)
一.連接數(shù)據(jù)庫的基礎(chǔ)
偶們添加、取出、修改、刪除新聞都必須首先做一件事,那就是連接主機(jī),選擇數(shù)據(jù)庫,向數(shù)據(jù)庫發(fā)出請(qǐng)求。否則一切都是紙上談兵。下面介紹三個(gè)重要的 MySQL 語句,分別是: mysql_pconnect( ) (連接主機(jī)), mysql_select_db( ) (選擇數(shù)據(jù) 庫), mysql_query() (向數(shù)據(jù)庫發(fā)出請(qǐng)求)。
1 . mysql_pconnect( )
它的作用是連接主機(jī)。
語法為: mysql_pconnect( “ 要登陸的主機(jī) ”,” 登陸時(shí)的用戶名 ”,” 密碼 ”);
如 mysql_pconnect( “l(fā)ocalhost”,”root”,””);
其中的“ localhost ”、“ root ”都是 phpmyadmin 默認(rèn)下的主機(jī)名和用戶名,并且密碼為空。
同功能的函數(shù)還有 mysql_connect( ) 。語法是一樣的,區(qū)別在于前者開啟一個(gè)長期連接,且無法使用 mysql_close() 函數(shù)關(guān)閉,而后者使用完后要用 mysql_close() 及時(shí)的關(guān)閉。對(duì)于一個(gè)網(wǎng)站來說,使用前者比后者好。這樣可以減輕 MySQL 服務(wù)器處理連 接和關(guān)閉連接的負(fù)擔(dān)。
這個(gè)函數(shù)成功連接后,會(huì)返回一個(gè)連接 ID 。因此,這個(gè)函數(shù)一般這樣寫:
$link= mysql_pconnect( );
說到這,補(bǔ)充一個(gè)函數(shù) mysql_close() ,
語法為: mysql_close(“ 要關(guān)閉的連接 ID”);
比如: mysql_close($link);
注:所有 ( ) 內(nèi)都為字符串,有 $ 符號(hào)時(shí)就無須 ”” 了。
2 . mysql_select_db( )
它的作用是選擇一個(gè)數(shù)據(jù)庫為當(dāng)前數(shù)據(jù)庫。以后的操作就都在這個(gè)數(shù)據(jù)庫中進(jìn)行了。這個(gè)函數(shù)如果執(zhí)行成功,返回一個(gè) true ,否則返回 false 。
語法為: mysql_select_db( “ 數(shù)據(jù)庫名稱 ”,” 連接的 ID”);
第二個(gè)參數(shù)可以省略,它會(huì)自動(dòng)尋找并連接最后一個(gè)使用的連接 ID 。
在本程序中,這個(gè)語句偶們寫成: mysql_select_db( “yayu”,$link);
3 . mysql_query()
它的作用是向服務(wù)器發(fā)出一個(gè)提出請(qǐng)求的字符串。
語法為: mysql_query(“ 提出問題的字符串 ”, 連接 ID);
其中第一個(gè)參數(shù)是一個(gè)完整的 MySQL 語句,第二個(gè)參數(shù)可以省略,偶一般是把它省略的。
在使用這個(gè)函數(shù)前應(yīng)該先用 mysql_select_db( ) 指定要使用的數(shù)據(jù)庫。
當(dāng)提問的字符串是 update 、 insert 或 delete 時(shí),函數(shù)返回的結(jié)果是 true 或 false ,表明查詢是否成功,如果提問字符串是 select 語句則返回一個(gè)結(jié)果 ID ,如果 select 發(fā)生錯(cuò)誤,則返回 false 。
了解了上面三個(gè)重要的函數(shù)后,偶們就可以對(duì)數(shù)據(jù)庫發(fā)號(hào)施令了。那偶們用什么來發(fā)號(hào)施令呢?下面偶們?cè)賮砜此膫€(gè) MySQL 語句吧!
二.向數(shù)據(jù)庫發(fā)出請(qǐng)求語句基礎(chǔ)知識(shí)
它們分別是: insert (向數(shù)據(jù)庫插入數(shù)據(jù))、 delete (刪除數(shù)據(jù)表中的數(shù)據(jù))、 select (檢索數(shù)據(jù))、 update (更新數(shù)據(jù))。
1 insert ():向數(shù)據(jù)庫插入數(shù)據(jù) 。
語法A: insert into 數(shù)據(jù)表名(字段1,字段2,……) values(“ 字段1 d 的內(nèi)容 ”,” 字段的2內(nèi)容 ” …… )
語法B: insert into 數(shù)據(jù)表名 set 字段1 =” 字段1的內(nèi)容 ”, 字段 2=” 字段 2 的內(nèi)容 ”, ……
對(duì)A中,字段名可以省略,但后面的 values 部分的內(nèi)容必須要和 phpmyadmin 中定義的字段順序一樣。
下面請(qǐng)看例子:
A: insert into news(title,date,author,source,content) values($title,$date,$author,$source,$content)
注:上面的“ $ ……“代表了要添加字段的內(nèi)容,定義時(shí): $ …… = 內(nèi)容 ;
B: insert into news set title=$title,author=$author
注:如果內(nèi)容是數(shù)字,則 ”” 可以省略。
2 delete ():刪除數(shù)據(jù)表中的數(shù)據(jù)
語法: delete from 數(shù)據(jù)表名 where 指定地點(diǎn) limit 數(shù)字
如果沒有“ where 指定地點(diǎn)”則表中所有數(shù)據(jù)都沒了?!?limit 數(shù)字”可以告訴服務(wù)器可以刪除的最大行數(shù)。
例子: delete from news where id=$id limit 1
3. select () : 檢索數(shù)據(jù)
語法: select 字段名1 , 字段2 , …… from 數(shù)據(jù)表名 where 地點(diǎn)
如果想列出所有記錄中所有列的數(shù)據(jù),可以使用“ * “代表字段名。
例子:A: select id,author from news where id=$id
B: select * from news where id=$id
4 update ():更新數(shù)據(jù)
語法和 insert 幾乎是完全一樣的。
如: update news set author=$author,title=$title where id=$id
值得注意的是,使用 update 語句時(shí),要注意使用 where 字句,否則可能會(huì)導(dǎo)致大量的數(shù)據(jù)丟失。比如:
update news set author=” 芽雨 ”
這個(gè)操作會(huì)使表中所有的作者都變成“芽雨”了。
再舉一個(gè)正面的例子,記錄管理員的表 users 中,如果有一個(gè)字段為 age ,用來存儲(chǔ)用戶的年齡,一年后,他們要增加一歲,可以使用以下的語句:
update users set age=age+1
太好了,偶們現(xiàn)在已經(jīng)掌握程序大部分的基礎(chǔ)了,還有小部分偶們以后在例子中掌握吧。
現(xiàn)在偶們面臨的問題是如何寫出算法了。
芽雨原創(chuàng)php新聞系統(tǒng)教程(第一版) 第三講:新聞程序的算法(一) ------ 添加新聞
一。添加新聞
添加新聞既是向數(shù)據(jù)庫添加新的數(shù)據(jù)。
整個(gè)算法是這樣的:管理員在表單中填寫新聞的內(nèi)容,包括: title,author,source,content ,另外兩個(gè)字段 ( id,time )的內(nèi)容有服務(wù)器完成,當(dāng)然也要自己寫程序,只是不由自己手動(dòng)而已。提交表單后,用 MySQL 語句將它們添加到數(shù)據(jù)庫中。
下面簡(jiǎn)單介紹一下表單中 <input> 標(biāo)簽和 <textarea></textarea> 標(biāo)簽。
<input> 標(biāo)簽為單行文本框。偶們常用的屬性有: name, type 。 name 屬性指定了變量的名稱,既這個(gè)名稱代表 了這個(gè) <input> 中的內(nèi)容。 type 屬性指定了 <input> 中內(nèi)容的性質(zhì)。如果 type=text ,則為 一般性的文字。如果 type=password ,則這個(gè)“ <input> ”中的內(nèi)容在瀏覽器一律以黑點(diǎn)顯示,這樣可以在輸入內(nèi)容時(shí)不 會(huì)在無意中被他人見到而造成數(shù)據(jù)安全問題。
<textarea></textarea> 標(biāo)簽為多行文本框,常用屬性為 name 。
在本程序中此段程序如下所示:
<input name="author" type="text" size="40" maxlength="20">
在“ name="author" ”中的 "author" 就代表了“ <input> ”中的內(nèi)容。同樣的,這個(gè) "author" 也可以是 "title" 或者其他,值得注意的是,這個(gè) "author" 和字段 author 是不一樣的。偶在這個(gè)地方提到 兩個(gè)非常相似的概念:字段 author 和變量 $author (上面的 ”author” 實(shí)際上就是 $ author ,因?yàn)樗砹?“ <input> ”中的內(nèi)容)。雖然它們幾乎是同名的,但可絕對(duì)不是一回事。 Author 是數(shù)據(jù)表 news 里的一個(gè)字段名, PHP 用它來有限定的訪問 MySQL 中的數(shù)據(jù),在程序中是不能用其它的字符替換的;而 $author 是本程序中用戶自己設(shè)定的變量符號(hào),其值由 “ <input> ”中對(duì)應(yīng)元素的 name 屬性得到。既然它只是變量符號(hào),偶們就可以使用任意字段,只要保證與表單中對(duì)應(yīng)元素的 name 屬性一致就可。之所以選擇用與字段名相同的字符,是因?yàn)檫@樣偶們就不必再費(fèi)力去多記一個(gè)變量名而已。
偶們?cè)賮砜?<textarea></textarea> 標(biāo)簽中的內(nèi)容:
<textarea name="content" cols="80" rows="15" wrap="HYSICAL">
這個(gè) <textarea></textarea> 中的內(nèi)容是用來得到 content 字段內(nèi)容的,因?yàn)榇俗侄沃械膬?nèi)容太多,所以只能用這個(gè)標(biāo)簽了。
當(dāng)偶們填好這些內(nèi)容后,只要提交就可以了,那么這一過程又是如何實(shí)現(xiàn)的呢? 下面偶們?cè)賮砜匆韵碌某绦颍?/p>
<input name="submit" type="submit" value=" 提交新聞 ">
<input type="reset" name=" reset" value=" 重寫新聞 ">
這里的 type="submit"/ type="reset" 分別代表提交和重寫新聞。 value 屬性的內(nèi)容在此按鈕上顯示出來。 name=" reset"/ name="submit" 中的含義和上面所說的是一樣的。
HTML 中的表單( form )元素是專門負(fù)責(zé)也用戶進(jìn)行交互式操作的。當(dāng)點(diǎn)擊類型為 submit 的按鈕時(shí),表單中所有的元素都將以變量的形式提交給 action 所指的文件來處理。變量名由該元素的 name 屬性來確定。在本程序中這個(gè)代碼如下:
<form action=addnews.php method=post>
在這個(gè)地方偶們把處理數(shù)據(jù)的程序還是放在同一頁面( action=addnews.php ),在 method 屬性中偶們令 method=post ,這里的 post 是值傳遞的方式。那現(xiàn)在偶們就在 action 指定的頁面來討論以下的程序:
$author=$_POST["author"];
這里的 $author 是偶們自己定義的變量名, author 是在 <input> 標(biāo)簽中 name 屬性中定義的名字。 POST 為 <form> 中 method 定義的值傳遞方式。通過這種值傳遞方式得到的數(shù)據(jù),偶們一律用 $_POST[" "] 收取。
完整的這類程序如下所示:
if(@$_POST["submit"])
{
$author=$_POST["author"];
$department=$_POST["department"];
$title=$_POST["title"];
$content=parsecontent($_POST["content"]);
$date=date("y-m-d H:i");
mysql_query("INSERT INTO news(title,date,author,department,content) VALUES('$title','$date','$author','$department','$content')");
}
其中的 date( ) 函數(shù)用法請(qǐng)查看其他書籍。上面一共是 5 個(gè)字段,還有一個(gè)字段 id 因?yàn)榕紓冊(cè)凇邦~外”中選擇了 auto-increment ,所以上面的數(shù)據(jù)插入到數(shù)據(jù)庫時(shí), id 就自動(dòng)加 1 了。
當(dāng)然在這個(gè)程序前,必須先連接好數(shù)據(jù)庫,下面的所有與數(shù)據(jù)庫連接的程序也是一樣的,必須先連接還數(shù)據(jù)庫。
芽雨原創(chuàng)php新聞系統(tǒng)教程(第一版) 第三講:新聞程序的算法(二) ------- 顯示
二.顯示新聞
添加新聞后,就可以讓別人來看新聞了。
這里的算法是這樣的:先在新聞首頁上顯示新聞的標(biāo)題及其他附加內(nèi)容(如發(fā)表時(shí)間),這可以用循環(huán)輸出的辦法輸出所有的新聞的標(biāo)題。要查看具體新聞的內(nèi)容時(shí),點(diǎn)擊新聞標(biāo)題的超級(jí)鏈接進(jìn)入一個(gè)新的頁面查看這條新聞。
在開始這程序之前,鏈接好數(shù)據(jù)庫。
當(dāng)新聞很多時(shí),偶們就要給新聞分頁了,偶們?cè)O(shè)置好每頁顯示 10 條新聞。
具體的分頁程序如下:
$respage = mysql_query("SELECT COUNT(*) FROM news;"); //$num 是數(shù)據(jù)庫中總紀(jì)錄數(shù)
while($row = mysql_fetch_row($respage))
{
$num = $row[0];
}
$recordnum =10;
$pages = ceil($num/$recordnum); // $recordnum 是每頁顯示多少條記錄, $pages 是一共有多少頁
if (@$_GET["page"]) // 獲取 url 中的參數(shù) page
{
//$current 是當(dāng)前頁 ,$pre 是前一頁的, $next 是后一頁, $pre 和 $next 為后面前一頁和后一頁的連接參數(shù) page 的值
// 如果 url 中的參數(shù)為 1 ,把當(dāng)前頁置為 1 前一頁, $pre 也為一, $next 為 2
if($_GET["page"]==1)
{
$current = 1;
$pre = 1;
$next = 2;
}else{
// 如果 url 中的參數(shù)不為一(不是第一頁),就把當(dāng)前頁取值為 url 中獲得的參數(shù), $pre 為當(dāng)前頁減 1 , $next 為加 1
$current = $_GET["page"];
$pre = $current-1;
$next = $current+1;
}
}else {
// 如果 url 中沒有參數(shù) page ,當(dāng)前頁置為 1 , $pre=1,$next=2
$current = 1;
$pre = '1';
$next = 2;
}
$now = ($current-1)*$recordnum;
$echopage = "<table width=450 cellpadding=0 cellspacing=0><tr>";
$echopage .= "<td><font>".$pages." 頁 </font></td>";
$echopage .= "<td><font><a href=".$_SERVER["HP_SELF"]."?page=1> 第一頁 </a><font></td><td><font><a href=".$_SERVER["HP_SELF"]."?page=".$pages."> 最后一頁 </a></font></td>";
$echopage .= "<td><font><a href=".$_SERVER["HP_SELF"]."?page=$pre> 前一頁 </a> <a href=".$_SERVER["PHP_SELF"]."?page=$next> 后一頁 </a></font></td>";
$echopage .= "<td><font> 到第 <select name='topage' size='1' onchange='window.location="".$_SERVER["PHP_SELF"]."?page="+this.value'>n";
for($i=1;$i<=$pages;$i++){
if($i==$current)
$echopage .= "<option value='$i' selected>$i</option>n";
else
$echopage .= "<option value='$i'>$i</option>n";
}
$echopage .= "</select> 頁 </font></td>";
$echopage .= "</tr></table>";
對(duì)這段程序偶就不做詳細(xì)的講解了。因?yàn)楹苈闊?,再說這和新聞程序的算法不是一回事,呵呵。在用的時(shí)候,偶們?cè)谳敵龅男侣剺?biāo)題后面這樣寫就可以了:
echo "<td align='center'>".$echopage."</td>";
放在后面是因?yàn)?$echopage. 里面包含了選擇去第幾頁的程序。
偶們?cè)賮砜匆韵鲁绦颍?/p>
1 : $sql="SELECT * FROM news order by id desc LIMIT $now,$recordnum";
這里的“ order by id desc ”意為驅(qū)除的記錄是按編號(hào)由大到小的順序輸出的,換句話說就是新聞的輸出總是新發(fā)表的在前面。 “ LIMIT $now,$recordnum ”限制了新聞?shì)敵龅臄?shù)目, id 的大小在 $now,$recordnum 之間,具體 $now,$recordnum 的數(shù)值請(qǐng)看上面的分頁程序的講解(粗黑體字部分)。
2 : $res=mysql_query($sql);
這條語句意思是向服務(wù)器發(fā)送請(qǐng)求,并將返回的結(jié)果保存在 $res 中。
3 : $rows=fetch_assoc($res);
這條語句意思是將查詢結(jié)果 $res 的內(nèi)容拆到一個(gè)數(shù)組 rows 中。如果 $res 中沒有數(shù)據(jù),函數(shù)返回 false 值。 fetch_assoc( ) 函數(shù)的作用和 mysql_fetch_row() 是一樣的。
4 : while($rows)
{
echo "<tr>";
echo "<td align='left' valign='middle'><img src='../sucai/biaozhi.JPG' width='15' height='15'><a href='index.php?id=".$rows["id"]."' target=_blank><font>".$rows["title"]."[".$rows["date"]."]</font></a></td>";
echo "</tr>";
}
while($rows) 便是按 id 的由大到小的順序輸出新聞的。 $rows["title"] , $rows["author"] 就是數(shù)組形式的內(nèi)容了。
下面來談?wù)勅绾尾榭疵恳粭l新聞的內(nèi)容。
偶們來看看上面第 4 個(gè)程序中的:
<a href='index.php?id=".$rows["id"]."' target=_blank><font>".$rows["title"]."[".$rows["date"]."]</font></a>
其中的“ href='index.php?id=".$rows["id"]."' ”就是第 $rows["id"] 條新聞的具體地址了。從上面也可以看出顯示具體新聞的程序也在 index.php 中了。當(dāng)偶們點(diǎn)擊這個(gè)超級(jí)鏈接時(shí),此程序?qū)?shù)傳遞給 PHP 文件中的同名變量。需要注意的是,你只能向動(dòng)態(tài)頁面?zhèn)鬟f參數(shù),而不能傳遞給 .htm 結(jié)尾的靜態(tài)頁面。
那這里所說的參數(shù)是指什么呢?上面的“ index.php?id=".$rows["id"]." ”的“?”就是變量的開始,“ id ”則是變量名,“ ".$rows["id"]." ”就是變量的值了。如果還想向 PHP 文件傳遞更多的參數(shù),可以用“ & ”隔開。例如:
index.php?id=".$rows["id"]."& title=".$rows["title"]."
在本程序中,偶們得到的變量名為“ id ”,現(xiàn)在偶們來分析這段程序吧!
1 :首先偶們要保證這個(gè) id 在數(shù)據(jù)庫是有數(shù)據(jù)的,所以偶們用以下語句來判斷:
if(isset($_GET["id"])){ }
這里的 $_GET["id"] 就是從瀏覽器地址欄中接受數(shù)據(jù)的方式。 isset( ) 是判斷有無數(shù)據(jù)的函數(shù)。
2 :如果有數(shù)據(jù),偶們就把以下的程序?qū)懭肷厦娴摹?{ } ”中。
$sql= "select * from news where id=".$_GET["id"]."";
$res= mysql_query($sql);
$rows=fetch_assoc($res);
while($rows)
{
echo "<table width=750 cellpading=1 cellspacing=1 border=0 >";
echo "<tr>";
echo "<td colspan='3' valign='middle' align='center'><font size='+1' color=red><b>".$rows["title"]."</b></font></td>";
echo "</tr><br>";
echo "<tr>";
echo "<td width='100%' valign='middle' align='center'><font color=red size='2'>".$rows["date"]." ".$rows["department"]." ".$rows["author"]."</font></td>";
echo "<tr>";
echo "<tr>";
echo "<td colspan='3'><hr></td>";
echo "</tr>";
echo "<tr>";
echo "<td colspan='3' valign='middle'><font> ".$rows["content"]."</font></td></tr>";
echo "<tr>";
echo "</table>";
}
相信通過前面的講解,您一定可以看懂上面的程序了。
芽雨原創(chuàng)php新聞系統(tǒng)教程(第一版) 第五講:新聞程序的算法(一) --- 修改、刪
三.修改、刪除新聞
和查看新聞的程序一樣,偶們要先列出所有的新聞標(biāo)題,然后在選擇具體的新聞進(jìn)行修改、刪除操作。
在這里列出新聞標(biāo)題時(shí),比 index.php 的程序多了一條語句,那就是輸出:
<a href='editnews.php?id=".$rows["id"]."' target=_self> 修改 </a>
通過點(diǎn)擊這個(gè)超級(jí)鏈接,偶們進(jìn)入具體的修改、刪除新聞的程序。
具體的程序如下:
if(@$_GET["id"])
{
$id = $_GET["id"];
$sql="SELECT * FROM news WHERE id=$id";
$res = mysql_query($sql);
$row=fetch_assoc($res);
$edit = "<form method=post action=takeedit.php>";
$edit .= "<table width=800 cellpadding=0 cellspacing=0 border=1>";
$edit .= "<tr& gt;<td width=150><font> 第 $id 條新聞 </font></td>& lt;td><font> 標(biāo)題 : <input type=text name=title value=".$row["title"]." size=80></font></td></tr>";
$edit .= "<tr><td valign=top width=150 border=0><font> 作者 <input type=text name=author value=".$row["author"]."><br> 日期 :<br>".$row["date"]."</font></td><td><font size=-2><textarea cols=90 rows=10 name=content >".$row["content"]."</textarea></font></td></tr></table>";
$edit .= "<input type=hidden name=id value=$id>";
$edit .= "<input type=submit name=edit value= 修改 >";
$edit .= "<input type=submit name=delete value= 刪除 >";
$edit .= "</form>";
echo $edit;
}
上面“ if(@$_GET["id"]) ”中的“ @ ”意思是說禁止函數(shù)返回出錯(cuò)提示。這樣當(dāng)程序出現(xiàn)異常時(shí),不至于讓普通用戶看見那莫名其妙的出錯(cuò)信息。
值得一說的是,偶們把可以修改的內(nèi)容放在屬性 value 中,既“ value=".$row["title"]." ”等。
在 <form> 標(biāo)簽中把 action 屬性設(shè)為“ action=takeedit.php ”,當(dāng)偶們提交表單后,由 takeedit.php 對(duì)數(shù)據(jù)庫進(jìn)行操作。
這其中的語句都是偶們?cè)谇懊嫣岬降?,偶就不信你看不懂?。。〕绦蛉缦拢?/p>
if(@$_POST["edit"])
{
$author = $_POST["author"];
$title = $_POST["title"];
$content = $_POST["content"];
$source =$_POST["source "];
$date = date("y-m-d H:i");
mysql_query("UPDATE news SET author='$author',title='$title',content='$content', source =' source',date='$date' WHERE id=$id");
}
if(@$_POST["delete"])
{
mysql_query("DELETE FROM news WHERE id=$id LIMIT 1");
}
芽雨原創(chuàng)php新聞系統(tǒng)教程(第一版) 第六講:用戶管理
在這一部分,偶們來看看如何限制管理新聞程序只讓管理員來操作。這包括讓管理員注冊(cè)(這個(gè)操作最好用 phpmyadmin 進(jìn)行,畢竟不能隨便讓人當(dāng)管理員嘛)、登陸、保存管理員的信息以便讓系統(tǒng)識(shí)別他并讓他對(duì)新聞進(jìn)行操作、注銷。
在這一講中偶用給程序做注解來介紹相關(guān)的知識(shí)。
下面請(qǐng)看注冊(cè)的程序 :
這個(gè)程序分為兩部分,前面是 MYSQL 部分,后面的是 HTML 部分(提交表單)。兩部分連接起來的方式是在提交表單是在 <input> 標(biāo)簽設(shè)置 action="register.php" 。把 MYSQL 放在前面是為了避免有的 PHP 函數(shù)不允許前面有 HTML 輸出的緣故。
<?
if(@$_POST["submit"])
{
if (empty ($name) || empty ($password)|| empty ($repassword))
//(empty () 函數(shù)是用來判斷里面的字符是否為空的。
{
echo " 填寫有錯(cuò)誤,請(qǐng) <a href='register.php'> 重新填寫 </a>";
}
if($password!=$repassword)
{
echo " 兩次密碼輸入不同,請(qǐng) <a href='register.php'> 重新填寫 </a>";
}
// 經(jīng)上面的判斷就可以去數(shù)據(jù)庫進(jìn)行操作了,這樣做的目的是為了減輕服務(wù)器的負(fù)擔(dān)。
$link=mysql_connect("localhost","root","");
mysql_select_db("yayu",$link);
$sql="SELECT id FROM users WHERE name='$name'";
$result=mysql_fetch_row(mysql_query($sql));
// mysql_fetch_row() 函數(shù)把得到的所有數(shù)據(jù)存到一個(gè)數(shù)組中去,這個(gè)數(shù)組是以數(shù)字為
// 引的。在這里,當(dāng)返回有數(shù)據(jù)時(shí), $result 相當(dāng)于邏輯量 1 了。
// 檢測(cè)用戶提交的用戶名是否被注冊(cè)
if($result)
{
echo " 已經(jīng)有相同的用戶名存在,請(qǐng) <a href='register.php'> 重新填寫 </a>";
}else{
// 如果一切正常,將數(shù)據(jù)加到數(shù)據(jù)庫中
$sql="insert into users(name,password) values('$name','$password')";
// 檢測(cè)用戶注冊(cè)是否成功
if(mysql_query($sql,$link))
{
echo " 注冊(cè)成功,請(qǐng)立即 <a href='admin.php'> 登陸 </a>";
}
else
{
echo " 注冊(cè)失敗,請(qǐng) <a href='register.php'> 重試 </a>";
}
}
}else{
?>
<center>
<h2 align="center"> 注冊(cè) </h2>
<form action="register.php" method="OST">// 值傳遞的方式為 POST
<p> 代號(hào) :
<input name="name" type="text" value="" size="15">
<br>
<br>
密碼 :
<input type="password" name="password" size="15" maxlength="50">
</p>
<p> 重新輸入密碼:
<input type="password" name="repassword" size="15" maxlength="50">
<br>
<br>
<input type="submit" name="submit" value=" 注冊(cè) ">
<input type="reset" value=" 重寫 ">
</p></form>
</center>
</body>
</html>
<?
}
?>
再來看登陸和注銷的程序
<?
if(@$_POST["submit"])
{
if(empty ($_POST["username"]))
die (" 請(qǐng)?zhí)顚懹脩裘?");
// 這里用了 die() 函數(shù),作用是名字為空時(shí)向用戶提出提示信息。
else
$username = $_POST["username"];
// 記錄用戶名。
if(empty ($_POST["password"]))
die (" 請(qǐng)?zhí)顚懨艽a ");
else
$password = $_POST["password"];
$link=mysql_connect("localhost","root","");
$selectdb = mysql_select_db("yayu",$link);
$sql="select id,password,name from users where name='$username'";
$result=mysql_query($sql)or die (mysql_error ());
while($pa = mysql_fetch_assoc($result))
{ // mysql_fetch_assoc() 函數(shù)是把返回的數(shù)據(jù)以數(shù)組的方式保存,數(shù)組的下標(biāo)與字段名 // 相對(duì)應(yīng)
$pwd = $pa[password];
$userid = $pa[id];
// 檢測(cè)用戶名是否正確
if(!$result)
{
echo " 錯(cuò)誤的用戶名 ";
echo "<br><a href='login1.php'> 重新登陸 </a>";
mysql_close($link);
exit;
}
// 檢測(cè)密碼是否正確
if($pwd != $password )
{
echo " 親愛的 ".$username."<br>";
echo " 您輸入了錯(cuò)誤的密碼 ";
echo "<br> 請(qǐng)您 <a href='admin.php'> 重新登陸 </a>";
mysql_close($link);
exit;
}
// 如果一切正常,則設(shè)置 Cookie
setcookie("username",$_POST["username"]);
header("Location:admin.php");
}
if(@$_GET["action"]=="logout")
{
setcookie("username","");
header("Location:index.php");
}
}
?>
在上面的程序中,有一個(gè)很重要的東西,那就是 Cookie 。
Cookie 是 Web 服務(wù)器存儲(chǔ)在客戶端的小型數(shù)據(jù)包,當(dāng)用戶再次連接放置 Cookie 的 Web 服務(wù)器時(shí), Web 服務(wù)器可以再次讀出它防止在 Cookie 的數(shù)據(jù),再通過 Cookie ,服務(wù)器可以將特定的信息放在訪問者的機(jī)器上。
偶們從程序中可以看見一個(gè) Cookie 函數(shù) setcookie() ,它用來存儲(chǔ)用戶的名字,語法為: setcookie(" 自定義的用戶名 "," 用戶的名字 ");
在偶寫的程序中“自定義的用戶名”用的是“ username ”,當(dāng)“用戶的名字”為空時(shí),
就相當(dāng)于注銷了。
當(dāng)偶們的一些客戶端操作需要管理員執(zhí)行時(shí),偶們就要用到 Cookie 了。偶們使用 if(@$_COOKIE["username"]) (這個(gè)得到數(shù)據(jù)的方式是不是和 POST 的很像呀)
來做判斷。如果 username 有值,那它就做為邏輯量中的 1 了。
到此,相信大家對(duì)“如何理解簡(jiǎn)單的php新聞發(fā)布系統(tǒng)”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。