"編輯培力/MySQL、PHP、javescipt" 修訂間的差異

出自 全民科學平台
前往: 導覽搜尋
(MySQL)
(PHP 與 javascript 語法比較)
 
(未顯示同一使用者於中間所作的 8 次修訂)
行 4: 行 4:
 
:javescipt 客戶端語言,作用在瀏覽器上,可以快速便捷地與使用者互動
 
:javescipt 客戶端語言,作用在瀏覽器上,可以快速便捷地與使用者互動
 
==MySQL==
 
==MySQL==
===登入===
+
===一、登入===
 
http://science4everyone.net/adminer-4.7.5-mysql.php
 
http://science4everyone.net/adminer-4.7.5-mysql.php
 
#伺服器:<!--db01.coowo.com:3355-->
 
#伺服器:<!--db01.coowo.com:3355-->
行 10: 行 10:
 
#密碼:<!--aide@4#-->
 
#密碼:<!--aide@4#-->
 
#資料庫(可省略):<!--assistant-->
 
#資料庫(可省略):<!--assistant-->
 +
===二、登入後介面(標準介面)===
 +
====(一)左側選單====
 +
#語言:
 +
#版本
 +
#四指令
 +
#目前資料庫的諸資料表
 +
#*瀏覽各筆
 +
#*看資料表結構
 +
====(二)右側主要工作區====
 +
#登出
 +
#四層路徑「系統/伺服器/資料庫/資料表」
 +
#現有層級提示
 +
#可用工作選單
 +
#☆互動工作區
 +
====(三)示範資料表====
 +
#web
 +
#webMail
 +
#×××note
 +
====(四)建立自己的資料表====
 +
#create table 表格名 like 既有表格名:使用既有表格的格式創建新表
 +
#*建好後觀察
 +
#*觀察完刪掉
 +
#「到 assistant 資料庫/建立資料表」,到指定資料庫有兩種方法。
 +
===三、SQL概說===
 +
#SQL:Structured Query Language。SQL網路資料庫在 MySQL、MSSQL、DB2 語法相同。
 +
#NoSQL 網路資料庫,還沒有標準。要資料量極大才算得到,在全民科學平台上還用不到。
 +
#網路資料庫在雲端上,可以多人共編而不會亂掉。
 +
#資料庫系統(如MySQL、MSSQL),包含數個資料庫。
 +
#一個資料庫包含數個資料表(table)。實體上,一個資料庫是一個目錄(資料夾),一張資料表是一個檔案。
 +
#每張資料表由「欄」(column)及「筆」(row,record,tuple)構成。
 +
#每一筆資料的每欄,都放入「值」(value)。
 +
#資料表中用來辨識筆的欄位叫「鍵」(key,primary key),鍵值也可以由許多欄組合而成,每一筆的鍵值必須「唯一」,如姓名不是好的鍵值,身份證字號是好的鍵值。
 +
 +
===四、基本SQL命令===
 +
小括號( )是指令的一部分;中括號[ ]代表可選用的選項,指令中不一定要下這些指示。
 +
<ol>
 +
<li>show databases;:秀出現有的資料庫。</li>
 +
<li>create database 資料庫名;:建資料庫。</li>
 +
<li>use 資料庫名;:取用資料庫</li>
 +
<li>show tables;:秀出現用資料庫有那些資料表。</li>
 +
<li>create table 表格名 (欄名 資料型別(欄寬) 預設值,name char(10),);:建資料表。</li>
 +
<li>create table 表格名 like 既有表格名:使用既有表格的格式創建新表<br>接著可用「insert 新表 select * from 舊表;」複製資料。</li>
 +
<li>create table 表格名 as select col1,col2… from 既有表格名 definition only:使用既有表格部分欄位創建新表。如果省略 definition only ,則結構和資料都一起複製到新表。新表沿用預設的 Engine、語系編碼,而不是舊表的。</li>
 +
<li>describe 表格名;:秀表格結構。</li>
 +
<li>insert into 表格名 values ('值1','值2',…);:循欄序加一筆資料。</li>
 +
<li>insert into 表格名 values ('值1','值2',…),('值1','值2',…),('值1','值2',…)…;:循欄序加很多筆資料。</li>
 +
<li>insert into 表格名 (欄名1,欄名2,…) values ('值1','值2',…);:只對指定數欄填值,加一筆資料。</li>
 +
<li>insert into 表格名 (欄名1,欄名2,…) select (欄名a,欄名b,…) from…;:批次插入表格內容,select子句中可以含有WHERE、GROUP BY、HAVING、表格連接及別名等等。</li>
 +
<li>insert into 表格名 select * from 另一表格;:表格結構相同,直接照抄內容。</li>
 +
<li>insert into 表格名 set 欄名1='值1',欄名2='值2',…;:只對指定數欄填值,加一筆資料。</li>
 +
<li>REPLACE 的用法與 INSERT INTO 非常接近,不同的地方是:<br>在 INSERT INTO 中如果你插入的欄位有唯一性質的索引,例如:PRIMARY KEY, AUTO_INCREMENT, UNIQUE,如果插入資料時真的發生唯一性質的欄位資料重複,那麼這個 INSERT INTO 命令會被忽略而不執行,但是在 REPLACE 中的新資料卻會把重複資料中的舊資料蓋掉。因此 REPLACE 比 INSERT INTO 更具強制性。</li>
 +
<li>在insert、update命令中,插入欄值如果是123,456等數值,不論欄位的資料型態為何,皆可不加引號而插入;但如果插入之欄值不是數值,則一定要加引號。</li>
 +
<li>select 欄名1,欄名2,… from 表格名;:找出指定欄位,全部筆數。</li>
 +
<li>select DISTINCT 欄名1,欄名2,… from 表格名;:找出指定欄位,全部筆數,但所有欄值都相等的諸筆合併為一筆。DISTINCT翻譯為「不同」。</li>
 +
<li>select * from 表格名;:找出全部欄位,全部筆數。</li>
 +
<li>select * from 表格名 where 條件(如name='丁志仁');:找出全部欄位,合條件的筆數。</li>
 +
<li>update 表格名 set 欄名=欄值,欄名=欄值… [where 條件][limit 範圍];:將合條件合範圍的所有筆數,指定欄都換成指定欄值,欄值可以為公式。
 +
