2021年12月30日 星期四
(Xampp) 預安裝後的安全設定
(Xampp) XAMPP下重置mysql密碼
2021年12月29日 星期三
(CSS) DIV 三欄式網頁排版設計
CSS DIV 三欄式網頁排版設計
以下範例語法將告訴您如何設計出這樣的網頁版型。
HTML 語法架構
<div id="header">header</div>
<div id="sidebar_left">sidebar_left</div>
<div id="sidebar_right">sidebar_right</div>
<div id="content">content</div>
<div id="footer">footer</div>
</div>
CSS 語法
#sitebody{
width:600px;
margin:0 auto;
font-size:13px;
}
#header{
background-color:#FFD4D4;
height:80px;
text-align:center;
line-height:80px;
}
#sidebar_left{
background-color:#FFECC9;
width:120px;
height:400px;
text-align:center;
line-height:400px;
float:left;
}
#sidebar_right{
background-color:#FFECC9;
width:120px;
height:400px;
text-align:center;
line-height:400px;
float:right;
}
#content{
margin-left:120px;
margin-right:120px;
height:400px;
background-color:#F2FFF2;
text-align:center;
line-height:400px;
}
#footer{
clear:both;
background-color:#FFD4D4;
height:80px;
text-align:center;
line-height:80px;
}
</style>
- float - DIV 區塊浮動
- width - DIV 寬度
- height - DIV 高度
- margin - DIV 區塊的外距
- font-size - 文字大小
- background-color - 背景顏色
- text-align - 文字對齊
- line-height - 文字行高
- clear - 清除浮動
只要開一個空白的文件檔,將 CSS 語法貼進去,然後接著貼上 HTML 語法架構內的內容,順序是先 CSS 然後再 HTML,接存成 test.html 的檔案,用瀏覽器開起來就可以看到本文一開始的那個三欄式網頁範例示意圖,原則上 Chrome、FireFox、IE、Safari、Opera 等主流的瀏覽器都可以順利顯示。這只是透過 CSS DIV 設計出三欄式網頁的一種方法,網頁設計師當然有自己的一套設計方式,但大原則通常都是使用類似的手法,DIV 區塊的配置、DIV 寬度、margin、float、background ... 等,只要掌握這些基本的 CSS 概念,就可以靈活運用的設計出各種三欄式網頁。最後,想知道如何設計出單欄式網頁或兩欄式網頁嗎?還有兩篇詳細的介紹,可以比較與三欄式設計有什麼差異。
2021年12月27日 星期一
(RH9) SSL憑證載卸的相關指引
(YouTube)【2022】實測可用,下載 YouTube 影片的 6 個工具網站
(Chrome) 校時
代碼: |
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config] "AnnounceFlags"=dword:00000005 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters] "NtpServer"="tock.stdtime.gov.tw,0x1" "Type"="NTP" [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient] "Enabled"=dword:00000001 "SpecialPollInterval"=dword:00000e10 |
_"NtpServer" 是設定要向哪一台主機對時,下面是中華電信研究所之時間與頻率國家標準實驗室,提供的數台 NTP Server的主機:
tick.stdtime.gov.tw
tock.stdtime.gov.tw
watch.stdtime.gov.tw
_"SpecialPollInterval" 指的是隔多久對時一下,單位是秒,但是要用十六進制的表示法,預設是一個星期(00093a80) 對一次,前面的設定中是一個小時對一次(00000e10)。
因為 Windows 預設是要求在時間誤差在正(負) 54000 秒,也就是 15 小時之內,才可以進行對時,超過這個時間,就會出現錯誤訊息而無法對時。所以如果電腦時鐘真的慢得離譜,就在底下這行的下面:
"AnnounceFlags"=dword:00000005
再加入兩行:
代碼: |
"MaxNegPhaseCorrection"=dword:ffffffff "MaxPosPhaseCorrection"=dword:ffffffff |
這兩行是將誤差值設到最大,也就不無論如何都要進行對時。
2) 如果 aaa.reg 方式寫入註測表方式發生錯誤. 那就只好執行 regedit. 首動方式來修改註冊表了...
=====================
接著,
要讓設定可以馬上生效,就執行底下的指令:
net stop w32time && net start w32time
w32tm /resync /rediscover
第一行: 讓 w32time 這個服務重新啟動,以讀取我們匯入的設定。
第二行: 則是進行對時
2021年12月26日 星期日
(RH9) 決定取消網站的 SSL
2021年12月25日 星期六
(RH9) 可惡的 FreeSSL !!
(RH9) 新加了域名 [ www.dyhms.no-ip.org ]
2021年12月22日 星期三
(PHP 與 MySQL 的互動) 2_新增資料
新增資料 (文末有完整版程式碼)
add.php:
insert into users(username) values("apple")
這就是一個 SQL query- 要放入的 values 會是一個字串,所以要用單引號或是雙引號包起來
<?php require_once('conn.php'); $result = $conn->query('insert into users(username) values("apple")'); if (!$result) { die($conn->error); } print_r($result); ?>
print_r($result);
的 output 會是 1,
1 就代表 true (有成功)的意思
會發現,當我在 add.php 的頁面第二次重新整理後,回到 phpMyAdmin 看,就會出現第二個 apple
優化上方的程式碼
add.php:
- 把要放入的 values 用變數
$username
取代
在 debug 時,可以先把 $sql
印出來,看是不是正確的 SQL query
把 SQL query 獨立出來變成一個變數 $sql
,這樣程式碼的可讀性比較高。在 debug 時,也可以先把 $sql
印出來 echo $sql;
,看是不是正確的 SQL query
debug 完之後,記得要把 echo $sql;
拿掉
用 sprintf()
函式來寫 SQL query,提高程式碼可讀性
在 PHP 有一個叫做 sprintf()
的函式,建議是把 SQL query 用 sprintf()
來寫,讓整個 SQL query 字串更好寫也更好看懂:
- 第一個參數是字串,把「動態要塞值進去的地方」變成
%d
和"%s"
,類似於 placeholder 的感覺%d
代表:我要放入的是一個 number (這裡的 d 是 decimal 十進位的意思)"%s"
代表:我要放入的是一個 string
- 從第二個參數開始依序放「我要塞進去的值」
會按照順序,把 15
帶到 %d
的位置,把 $username
帶到 "%s"
的位置
<?php require_once('conn.php'); $username = 'apple'; $sql = sprintf( 'insert into users(id, username) values(%d, "%s")', 15, $username ); echo $sql; exit(); $result = $conn->query($sql); if (!$result) { die($conn->error); } print_r($result); ?>
組出來的 SQL query 會長這樣:
動態新增 username 到資料庫的表單
index.php:
<?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>'; } ?> <h2>新增 user</h2> <form method="POST" action="add.php"> username: <input name="username"> <input type="submit"> </form>
加上「自動跳轉的 response Header」
header('Location: index.php');
意思就是:我要回傳一個 response Header 叫做 Location: index.php
。瀏覽器接收到這個 response Header 後,就知道我的目的是要跳轉到 index.php,因此就會自動幫我跳轉回到 index.php 這個檔案去 (因為跳轉的太快了,甚至不會看到中間的 add.php 的畫面,就直接跳轉到 index.php 去了)
add.php:
<?php require_once('conn.php'); if (empty($_POST['username'])) { die('請輸入 username'); } $username = $_POST['username']; $sql = sprintf( 'insert into users(username) values("%s")', $username ); echo 'sql: ' . $sql. '<br>'; $result = $conn->query($sql); if (!$result) { die($conn->error); } // 如果有新增成功 echo '新增成功!'; header('Location: index.php'); ?>
錯誤處理
上面 add.php 的程式碼,做錯誤處理的地方有兩個:
- 檢查
$_POST['username']
是否為空值 - 檢查 SQL query 是否有執行成功,也就是
$conn->query($sql);
這段
如果 SQL query 沒有執行成功,也就是 $result
是 false,那就會執行 die($conn->error);
現在,我把 username 欄位設為 unique (代表:不能有重複的 username)
然後我到 index.php 輸入一個重複的 username 叫做 aaa,按下 submit 後就會出現一行錯誤訊息「Duplicate entry 'aaa' for key 'username'」,就是因為在執行到 $conn->query($sql);
時發生錯誤($result
會是 false),因此這行錯誤訊息就是從 die($conn->error);
這行印出來的
排序「資料庫的讀取結果」
「資料庫的讀取結果」的排序不一定會按照 id 順序,如果想要按照 id 排序的話,就在 index.php 的 SQL query 加上 order by id asc
或是 order by id desc
asc
是「由小到大」排列
ascending 就是 increasing 的意思
<?php require_once('conn.php'); $result = $conn->query('select * from users order by id asc;'); if (!$result) { die($conn->error); } while ($row = $result->fetch_assoc()) { echo 'id: '. $row['id'] . '<br>'; echo 'username: ' . $row['username'] . '<br>'; } ?> <h2>新增 user</h2> <form method="POST" action="add.php"> username: <input name="username"> <input type="submit"> </form>
desc
是「由大到小」排列
descending 就是下降的意思
<?php require_once('conn.php'); $result = $conn->query('select * from users order by id desc;'); if (!$result) { die($conn->error); } while ($row = $result->fetch_assoc()) { echo 'id: '. $row['id'] . '<br>'; echo 'username: ' . $row['username'] . '<br>'; } ?> <h2>新增 user</h2> <form method="POST" action="add.php"> username: <input name="username"> <input type="submit"> </form>
新增資料的程式碼,完整版如下:
conn.php:
<?php $server_name = 'localhost'; $username = 'saffran'; $password = 'rox'; $db_name = 'saffran_db'; $conn = new mysqli($server_name, $username, $password, $db_name); if ($conn->connect_error) { die('資料庫連線錯誤:' . $conn->connect_error); } $conn->query('SET NAMES UTF8'); $conn->query('SET time_zone = "+8:00"'); ?>
index.php:
<?php require_once('conn.php'); $result = $conn->query('select * from users order by id desc;'); if (!$result) { die($conn->error); } while ($row = $result->fetch_assoc()) { echo 'id: '. $row['id'] . '<br>'; echo 'username: ' . $row['username'] . '<br>'; } ?> <h2>新增 user</h2> <form method="POST" action="add.php"> username: <input name="username"> <input type="submit"> </form>
add.php:
<?php require_once('conn.php'); if (empty($_POST['username'])) { die('請輸入 username'); } $username = $_POST['username']; $sql = sprintf( 'insert into users(username) values("%s")', $username ); $result = $conn->query($sql); if (!$result) { die($conn->error); } // 如果有新增成功 header('Location: index.php'); ?>
2021年12月21日 星期二
(RH9 心得) 終結外面主機亂七八糟的拜訪 - hosts.deny
in.telnetd: ALL : Deny
ssh: 192.168.1.xx : allow
in.ftpd: 192.168.1.xx : allow
2021年12月14日 星期二
(PHP) 以程式碼 [插入資料] 卻變成亂碼
2021年12月9日 星期四
(RH9) LinuxMtrr表不正確的解決方法
這個會導致nvidia的驅動不能加速2d,解決方案一般就是重寫mtrr表。
echo "disable=2″ >| /proc/mtrr
echo "disable=1″ >| /proc/mtrr
echo "disable=3″ >| /proc/mtrr
echo "disable=4″ >| /proc/mtrr
echo "disable=0″ >| /proc/mtrr
echo "base=0×00000000 size=0×80000000 type=write-back" >| /proc/mtrr
echo "base=0×80000000 size=0×40000000 type=write-back" >| /proc/mtrr
echo "base=0xC0000000 size=0×10000000 type=write-back" >| /proc/mtrr
echo "base=0×100000000 size=0×20000000 type=write-back" >| /proc/mtrr
echo "base=0×120000000 size=0×10000000 type=write-back" >| /proc/mtrr
(Centos-7s) 更新: 網卡名稱改回 eth0 的方法
將 CentOS 7 網卡名稱修改, 用回 Eth0 的方法: 1) # vi /etc/sysconfig/grub 內容大概是這樣: GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release...
-
原本的認知: 不斷地觀察 logs. 累積地以 iptable 擋到惡意的所有拜訪. 以為這樣總有讓主機乾淨的一日...; 未料. 入侵是會減少. 但也很容易擋到不該擋的 ip..., 於是又從頭擋起... - 因緣際會下. 由於網域某使用者不斷收到垃圾信困擾. ...
-
Windows Copilot 的功能和應用範圍非常廣泛,尤其在 商務場景 中更是發揮重要作用。 它不僅能處理日常任務,如設置 勿擾模式 、 播放音樂 等,還能處理較為複雜的任務,如 整理文本內容、提供閱讀心得 等。無論是 專注工作、休閒娛樂 ,還是專業 文案支持 ,...