2021年11月30日 星期二

(PHP 與 MySQL 的互動) 1_在 PHP 裡面 select MySQL 的資料

(源自: Saffran's blog )

後端最基本的這四個功能,就是 CRUD
Create 新增
Read 讀取
Update 編輯
Delete 刪除

讀取資料(PHP 與 MySQL 的互動)

在 PHP 裡面 select MySQL 的資料

從資料庫取得現在的時間

透過 PHP 從 MySQL 資料庫拿資料的步驟如下:

  1. 先下 query()
    $conn->query('select now();'); 就是在「向資料庫拿資料」
  2. 檢查 $result 是否有拿到結果
    如果沒有拿到任何結果($result 是空的)就代表 query() 發生錯誤。這時,就把錯誤印出來,程式碼不再繼續往下執行
  3. 如果 $result 有拿到結果,就用 $row = $result->fetch_assoc();
    fetch_assoc() 是在把相對應的結果取出來放到 $row 裡面。$row 就是 MySQL query 之後的結果,會根據我 select 的東西給我一個 array,陣列的 key 就是「我 select 的東西 now()」,value 就是「now() 所對應到的值」

now() 是 MySQL 提供的一個 function,可以取得現在的時間

data.php:

<?php    require_once('conn.php');    $result = $conn->query('select now() as n;');    if (!$result) {      die($conn->error);    }      $row = $result->fetch_assoc();    print_r($row);    echo '<br> now: ' . $row['n'];  ?>  

output:

取得 table 的第一筆資料

現在,在 MySQL 資料庫裡有這三筆資料:

<?php    require_once('conn.php');    $result = $conn->query('select * from users;');    if (!$result) {      die($conn->error);    }      $row = $result->fetch_assoc();    print_r($row);  ?>  

output:
可以看到,每執行一次 $row = $result->fetch_assoc(); 只會印出一筆資料而已

因此,如果想要取得每一筆資料,就需要跑 while 迴圈

while 迴圈取得 table 中的每一筆資料

在跑每圈 while 迴圈時,實際上是分成兩個步驟

  1. 步驟一:每圈都會先執行一次 $result->fetch_assoc(),並把結果放到 $row
  2. 步驟二:while 實際上會判斷的是 $row,判斷 $row 是否為空(當資料都拿完後,$row 就會是空的),$row 是空的就是 false
<?php    require_once('conn.php');    $result = $conn->query('select * from users;');    if (!$result) {      die($conn->error);    }      while ($row = $result->fetch_assoc()) {      print_r($row);    }  ?>  

output:
可以看到,這樣就可以拿到 table 中的每一筆資料了

把資料用自訂的樣子顯示出來:

<?php    require_once('conn.php');    $result = $conn->query('select * from users;');    if (!$result) {      die($conn->error);    }      while ($row = $result->fetch_assoc()) {      echo 'id: '. $row['id'] . '<br>';      echo 'username: ' . $row['username'] . '<br>';    }  ?>  

output:

2021年11月23日 星期二

(學習蒐文) php怎麼在指定位置輸出

Q:  php怎麼在指定位置輸出
比如說在網頁中坐標為(100,100)的地方輸出hello world!
 
A: 這其實是css幹的事
<?php
echo '<div style="position:absolute;top:100px;left:100px">Hello World!</div>';
?>

(LifeType) 網站全域參數設定參考

模版管理:
預設版面將使用[Standard]標準模板樣式,您可以先自行下載您喜歡的外觀樣式模板並做變更。未來架設各科目的網誌時,會將已經下載的最新模版增加進去,避免造成各位維護網誌或新增時的困擾。建議選擇與您的網誌搭配的版本模板樣式,目前使用的 LiftType 版本為 1.2.4_r5688。模板下載網址為: LifeType
中文網站(http://wiki.lifetype.org.tw)或英文網站(http://www.lifetype.org)。
 
全域設定:
(1) 一般設定:
    .show_posts_max 在首頁顯示文章數的預設值:建議改為 10。
    .recent_posts_max 在首頁「近期文章」列表中顯示文章數的預設值:建議改為 5。
    .minimum_password_length 密碼最短需要多少字元:建議改為 8(增加密碼猜測的難度)。
(2) 彙整頁面設定:
    .summary_disable_registration 是否關閉使用者註冊新網誌的功能。
    .forbidden_usernames 列出所有不允許註冊的使用者名稱。
    .force_one_blog_per_email_account 一個電子郵件是否只能註冊一個網誌。
(3) 模版設定: 預設值。
(4) 網址設定: 預設值。
(5) 電子郵件設定
    .check_email_address_validity 在使用者註冊申請新的網誌站台時,是否要認證他所填寫的電子郵件
信箱是否正確: 建議選擇[是]。
    .email_service_enabled 使用或停用用來寄送通知信函的電子郵件服務: 預設值
    .post_notification_source_address 系統通知信函的寄件人電子郵件信箱: 請輸入管理員自己的電子郵件。
    .email_service_type 用來寄送電子郵件的方式,請在各種方法選擇其中之一。
    .smtp_host 如果您選用 SMTP 寄送電子郵件,請輸入您要用來發送郵件的主機: 請輸入 mail.lksh.tpc.edu.tw。
    .smtp_port 前項設定的 SMTP 主機連接埠(port): 請用預設 Port 25
    .smtp_use_authentication SMTP 主機是否需要授權認證。如果需要的話,請繼續填寫下面兩項設定: 請選[是]。
    .smtp_username 如果 SMTP 主機需要授權認證,請填寫使用者帳號: 輸入郵件帳號。
    .smtp_password 如果 SMTP 主機需要授權認證,請填寫使用者密碼: 請輸入郵件密碼。
(6) 上傳設定
    .uploads_enabled 啟用或停用上傳檔案功能。這個功能會影響到使用者能否上傳新的模版安裝包,以及在模版中添加新的檔案: 請選擇[是],避免影響您任何上傳的功能。
    .maximum_file_upload_size 使用者上傳檔案大小的上限: 預設為 2MB,請依需求調整上限。
(7) 工具設定
    .unzip_use_native_version 使用 PHP 內建的版本來解壓縮 .zip 的檔案: 建議改為[是],可以避免上傳模板等壓縮檔案的解壓縮問題。
(8) 網路服務介面設定: 預設值。
(9) 系統安全設定: 預設值。
(10) 貝氏過濾設定: 預設值。
(11) 檔案中心設定: 建議採用預設值。
(12) 搜尋設定: : 預設值。
 
外掛程式: 到 LifeType 中文網站(http://wiki.lifetype.org.tw)或英文網站(http://www.lifetype.org)下載 lifetype- plugins。建議選擇與您的網誌版本搭配的外掛程式,目前使用的 LiftType 版本為 1.2.4_r5688。
(1) 外掛中心
(2) 外掛程式設定
 
 
其他設定:
(1) 清理垃圾: 可以清除網誌上被使用者標示為刪除的文章、被使用者標示為垃圾的迴響、被管理員標示為(已刪除)
的使用者、被管理員標示為(已刪除)的網誌、暫存目錄中所有網誌的網頁快取與資料快取。
(2) 版本: 註明您目前使用的 LiftType 版本。
 
 
個人網誌設定: 針對個人網誌進行專屬的個人化設定,預設值將比照[全域設定]的設定值。
1. 基本設定:
(1) 網誌設定:
.網誌分類: 替網誌指定一個全域網誌分類。
.首頁文章數目: 預設與[全域設定]相同。
.近期文章數目: 預設與[全域設定]相同。
.模版: 請選擇您的網誌站台所要使用的外觀樣式模版。
.在日曆顯示未來文章: 如果設定為「是」,那麼發表日期設定在未來的文章將會出現在日曆上。
.每一週的開始: 在首頁月曆中的顯示方式請改為「星期日」。
.預設發送通知: 請勾選「如果有人對本文發表迴響,便向我發送電子郵件通知」。
.迴響留言排序方式: 建議設定成「新的在前」,留言從新到舊排序出現。
(2) 使用者設定: 設定網誌管理者的個人化資訊(含個人圖像上傳、自我介紹、密碼變更)
(3) 統計資料: 引用網址及點擊率的統計資料。
2. 管理網誌使用者: 設定共同管理個人網誌的使用者(該使用者必須已經建立於[全部站台管控]中)。
(1) 新增網誌使用者
(2) 網誌使用者列表
3. 管理網誌模版: 新增個人專屬的個人化模板,不能與已建立在 [全部站台管控]的模版相同。
(1) 新增網誌模版
(2) 網誌模版列表

2021年11月22日 星期一

(DW) 擋軟體主動外連

/sbin/iptables -t nat -A PREROUTING -i $INIF -d 203.69.81.49 -j DROP  #抗 DreamWeaver
/sbin/iptables -t nat -A PREROUTING -i $INIF -d 203.69.81.57 -j DROP  #抗 DreamWeaver
=> 開啟 DW軟體的速度會比較快些 ( 影響後果未知. 觀察&體驗中.. )
 

2021年11月21日 星期日

(學習蒐文) PHP/HTML混寫的四種方式

1、單/雙引號包圍法
這是最初級的方法了,用法就像下面這樣

代碼:
<?php
echo '
<!DOCTYPE html>
<html>
<head>
<title> </title>
</head>
<body>
<span>測試頁面</span>
</body>
</html>
';
?>

這樣是最簡單的一種方法了,直接用單引號包裝上就行了

至於雙引號和單引號的區別,就在於前者解析引號內的變數,而後者不解析引號內的變數,參看下面的例子

代碼:
<?php
$Content='Hello!';
echo "$Content";
echo '<br>';
echo '$Content';
?>


輸出
代碼:
1 Hello!
2 $Content

由此可見,用雙引號包圍的字串中的變數名自動解析為了變數值,而用單引號包圍則依然顯示變數名

這樣書寫的缺點有兩點
1、如果輸出內容中包含單/雙引號將極難處理,因為PHP無法判斷這個引號是屬於程式的還是輸出內容的,所以會報錯
2、這樣書寫一些現代文字編輯器(如SublimeText)將無法對引號包圍的輸出的內容進行語法著色,如果出現一些格式問題將極難發現。圖中為SublimeText3的一張截圖,上面的是正常的著色,下面則是用引號包圍的著色

2、使用HEREDOC/NOWDOC
HEREDOC和NOWDOC是PHP5.3開始支援的一種新特性,它允許在程式中使用一種自定義的標誌符來包圍文字,而HEREDOC和NOWDOC的關係就類似於雙引號包圍和單引號包圍一樣,前者解析區塊內的變數,而後者不解析區塊內的變數
下面介紹HEREDOC和NOWDOC的用法

代碼:
<?php
$Content='Hello!';
//下面寫出了一個HEREDOC,其中標識LABEL可以自定義為任何字串,但要保證�}頭的標識和結尾的標識一樣
echo <<<LABEL
$Content
LABEL;
//結尾的方法:另起一行,打上LABEL。注意結尾的標識前面和後面不要插入任何字元,空格�]不行
echo '<br>';//為了演示方便換行
//NOWDOC和HEREDOC的書寫方式差別在於NOWDOC的識別符號需要用單引號�]圍
echo <<<'LABEL'
$Content
LABEL;
//其他無異
?>

也可以參考PHP.net上的關於這兩個的wiki:https://wiki.php.net/rfc/heredoc-with-double-quotes

用HEREDOC/NOWDOC書寫極好的解決了包圍引號的問題,但依然沒有解決語法著色失效的問題

3、HTML中嵌入PHP程式塊(推薦)
這是一種非常合適的辦法,並且這種方法廣泛用在了諸如WordPress模板等場合中。書寫起來也較為方便,直接在需要輸出的地方寫上相關的程式碼就行了,就像下面這樣

代碼:
<?php
//首先在這裡寫好相關的呼叫�{式碼
function OutputTitle(){
echo 'TestPage';
}
function OutputContent(){
echo 'Hello!';
}
//然後再下面呼叫相關函式就可以了
?>
<!DOCTYPE html>
<html>
<head>
<title><?php OutputTitle(); ?></title>
</head>
<body>
<span><?php OutputContent(); ?></span>
</body>
</html>

我認為這種方法是在這三種方法中最好的,但是這樣做的缺點是如果這樣的程式碼塊一多了就會嚴重影響程式閱讀。

4、使用前端模板引擎
由於前端的重要性在整個Web開發中日益上升,現在前/後端工程師逐漸在分離成兩個職業,所以說為了確保前/後端工程師能夠相互配合,使前端開發和後端開發出來的東西對接更完美,逐漸催生出了一系列前端模板引擎,比如Smarty。使用Smarty書寫的實現程式碼可讀性非常的高,這使前/後端的分離也更加的高效和便捷。有興趣的同學可以去搜尋瞭解

(學習蒐文) 將PHP程式與HTML分開編寫!!

透過下面寫法可以直接用將PHP程式與HTML分開編寫!!


閱覽選擇後的資料內容
<?php
// 連結資料庫
include("adodb/adodb.inc.php");
$dbhost = "localhost"; //資料庫網址或IP
$dbusername = "root"; //資料庫帳號
$dbuserpassword = "test"; //資料庫密碼
$default_dbname = "board";//資料庫名稱
$conn = &ADONewConnection("mysql");
$link = $conn -> Connect($dbhost,$dbusername,$dbuserpassword,$default_dbname);

$sql = "select * from board";
$rs = $conn -> Execute($sql); //取出資料
while(!$rs->EOF){
  $tpl -> assign (number, $rs -> fields['MID']);//序號
  $tpl -> parse (FPING, ".fping");//動態資料送入
  $rs -> MoveNext();
}
// 將資料全部送到樣本上
$tpl -> assign (link_url, $down_page_url);//超連結
$tpl -> parse (MAIN, "main");
$tpl -> FastPrint();
?>
 

2021年11月11日 星期四

(Firefox) 查看暫存檔內容

當我們使用網路瀏覽器上網時,一般都會先將瀏覽網頁時下載回來的網頁檔、圖檔、音樂檔…等等各類資源都先暫存一份在我們自己的電腦中,方便下次再開啟該頁面時可以直接取用已下載的檔案來顯示網頁內容(用來加快瀏覽速度)。如果你哪天剛好想看看之前曾經瀏覽過的網頁中的某些圖檔或已下載的Flash元件..等東西,會試試看從網頁檔暫存資料夾中去挖挖看。( 即 cache)
 
如果你是Firefox瀏覽器的使用者,可以直接在網址列輸入「about:cache」再按下「Enter」即可瀏覽目前暫存資料夾中的檔案。( 不過在「about:cache」頁面中的檢視方式相當的不方便,如果你常常有這方面的需求,可以另外安裝 CacheViewer擴充套件,用更直覺、更方便的方式來瀏覽暫存資料夾中的檔案。)
 

(Centos-7s) 更新: 網卡名稱改回 eth0 的方法

將 CentOS 7 網卡名稱修改, 用回 Eth0 的方法:   1) # vi /etc/sysconfig/grub 內容大概是這樣:   GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release...