<br>如:「update 表格名 set 欄名=TRIM(BOTH '\r\n' FROM 欄名)」去掉頭尾的空白行。
 +
<br>「update 表格名 set 欄名=concat(字串1,char(10),char(13),字串2) where tid = xxxxx」插入換行
 +
<br>「update 表格名 set 欄名=replace(欄名,'abc','char(10)abc') where tid = xxxxx」插入換行</li>
 +
<li>insert與update之值可以是運算,該運算可包含現有欄值(以欄名表示)。</li>
 +
<li>alter table 表格名 add 欄名及欄位描述;:對表格加欄。</li>
 +
<li>alter table 表格名 modify 欄名及欄位描述;:對表格改欄之屬性、欄寬等欄位描述。</li>
 +
<li>delete from 表格名 where 條件 limit 幾筆;:刪合條件的幾筆。</li>
 +
<li>不可用delete from 表格名 where 條件 limit 自第幾筆始,以下幾筆;:因在delete指令下,limit是指幾筆,不是指範圍。</li>
 +
<li>4.0版之後開始支援刪多表,其指令類似select,只是以「delete 諸表」取代「select 諸欄」,可以使用left join、on、where組合。</li>
 +
<li>drop table [if exists] 表格名;:刪除資料表。如加「if exists」則找到則刪,避免出現錯誤訊息。</li>
 +
<li>truncate table 表格名;:清空資料表。</li>
 +
<li>drop database [if exists] 資料庫名;:刪除資料庫。</li>
 +
<li>grant all on *.* to 使用者 identified by '通行碼';:給所有權力,在所有資料庫所有表格,給某使用者以某password辨識時。</li>
 +
<li>load data local infile '路徑及檔名' into table 表格名 [fields [欄名1,欄名2…] [terminated by ','] [ENCLOSED BY '"'] [ESCAPED BY '\\']] [LINES TERMINATED BY '\r\n'];:從檔案吃資料進表格。省略欄名則循序給;省略分隔符號則以TAB分隔資料。
 +
    <ol type="i">
 +
    <li>進mysql的預設路徑在/var/lib/mysql
 +
    </li><li>use 資料庫;後預設路徑在/var/lib/mysql/資料庫。但要load data infile一定要use 資料庫。
 +
    </li><li>省不省略「local」,都可以用絕對路徑(從/寫起)、相對路徑(用.或..)、預設路徑(沒指定路徑)。
 +
    </li><li>檔名一定要外包引號。
 +
    </li><li>「fields」管欄名列、terminated by、ENCLOSED BY、ESCAPED BY,四個操作項
 +
    </li><li>省略「fields 欄名1,欄名2…」等欄名列,循序抓欄值,抓到欄位數完或數據檔中的數據抓完,一定吃。和insert不同。
 +
    </li><li>省略「terminated by ','」,用TAB(\t)分隔欄值,兩個TAB連在一起,兩個TAB之間還是要算一個空欄值。
 +
    </li><li>省略「ENCLOSED BY '"'」,數據檔中的"被當作欄值存起來。如下此令,要看檔中數據前後有無成對的"包起來,有就去掉;如果沒有或引號不是前後成對,不去引號,但認定的欄位就很長,長到把欄位分隔符號包進來,導致把好幾欄當一欄。數據也可以改用其他字符來包欄值。
 +
    </li><li>下「OPTIONALLY」,不知何意,本版本也不支援。
 +
    </li><li>省略「ESCAPED BY '\\'」,認\為特殊字元,會去反斜。可指定反斜以外的字元為跳脫字元。用「ESCAPED BY ''」時,去反斜的功能被抑制,恰可解決許功蓋問題。
 +
    </li><li>省略「LINES TERMINATED BY」,以\n(換行)為換筆,Windows下的換行「\r\n」,\r會被吃進欄位值。所以要指定「LINES TERMINATED BY '\r\n'」才會正常。
 +
    </li></ol></li>
 +
<li>OPTIMIZE TABLE 表名;:最佳化資料表。</li>
 +
<li>flush privileges;:手動讓權限更改生效。</li>
 +
</ol>
 +
==PHP==
 +
#http://science4everyone.net/file/丁志仁
 +
#點擊 jjnote.php
 +
原始碼:<pre>&lt;?php
 +
if(!isset($noSession) || !$noSession){@session_start();} // 打開 session ,提供登入功能
 +
define("CMS",'alone'); // 定義 CMS 常數,設定沒有和其他的 CMS 整合
 +
define('DSN',"mysql://assistant:aide@4#@db01.coowo.com:3355/assistant"); // 定義 DSN 常數,提供連結 MySQL 帳密
 +
define("CLASS_HTML_PATH",'/et/class'); // 定義 物件/類別 定義的網址
 +
define('CLASS_FILE_PATH','/var/www/vhosts/science4everyone.net/httpdocs/et/class'); // 定義 物件/類別 定義的位置
 +
include_once CLASS_FILE_PATH."/database/etable.php"; // 載入 etable 類別
 +
include_once CLASS_FILE_PATH."/wiki/wiki.php"; // 載入維基語法類別
 +
$ET = new etable; // 灌模產生 $ET 物件
 +
$ET-&gt;css='default'; // 指定外觀
 +
$ET-&gt;sql[0]="select webContent from jjnote order by nid desc"; // 指示 $ET 物件的 SQL 指令
 +
$ET-&gt;perpage=20; // 指示每頁幾筆
 +
$ET-&gt;colAlias=array('webContent'=&gt;'臨時筆記'); // 指示欄的代稱
 +
$ET-&gt;formType=array(
 +
'webContent'=&gt;array('auto',array('wiki')), // 指示各欄怎麼和使用者互動
 +
);
 +
$ET-&gt;users=array(
 +
'丁志仁'=&gt;array('psd'=&gt;'p86651339k','editable'=&gt;7,'grp'=&gt;array('4')) // 指示可以登入的使用者
 +
);
 +
$ET-&gt;search=array('webContent'); // 指示全文蒐索欄
 +
$ET-&gt;tran=1; // 指示要顯示欄值還是欄值的提示
 +
$ET-&gt;main(); // 驅動物件主函式
 +
?&gt;</pre>
 +
==在 mediawiki 中使用 CSS 與 javascript==
 +
===一、自訂css===
 +
====對所有頁生效====
 +
在較新的版本中改 shared.css 和 commonPrint.css 沒用,要編輯頁:MediaWiki:Common.css 才有用。
 +
#起先 wiki_page 表中沒有這一頁。
 +
#但仍可編頁:MediaWiki:Common.css,其預設內容為「/* 此 CSS 會套用至所有的介面外觀 */」。
 +
#一旦儲存變更後, wiki_page 表中即新增此頁,且套用到介面上。其名字空間為「8」。
 +
#可使用「@import url(http://jendo.org/mm/treestyles.css);」載入外部的 css
 +
#上述指示也可改為「mw.loader.load('http://jendo.org/mm/treestyles.css','text/css');」用資源載入方法(javascript全域函式)載入外部的 css
 +
進一步請參考:[https://www.mediawiki.org/wiki/Manual:CSS/zh 手冊:樣式表]
 +
 +
====對特定頁生效====
 +
參考[[Mediawiki 外掛]]中的設定方法,完成 CSS 外掛設定之後,在該頁中加:
 +
*&#123;{#css:MyStyles.css}&#125; 或 &#123;{#css:/skins/MyStyles.css}&#125; ;
 +
*或直接在解析器函數中寫入 CSS 規則,如下例所示:
 +
<pre>&#123;{#css:
 +
  body {
 +
    background: yellow;
 +
    font-size: 20pt;
 +
    color: red;
 +
  }
 +
}&#125;</pre>
 +
 +
===二、自訂javascript===
 +
#起先 wiki_page 表中沒有這一頁。
 +
#但仍可編頁:MediaWiki:Common.js,其預設內容為「/* 此 JavaScript 會用於使用者載入的每一個頁面。 */」。
 +
#一旦儲存變更後, wiki_page 表中即新增此頁,且套用到介面上。其名字空間為「8」。
 +
#可使用「mw.loader.load('http://jendo.org/mm/marktree.js');」來載入外部的 javascrip 。
 +
進一步請參考:[https://www.mediawiki.org/wiki/Manual:Interface/JavaScript JavaScript英文說明]
 +
 +
===三、請看 示範===
 +
[http://jendo.org/wiki1231/index.php?title=工作總覽 振鐸工作總覽]
 +
 +
==PHP 與 javascript 語法比較==
 +
<table class='nicetable'>
 +
<tr><th colspan=3>項目 <th colspan=2>PHP <th colspan=2>javascript <th>備註
 +
<tr><td colspan=8>一、基本表示法
 +
<tr><th colspan=3>包裹 <th colspan=2>&lt;SCRIPT language='php'&gt;…&lt;/SCRIPT&gt;或<br/>&lt;?…?&gt;或&lt;?php…?&gt; <th colspan=2>&lt;SCRIPT language='javascript'&gt;…&lt;/SCRIPT&gt;或<br/>&lt;SCRIPT type='text/javascript'&gt;…&lt;/SCRIPT&gt; <td>
 +
<tr><td colspan=8>二、敘述
 +
<tr><th colspan=3>概述 <td colspan=5>以敘述為基本操作單位,敘述由「資料」「算符」「;」共同構成。<ul><li>「資料」可為實字、常數或變數。資料來自通道、檔案或程式本身。<li>「算符」為對資料的操作。<li>「;」代表執行,用以結束敘述。</ul>
 +
<tr><th colspan=3 rowspan=7>基本說明 <th colspan=4>「;」代表 敘述結束                                        <td>
 +
<tr>                                <th colspan=2>換行不等於「;」 <th colspan=2>敘述未加「;」換行等於「;」  <td>
 +
<tr>                                <th colspan=4>多個敘述可以寫在同一行                                    <td>
 +
<tr>                                <th colspan=4>/*…*/。不可以巢狀。                                      <td>多行註解
 +
<tr>                                <th colspan=2>//或#          <th colspan=2>//                          <td>單行註解
 +
<tr>                                <th colspan=2>@              <th colspan=2>                            <td>錯誤抑制
 +
<tr>                                <th colspan=2>                <th colspan=2>全形空白解譯為半形空白      <td>晚期瀏覽器版本
 +
<tr><td colspan=8>三、資料型態
 +
<tr><th rowspan=8>純量 <th rowspan=2>數值 <th>實字              <th colspan=3>某某 (十進位)<br/>0某某(八進位)<br/>0x某某(十六進位)<br/>某某e某某(科學記號)<br/>      <th>javascript<br/>型別    <td>
 +
<tr>                                      <th>型態              <th colspan=2>分整數(integer)、浮點數(float)          <th colspan=1>只有number一種型別              <th rowspan=1>number      <td>
 +
<tr>                  <th rowspan=5>字串 <th>實字              <th colspan=3>引號包住字串                                                                            <th rowspan=5>string      <td>PHP還多了自訂引號
 +
<tr>                                      <th rowspan=3>跳脫字元 <td colspan=2>「"」中除「\'」外「\」是跳脫字元,「'」中除「\'」外「\」是字 <td colspan=1>「"」「'」中「\」都是跳脫字元          <td>
 +
<tr>                                                            <th colspan=3>\n、\r、\t、\\、\"、\'、\一到三位數字(以8進位指定字元)、\x一到二位數字(以16進位指定字元)                          <td>
 +
<tr>                                                            <td colspan=2>\$、\s(空白)      <td colspan=1>\b(倒退)、\f(欄位)、\u一到四位(以16進位unicode指定字元)                          <td>
 +
<tr>                                      <th>註標索引          <th colspan=3>代表第幾個字元                                                                                                    <td>
 +
<tr>                  <th>布林          <th>實字              <th colspan=3>真:true、非0;假:false、0、null                                                      <th rowspan=1>boolean      <td>
 +
<tr><th rowspan=4>複合 <th rowspan=3>陣列 <th>實字              <td colspan=2>array()            <td colspan=1>[],但字串索引無法用實字表達                                                    <th rowspan=5>object      <td>
 +
<tr>                                      <th>索引              <th colspan=3>可用字串索引及註標索引,可多維                                                                                    <td>
 +
<tr>                                      <td>元素數            <th colspan=2>count(陣列名)      <th colspan=1>陣列名.length                                                                    <td>
 +
<tr>                  <th>物件          <th>實字              <th colspan=2>無實字            <th colspan=1>{屬性名:屬性值,屬性名:屬性值,…物件:{物件值}…}                                  <td>
 +
<tr><th rowspan=3>特殊 <th>NULL          <th>實字              <th colspan=3>null                                                                                                              <td>
 +
<tr>                  <th colspan=2>資源                        <th colspan=2>有                <th colspan=1>無                                                    <th rowspan=1>            <td>
 +
<tr>                  <th>函式          <th>實字              <th colspan=2>非資料,無實字    <th colspan=1>function(…){…}                                      <th rowspan=1>function    <td>
 +
<tr><th colspan=3>自動生成物件                                  <th colspan=2>不會              <td colspan=2>將實字派入常數或變數,該常數或變數不需要new,自動獲得相關原生類別的諸屬性與諸方法 <td>
 +
<tr><td colspan=8>四、常數、變數
 +
<tr><th rowspan=2 colspan=2>常數          <th>宣告              <th>define("常數名",常數值);<th>只可用純量        <th>const 常數名=常數值; <th>所有資料型態皆可                                  <td>
 +
<tr>                                      <th>錯誤              <td colspan=2>對常數派值(=…)或重宣告都會發生錯誤 <td colspan=2>重派值(=…),值不變但也不發生錯誤,但重宣告一個既有常數會發生錯誤<td>         
 +
<tr><th rowspan=8 colspan=2>變數          <th rowspan=4>變數名  <td colspan=4>大小寫不同。                                                                                                      <td rowspan=4>建議用camelCasing<br/>命名規則
 +
<tr>                                                            <td colspan=2>可用中文,中文視為字母、數字之組合  <td colspan=2>不可用中文                                                     
 +
<tr>                                                            <td colspan=2>以「$」開頭,「$」之後可以用字母、_ <td colspan=2>第一個字必須是英文字母                                         
 +
<tr>                                                            <th colspan=4>開頭之後可以用數字、字母、_。                                                                                     
 +
<tr>                                      <th rowspan=2>範圍    <td colspan=4>用var宣告,物件是變數的一種,函式內宣告或派初值者為區域變數,函式外宣告或派初值者為全域變數                        <td>
 +
<tr>                                                            <td colspan=2>                            <td colspan=2>函式內外皆未宣告,卻在函式內派初值者,IE視為區域變數,Firefox視為全域變數<td>
 +
<tr>                                      <th>宣告              <th colspan=4>一次宣告多個變數:var 變數=值,變數=值…                                                                            <td>
 +
<tr>                                      <th>限制              <th colspan=2>函式不能當變數                      <th colspan=2>函式可以當變數                                                  <td>
 +
<tr><th colspan=3>刪除變數                                      <th colspan=2>unset(變數們);                      <th colspan=2>delete 變數;                                                    <td>
 +
<tr><th colspan=3>保留字                                        <td colspan=2>待查                                <td colspan=2>if、else、for、while、var                                        <td>
 +
<tr><td colspan=8>五、運算
 +
<tr><th rowspan=2 colspan=3>算符                                <td colspan=4>指派(=),加(+),減(-),乘(*),除(/),餘數(%),二元算符(+=,-=,*=,/=,%=,&=,^=,|=,&lt;&lt;=,&gt;&gt;=),遞增遞減(++,--),比較(&lt;,&gt;,==,===,&lt;=,&gt;=,!=,&lt;&gt;),邏輯(true,非0,false,0,||,&&,!),位元(&,|,^,~,&lt;&lt;,&gt;&gt;),三元算符(?:),宣告變數(var),造物件(new) <td>
 +
<tr>                                                            <td colspan=2>屬性及方法(-&gt;),字串連接(.),自訂引號(&lt;&lt;&lt;),參考算符(&),抑制錯誤算符(@),執行作業系統命令(`…`) <td colspan=2>屬性及方法(.),字串連接(+),位元無號右移(&gt;&gt;&gt;)                                                                                        <td>
 +
<tr><td colspan=8>六、敘述區塊
 +
<tr><th colspan=3>概述 <td colspan=5>以{}包住一群敘述,分號加在大括號中每一敘述
 +
<tr><th rowspan=2 colspan=3>控制敘述                            <td colspan=2>exit;                              <td colspan=2>程式段落標籤:                                                                                                                                                                                                    <td>
 +
<tr>                                                            <th colspan=3>break(跳到迴圈的下一道敘述),continue(跳過迴圈中以後的部分,跳到迴圈頭) <td>可跳至段落標籤                                                                                                                                                                        <td>
 +
<tr><th rowspan=2 colspan=3>迴圈                                <th colspan=4>while(條件){合條件時做的事}<br/>do{…}while(條件)<br/>for(設初值;條件;設下一值){…}                                                                                                                                                                                <td>
 +
<tr>                                                            <td colspan=2>foreach($陣列 as 用變數1代表元素的鍵=>用變數2代表元素的值){使用前面的變數製作敘述;}<br/>while($xxx=each($陣列)){$xxx[0]或$xxx['key']代表每個元素的鍵,$xxx[1]或$xxx['value']代表每個元素的值} <td colspan=2>for(變數 in 物件){物件的每個屬性或方法做一次,變數名代表屬性或方法,<br/>物件名[變數名]代表其值,方法的值是「function 方法名(){[native code]}」<td>javascript中陣列是物件
 +
<tr><th rowspan=2 colspan=3>條件                                <td colspan=4>if(條件一){做一}else{做其他}<br/>switch(變數){case 值一:做一;break;case 值二:做二;break;case 值三:做三;break;…default:做其他;break;}                                                                                                                              <td>
 +
<tr>                                                            <th colspan=2>elseif                                                                                                                                                                                        <th colspan=2>else if                                                <td>
 +
<tr><th rowspan=1 colspan=3>例外                                <th colspan=2>                                                                                                                                                                        <td colspan=2>try{敘述或用throw強制產錯誤碼}catch{依錯誤碼做動作}finall{無論有無錯誤都執行}<td>
 +
<tr><td colspan=8>七、函式
 +
<tr><th colspan=3>函式表示法                                    <td colspan=4>function 函式名(諸引數){…return 傳回值;…}<td>
 +
<tr><th colspan=3>函式參數<br/>的預設值                          <td colspan=2>function 函式名(引數=預設值){……}
 +
                                                                <td colspan=2>function 函式名(諸引數){在裡面設預設值}
 +
                                                                <br/>function 函式名(a){if(typeof a=='undefined'){a=預設值;…}} 或
 +
                                                                <br/>function 函式名(a){a=a || 預設值;…}
 +
                                                                <td>
 +
<tr><th colspan=3>資料表示法<br/>(敘述集合)                      <td colspan=2>$變數乙=create_function(諸引數字串,諸敘述列字串);
 +
                                                                <br/>變數乙的型別是字串,echo 變數乙;得「lambda_1」
 +
                                                                <br/>$變數乙(諸引數)得回其諸敘述列的傳回值。
 +
                                                                <td colspan=2>var 函式變數乙=function(引數){…};此為敘述所以最後還要加「;」
 +
                                                                <br/>一、執行並回傳:var 甲=乙(實體參數);先執行乙函式,傳回值代入甲。
 +
                                                                <br/>二、匿名函式(參照):
 +
                                                                <ol>
 +
                                                                <li>乙函式不需代入實質參數即可執行:「var 甲=乙;」執行「甲()」如同執行「乙()」
 +
                                                                <li>乙函式需代入實質參數才可執行:「var 甲=function(){乙(實體參數);};」執行「甲()」如同執行「乙(實體參數)」。
 +
                                                                </ol>
 +
                                                                <td>
 +
<tr><td colspan=8>八、類別與物件
 +
<tr><th rowspan=1 colspan=3>類別    <td colspan=2>class 類別名{諸屬性;諸方法;} <td colspan=2>function 類別名(引數){this.屬性=運算式;} <td>
 +
<tr><th rowspan=2 colspan=3>物件    <th colspan=4>屬性不加(),方法加()                                                                <td>
 +
<tr>                                <td colspan=2>new 類別名;<td colspan=2>new 類別名();<br>with(物件名){敘述省略物件名}              <td>
 +
<tr><th rowspan=1 colspan=3>原生類別 <td colspan=2><td colspan=2>String、Number、Boolean、Array、Math、Date、Function                  <td>由語言提供屬性方法
 +
<tr><th rowspan=1 colspan=3>自訂類別 <td colspan=4>由使用者定義類別,由類別生方法                                                      <td>由程式提供屬性方法
 +
<tr><th rowspan=2 colspan=3>寄主物件 <td colspan=2><td colspan=2>window(瀏覽器)、document(文件)方法                                    <td>由環境提供屬性方法
 +
<tr>                                <td colspan=2><td colspan=2>DOM物件:所有角括號所括的標籤都是
 +
                                    <br/>document是html的父節點
 +
                                    <br/>document.getElementById(id) 取回單一標籤
 +
                                    <br/>document.getElementsByTagName(某種標籤) 取回同類標籤所成陣列,每一元素為一標籤
 +
                                    <br/>document.getElementsByName(name屬性值) 取回name屬性相同的標籤成陣列,每一元素為一標籤
 +
                                    <br/>標籤物件.getAttribute(屬性名) 取屬性值
 +
                                    <br/>標籤物件.setAttribute(屬性名,屬性值) 設屬性值
 +
                                    <br/>標籤物件.parentNode 取回父節點標籤所包的區域
 +
                                    <br/>標籤物件.childNodes 取回諸子節點的集合陣列
 +
                                    <br/>標籤物件.attributes 取回諸屬性節點的集合陣列
 +
                                    <br/>firstChild即childNodes[0],lastChild即childNodes最後一個元素
 +
                                    <br/>節點物件.nodeValue 節點值
 +
                                    <br/>例:alert(document.getElementsByTagName('h1')[0].firstChild.nodeValue);
 +
                                    <br/>document.createElement(某種標籤) 造標籤
 +
                                    <br/>document.createTextNode("文字串") 將文字串製備為文字節點
 +
                                    <br/>標籤元素.appendChild("製備好的文字節點") 在標籤中塞入文字
 +
                                    <br/>標籤元素.removeChild("節點變數") 刪除節點
 +
<td>
 +
<tr><td colspan=8>九、事件
 +
<tr><th rowspan=1 colspan=3>概述      <td rowspan=7 colspan=2><td colspan=2>事件處理器本質是變數(屬性),而其值放入函式,值的資料型別必須為「function」<br/>事件處理器均以on開頭 <td>
 +
<tr><th rowspan=1 colspan=3>表示法                            <td colspan=2>標籤中:&lt;標籤 事件處理器='指令'&gt;<br/>程式中:物件名.事件處理器=處理函式                      <td>
 +
<tr><th rowspan=3 colspan=3>使用者觸發                        <th>事件          <th>事件處理器          <td>
 +
<tr>                                                          <th>onmouseover  <th>onmouseover        <td>
 +
<tr>                                                          <th>submit        <th>onsubmit            <td>
 +
<tr><th rowspan=1 colspan=3>瀏覽器觸發                        <th>載入完畢      <th>onload              <td>
 +
<tr><th rowspan=1 colspan=3>伺服器觸發                        <th>請求進度改變  <th>onreadystatechange  <td>
 +
</table>

於 2020年1月22日 (三) 01:26 的最新修訂

MySQL 放資料
PHP 伺服器端語言,抓資料、顯示資料
javescipt 客戶端語言,作用在瀏覽器上,可以快速便捷地與使用者互動

MySQL

一、登入

http://science4everyone.net/adminer-4.7.5-mysql.php

  1. 伺服器:
  2. 帳號:
  3. 密碼:
  4. 資料庫(可省略):

二、登入後介面(標準介面)

(一)左側選單

  1. 語言:
  2. 版本
  3. 四指令
  4. 目前資料庫的諸資料表
    • 瀏覽各筆
    • 看資料表結構

(二)右側主要工作區

  1. 登出
  2. 四層路徑「系統/伺服器/資料庫/資料表」
  3. 現有層級提示
  4. 可用工作選單
  5. ☆互動工作區

(三)示範資料表

  1. web
  2. webMail
  3. ×××note

(四)建立自己的資料表

  1. create table 表格名 like 既有表格名:使用既有表格的格式創建新表
    • 建好後觀察
    • 觀察完刪掉
  2. 「到 assistant 資料庫/建立資料表」,到指定資料庫有兩種方法。

三、SQL概說

  1. SQL:Structured Query Language。SQL網路資料庫在 MySQL、MSSQL、DB2 語法相同。
  2. NoSQL 網路資料庫,還沒有標準。要資料量極大才算得到,在全民科學平台上還用不到。
  3. 網路資料庫在雲端上,可以多人共編而不會亂掉。
  4. 資料庫系統(如MySQL、MSSQL),包含數個資料庫。
  5. 一個資料庫包含數個資料表(table)。實體上,一個資料庫是一個目錄(資料夾),一張資料表是一個檔案。
  6. 每張資料表由「欄」(column)及「筆」(row,record,tuple)構成。
  7. 每一筆資料的每欄,都放入「值」(value)。
  8. 資料表中用來辨識筆的欄位叫「鍵」(key,primary key),鍵值也可以由許多欄組合而成,每一筆的鍵值必須「唯一」,如姓名不是好的鍵值,身份證字號是好的鍵值。

四、基本SQL命令

小括號( )是指令的一部分;中括號[ ]代表可選用的選項,指令中不一定要下這些指示。

  1. show databases;:秀出現有的資料庫。
  2. create database 資料庫名;:建資料庫。
  3. use 資料庫名;:取用資料庫
  4. show tables;:秀出現用資料庫有那些資料表。
  5. create table 表格名 (欄名 資料型別(欄寬) 預設值,name char(10),);:建資料表。
  6. create table 表格名 like 既有表格名:使用既有表格的格式創建新表
    接著可用「insert 新表 select * from 舊表;」複製資料。
  7. create table 表格名 as select col1,col2… from 既有表格名 definition only:使用既有表格部分欄位創建新表。如果省略 definition only ,則結構和資料都一起複製到新表。新表沿用預設的 Engine、語系編碼,而不是舊表的。
  8. describe 表格名;:秀表格結構。
  9. insert into 表格名 values ('值1','值2',…);:循欄序加一筆資料。
  10. insert into 表格名 values ('值1','值2',…),('值1','值2',…),('值1','值2',…)…;:循欄序加很多筆資料。
  11. insert into 表格名 (欄名1,欄名2,…) values ('值1','值2',…);:只對指定數欄填值,加一筆資料。
  12. insert into 表格名 (欄名1,欄名2,…) select (欄名a,欄名b,…) from…;:批次插入表格內容,select子句中可以含有WHERE、GROUP BY、HAVING、表格連接及別名等等。
  13. insert into 表格名 select * from 另一表格;:表格結構相同,直接照抄內容。
  14. insert into 表格名 set 欄名1='值1',欄名2='值2',…;:只對指定數欄填值,加一筆資料。
  15. REPLACE 的用法與 INSERT INTO 非常接近,不同的地方是:
    在 INSERT INTO 中如果你插入的欄位有唯一性質的索引,例如:PRIMARY KEY, AUTO_INCREMENT, UNIQUE,如果插入資料時真的發生唯一性質的欄位資料重複,那麼這個 INSERT INTO 命令會被忽略而不執行,但是在 REPLACE 中的新資料卻會把重複資料中的舊資料蓋掉。因此 REPLACE 比 INSERT INTO 更具強制性。
  16. 在insert、update命令中,插入欄值如果是123,456等數值,不論欄位的資料型態為何,皆可不加引號而插入;但如果插入之欄值不是數值,則一定要加引號。
  17. select 欄名1,欄名2,… from 表格名;:找出指定欄位,全部筆數。
  18. select DISTINCT 欄名1,欄名2,… from 表格名;:找出指定欄位,全部筆數,但所有欄值都相等的諸筆合併為一筆。DISTINCT翻譯為「不同」。
  19. select * from 表格名;:找出全部欄位,全部筆數。
  20. select * from 表格名 where 條件(如name='丁志仁');:找出全部欄位,合條件的筆數。
  21. update 表格名 set 欄名=欄值,欄名=欄值… [where 條件][limit 範圍];:將合條件合範圍的所有筆數,指定欄都換成指定欄值,欄值可以為公式。
    如:「update 表格名 set 欄名=TRIM(BOTH '\r\n' FROM 欄名)」去掉頭尾的空白行。
    「update 表格名 set 欄名=concat(字串1,char(10),char(13),字串2) where tid = xxxxx」插入換行
    「update 表格名 set 欄名=replace(欄名,'abc','char(10)abc') where tid = xxxxx」插入換行
  22. insert與update之值可以是運算,該運算可包含現有欄值(以欄名表示)。
  23. alter table 表格名 add 欄名及欄位描述;:對表格加欄。
  24. alter table 表格名 modify 欄名及欄位描述;:對表格改欄之屬性、欄寬等欄位描述。
  25. delete from 表格名 where 條件 limit 幾筆;:刪合條件的幾筆。
  26. 不可用delete from 表格名 where 條件 limit 自第幾筆始,以下幾筆;:因在delete指令下,limit是指幾筆,不是指範圍。
  27. 4.0版之後開始支援刪多表,其指令類似select,只是以「delete 諸表」取代「select 諸欄」,可以使用left join、on、where組合。
  28. drop table [if exists] 表格名;:刪除資料表。如加「if exists」則找到則刪,避免出現錯誤訊息。
  29. truncate table 表格名;:清空資料表。
  30. drop database [if exists] 資料庫名;:刪除資料庫。
  31. grant all on *.* to 使用者 identified by '通行碼';:給所有權力,在所有資料庫所有表格,給某使用者以某password辨識時。
  32. load data local infile '路徑及檔名' into table 表格名 [fields [欄名1,欄名2…] [terminated by ','] [ENCLOSED BY '"'] [ESCAPED BY '\\']] [LINES TERMINATED BY '\r\n'];:從檔案吃資料進表格。省略欄名則循序給;省略分隔符號則以TAB分隔資料。
    1. 進mysql的預設路徑在/var/lib/mysql
    2. use 資料庫;後預設路徑在/var/lib/mysql/資料庫。但要load data infile一定要use 資料庫。
    3. 省不省略「local」,都可以用絕對路徑(從/寫起)、相對路徑(用.或..)、預設路徑(沒指定路徑)。
    4. 檔名一定要外包引號。
    5. 「fields」管欄名列、terminated by、ENCLOSED BY、ESCAPED BY,四個操作項
    6. 省略「fields 欄名1,欄名2…」等欄名列,循序抓欄值,抓到欄位數完或數據檔中的數據抓完,一定吃。和insert不同。
    7. 省略「terminated by ','」,用TAB(\t)分隔欄值,兩個TAB連在一起,兩個TAB之間還是要算一個空欄值。
    8. 省略「ENCLOSED BY '"'」,數據檔中的"被當作欄值存起來。如下此令,要看檔中數據前後有無成對的"包起來,有就去掉;如果沒有或引號不是前後成對,不去引號,但認定的欄位就很長,長到把欄位分隔符號包進來,導致把好幾欄當一欄。數據也可以改用其他字符來包欄值。
    9. 下「OPTIONALLY」,不知何意,本版本也不支援。
    10. 省略「ESCAPED BY '\\'」,認\為特殊字元,會去反斜。可指定反斜以外的字元為跳脫字元。用「ESCAPED BY 」時,去反斜的功能被抑制,恰可解決許功蓋問題。
    11. 省略「LINES TERMINATED BY」,以\n(換行)為換筆,Windows下的換行「\r\n」,\r會被吃進欄位值。所以要指定「LINES TERMINATED BY '\r\n'」才會正常。
  33. OPTIMIZE TABLE 表名;:最佳化資料表。
  34. flush privileges;:手動讓權限更改生效。

PHP

  1. http://science4everyone.net/file/丁志仁
  2. 點擊 jjnote.php
原始碼:
<?php
if(!isset($noSession) || !$noSession){@session_start();}	// 打開 session ,提供登入功能
define("CMS",'alone');	// 定義 CMS 常數,設定沒有和其他的 CMS 整合
define('DSN',"mysql://assistant:aide@4#@db01.coowo.com:3355/assistant");	// 定義 DSN 常數,提供連結 MySQL 帳密
define("CLASS_HTML_PATH",'/et/class');	// 定義 物件/類別 定義的網址
define('CLASS_FILE_PATH','/var/www/vhosts/science4everyone.net/httpdocs/et/class');	// 定義 物件/類別 定義的位置
include_once CLASS_FILE_PATH."/database/etable.php";	// 載入 etable 類別
include_once CLASS_FILE_PATH."/wiki/wiki.php";	// 載入維基語法類別
$ET = new etable;	// 灌模產生 $ET 物件
$ET->css='default';	// 指定外觀
$ET->sql[0]="select webContent from jjnote order by nid desc";	// 指示 $ET 物件的 SQL 指令
$ET->perpage=20;	// 指示每頁幾筆
$ET->colAlias=array('webContent'=>'臨時筆記');	// 指示欄的代稱
$ET->formType=array(
	'webContent'=>array('auto',array('wiki')),	// 指示各欄怎麼和使用者互動
);
$ET->users=array(
	'丁志仁'=>array('psd'=>'p86651339k','editable'=>7,'grp'=>array('4'))	// 指示可以登入的使用者
);
$ET->search=array('webContent');	// 指示全文蒐索欄
$ET->tran=1;	// 指示要顯示欄值還是欄值的提示
$ET->main();	// 驅動物件主函式
?>

在 mediawiki 中使用 CSS 與 javascript

一、自訂css

對所有頁生效

在較新的版本中改 shared.css 和 commonPrint.css 沒用,要編輯頁:MediaWiki:Common.css 才有用。

  1. 起先 wiki_page 表中沒有這一頁。
  2. 但仍可編頁:MediaWiki:Common.css,其預設內容為「/* 此 CSS 會套用至所有的介面外觀 */」。
  3. 一旦儲存變更後, wiki_page 表中即新增此頁,且套用到介面上。其名字空間為「8」。
  4. 可使用「@import url(http://jendo.org/mm/treestyles.css);」載入外部的 css
  5. 上述指示也可改為「mw.loader.load('http://jendo.org/mm/treestyles.css','text/css');」用資源載入方法(javascript全域函式)載入外部的 css

進一步請參考:手冊:樣式表

對特定頁生效

參考Mediawiki 外掛中的設定方法,完成 CSS 外掛設定之後,在該頁中加:

  • {{#css:MyStyles.css}} 或 {{#css:/skins/MyStyles.css}} ;
  • 或直接在解析器函數中寫入 CSS 規則,如下例所示:
{{#css:
  body {
    background: yellow;
    font-size: 20pt;
    color: red;
  }
}}

二、自訂javascript

  1. 起先 wiki_page 表中沒有這一頁。
  2. 但仍可編頁:MediaWiki:Common.js,其預設內容為「/* 此 JavaScript 會用於使用者載入的每一個頁面。 */」。
  3. 一旦儲存變更後, wiki_page 表中即新增此頁,且套用到介面上。其名字空間為「8」。
  4. 可使用「mw.loader.load('http://jendo.org/mm/marktree.js');」來載入外部的 javascrip 。

進一步請參考:JavaScript英文說明

三、請看 示範

振鐸工作總覽

PHP 與 javascript 語法比較

項目 PHP javascript 備註
一、基本表示法
包裹 <SCRIPT language='php'>…</SCRIPT>或
<?…?>或<?php…?>
<SCRIPT language='javascript'>…</SCRIPT>或
<SCRIPT type='text/javascript'>…</SCRIPT>
二、敘述
概述 以敘述為基本操作單位,敘述由「資料」「算符」「;」共同構成。
  • 「資料」可為實字、常數或變數。資料來自通道、檔案或程式本身。
  • 「算符」為對資料的操作。
  • 「;」代表執行,用以結束敘述。
基本說明 「;」代表 敘述結束
換行不等於「;」 敘述未加「;」換行等於「;」
多個敘述可以寫在同一行
/*…*/。不可以巢狀。 多行註解
//或# // 單行註解
@ 錯誤抑制
全形空白解譯為半形空白 晚期瀏覽器版本
三、資料型態
純量 數值 實字 某某 (十進位)
0某某(八進位)
0x某某(十六進位)
某某e某某(科學記號)
javascript
型別
型態 分整數(integer)、浮點數(float) 只有number一種型別 number
字串 實字 引號包住字串 string PHP還多了自訂引號
跳脫字元 「"」中除「\'」外「\」是跳脫字元,「'」中除「\'」外「\」是字 「"」「'」中「\」都是跳脫字元
\n、\r、\t、\\、\"、\'、\一到三位數字(以8進位指定字元)、\x一到二位數字(以16進位指定字元)
\$、\s(空白) \b(倒退)、\f(欄位)、\u一到四位(以16進位unicode指定字元)
註標索引 代表第幾個字元
布林 實字 真:true、非0;假:false、0、null boolean
複合 陣列 實字 array() [],但字串索引無法用實字表達 object
索引 可用字串索引及註標索引,可多維
元素數 count(陣列名) 陣列名.length
物件 實字 無實字 {屬性名:屬性值,屬性名:屬性值,…物件:{物件值}…}
特殊 NULL 實字 null
資源
函式 實字 非資料,無實字 function(…){…} function
自動生成物件 不會 將實字派入常數或變數,該常數或變數不需要new,自動獲得相關原生類別的諸屬性與諸方法
四、常數、變數
常數 宣告 define("常數名",常數值);只可用純量 const 常數名=常數值; 所有資料型態皆可
錯誤 對常數派值(=…)或重宣告都會發生錯誤 重派值(=…),值不變但也不發生錯誤,但重宣告一個既有常數會發生錯誤
變數 變數名 大小寫不同。 建議用camelCasing
命名規則
可用中文,中文視為字母、數字之組合 不可用中文
以「$」開頭,「$」之後可以用字母、_ 第一個字必須是英文字母
開頭之後可以用數字、字母、_。
範圍 用var宣告,物件是變數的一種,函式內宣告或派初值者為區域變數,函式外宣告或派初值者為全域變數
函式內外皆未宣告,卻在函式內派初值者,IE視為區域變數,Firefox視為全域變數
宣告 一次宣告多個變數:var 變數=值,變數=值…
限制 函式不能當變數 函式可以當變數
刪除變數 unset(變數們); delete 變數;
保留字 待查 if、else、for、while、var
五、運算
算符 指派(=),加(+),減(-),乘(*),除(/),餘數(%),二元算符(+=,-=,*=,/=,%=,&=,^=,|=,<<=,>>=),遞增遞減(++,--),比較(<,>,==,===,<=,>=,!=,<>),邏輯(true,非0,false,0,||,&&,!),位元(&,|,^,~,<<,>>),三元算符(?:),宣告變數(var),造物件(new)
屬性及方法(->),字串連接(.),自訂引號(<<<),參考算符(&),抑制錯誤算符(@),執行作業系統命令(`…`) 屬性及方法(.),字串連接(+),位元無號右移(>>>)
六、敘述區塊
概述 以{}包住一群敘述,分號加在大括號中每一敘述
控制敘述 exit; 程式段落標籤:
break(跳到迴圈的下一道敘述),continue(跳過迴圈中以後的部分,跳到迴圈頭) 可跳至段落標籤
迴圈 while(條件){合條件時做的事}
do{…}while(條件)
for(設初值;條件;設下一值){…}
foreach($陣列 as 用變數1代表元素的鍵=>用變數2代表元素的值){使用前面的變數製作敘述;}
while($xxx=each($陣列)){$xxx[0]或$xxx['key']代表每個元素的鍵,$xxx[1]或$xxx['value']代表每個元素的值}
for(變數 in 物件){物件的每個屬性或方法做一次,變數名代表屬性或方法,
物件名[變數名]代表其值,方法的值是「function 方法名(){[native code]}」
javascript中陣列是物件
條件 if(條件一){做一}else{做其他}
switch(變數){case 值一:做一;break;case 值二:做二;break;case 值三:做三;break;…default:做其他;break;}
elseif else if
例外 try{敘述或用throw強制產錯誤碼}catch{依錯誤碼做動作}finall{無論有無錯誤都執行}
七、函式
函式表示法 function 函式名(諸引數){…return 傳回值;…}
函式參數
的預設值
function 函式名(引數=預設值){……} function 函式名(諸引數){在裡面設預設值}
                                                                
function 函式名(a){if(typeof a=='undefined'){a=預設值;…}} 或
function 函式名(a){a=a || 預設值;…}
資料表示法
(敘述集合)
$變數乙=create_function(諸引數字串,諸敘述列字串);
                                                                
變數乙的型別是字串,echo 變數乙;得「lambda_1」
$變數乙(諸引數)得回其諸敘述列的傳回值。
var 函式變數乙=function(引數){…};此為敘述所以最後還要加「;」
                                                                
一、執行並回傳:var 甲=乙(實體參數);先執行乙函式,傳回值代入甲。
二、匿名函式(參照):
  1. 乙函式不需代入實質參數即可執行:「var 甲=乙;」執行「甲()」如同執行「乙()」
  2. 乙函式需代入實質參數才可執行:「var 甲=function(){乙(實體參數);};」執行「甲()」如同執行「乙(實體參數)」。
八、類別與物件
類別 class 類別名{諸屬性;諸方法;} function 類別名(引數){this.屬性=運算式;}
物件 屬性不加(),方法加()
new 類別名;new 類別名();
with(物件名){敘述省略物件名}
原生類別 String、Number、Boolean、Array、Math、Date、Function 由語言提供屬性方法
自訂類別 由使用者定義類別,由類別生方法 由程式提供屬性方法
寄主物件 window(瀏覽器)、document(文件)方法 由環境提供屬性方法
DOM物件:所有角括號所括的標籤都是
                                    
document是html的父節點
document.getElementById(id) 取回單一標籤
document.getElementsByTagName(某種標籤) 取回同類標籤所成陣列,每一元素為一標籤
document.getElementsByName(name屬性值) 取回name屬性相同的標籤成陣列,每一元素為一標籤
標籤物件.getAttribute(屬性名) 取屬性值
標籤物件.setAttribute(屬性名,屬性值) 設屬性值
標籤物件.parentNode 取回父節點標籤所包的區域
標籤物件.childNodes 取回諸子節點的集合陣列
標籤物件.attributes 取回諸屬性節點的集合陣列
firstChild即childNodes[0],lastChild即childNodes最後一個元素
節點物件.nodeValue 節點值
例:alert(document.getElementsByTagName('h1')[0].firstChild.nodeValue);
document.createElement(某種標籤) 造標籤
document.createTextNode("文字串") 將文字串製備為文字節點
標籤元素.appendChild("製備好的文字節點") 在標籤中塞入文字
標籤元素.removeChild("節點變數") 刪除節點
九、事件
概述 事件處理器本質是變數(屬性),而其值放入函式,值的資料型別必須為「function」
事件處理器均以on開頭
表示法 標籤中:<標籤 事件處理器='指令'>
程式中:物件名.事件處理器=處理函式
使用者觸發 事件 事件處理器
onmouseover onmouseover
submit onsubmit
瀏覽器觸發 載入完畢 onload
伺服器觸發 請求進度改變 onreadystatechange