2016年10月27日 星期四

php mysqli_fetch_array() 一維陣列

mysqli_fetch_array() 反回的是一維陣列

1. 用print_r或var_dump檢查$row得到的是一維陣列(第一筆資料)
#!/usr/bin/php
<?php
$user='username';
$passwd='password';
$host='host';
$dbname='dbname';
$conn=mysqli_connect($host, $user, $passwd, $dbname);
$sql="select * from tablename";
$result=mysqli_query($conn,$sql);

$row=mysqli_fetch_array($result);
print_r($row);
?>

用print_r或var_dump檢查$row得到的是一維陣列(第一筆資料)

array
(
   [0] => value of field0
   [field0] => value of field0
   [1] => value of field1
   [field1] => value of field1
)

2.若要取出所有資料放入二維陣列
while($row = mysqli_fetch_array($result)) {
$data[] = $row;
}



3. 一般來說列印資料庫資料只需如下:
while($row = mysqli_fetch_array($result))
{
echo $row[0].",".$row[1]."\n";

}

4. 如果要取出所有資料庫資料放入二維陣列,再列印如下:
#!/usr/bin/php
<?php
$user='username';
$passwd='password';
$host='host';
$dbname='dbname';
$conn=mysqli_connect($host, $user, $passwd, $dbname);
$sql="select * from tablename";
$result=mysqli_query($conn,$sql);
$length = mysqli_num_rows($result);

while($row = mysqli_fetch_array($result))
{
$data[] = $row;
}


for ($i=0;$i<$length;$i++)
{
  for ($j=0;$j<2;$j++) {

  echo $data[$i][$j].",";
  }
  echo "\n";
}

?>








2016年10月22日 星期六

迴圈


1. For 迴圈 
若於程式設計階段已知要執行的次數 則可使用for敘述
for 固定變量,限定數值範圍 (適用數值變量)
for start,end,step start,end,step都必須是數字

#!/bin/bash
for ((i=0; i<10; i++))
do
echo $i;
done

#!/bin/bash
Distro=('openSUSE' 'Red hat' 'Debian' 'Ubuntu' 'Fedora')
for ((i=0;i<${#Distro[@]};i++))
do
  echo "Linux Distro[$i]=>"${Distro[$i]}
done

#!/usr/bin/perl
@array = ('openSUSE', 'Red hat', 'Debian', 'Ubuntu', 'Fedora');
$length = @array;
for ($i=0;$i<$length;$i++)
{
print "$array[$i]\n";
}

 2. While迴圈
若未知執行次數的話 則應使用while或repeat
while迴圈 稱為前測試迴圈
while 限定條件
while(xx) xx可以是任何運算式
也就是說 先測試條件運算式為真時 繼續執行迴圈 也有可能不執行迴圈內容就直接離開

#!/bin/bash
i=0
while [ $i -lt 10 ];
do
   echo $i;
   ((i++))
done

#!/bin/bash
Distro=('openSUSE' 'Red hat' 'Debian' 'Ubuntu' 'Fedora')
i=0
while [ $i -lt ${#Distro[@]} ]
do
  echo "Linux Distro[$i]=>"${Distro[$i]}
  ((i++))
done

#!/usr/bin/perl
@array = ('openSUSE', 'Red hat', 'Debian', 'Ubuntu', 'Fedora');
$length = @array;
$i=0;
while ($i<$length)
{
print "$array[$i]\n";
$i++
}


3. do while迴圈
repeat   稱為後測試迴圈
也就是說 先執行迴圈 待條件運算式為真時再離開迴圈 也就是 迴圈內容至少執行一次


4. foreach迴圈 
foreach提供陣列很便利的輸出方式,
foreach 語法結構說明:
 
  結構一:
         每跑一圈foreach會把陣列($array)的陣列值
        (array value)存放到 $value 中。
 
         foreach ( $array as $value )
                     ... 執行程式碼 ...
  結構二:
        與結構一的意思一樣,但多增加了把陣列的所引
      (array key)'會同時將array key 取出並存放於
       $key 中。
   
       foreach ( $array as $key => $value )
                  ... 執行程式碼 ...

#!/usr/bin/php
<?php
$dataArray=array('openSUSE', 'Red hat', 'Debian', 'Ubuntu', 'Fedora');
foreach($dataArray as $daKey => $daValue)
{
 echo "\$dataArray[$daKey]=>".$daValue."\n";
}
?>

#!/usr/bin/perl
@array = ('openSUSE', 'Red hat', 'Debian', 'Ubuntu', 'Fedora');
foreach my $i (@array)
{
  print "$i\n";
}











2016年10月18日 星期二

判斷指令

1. cmd1 ; cmd2
無論對錯2個都執行

2. cmd1 && cmd2
第一的對,第二個執行
第一個錯,第二個跳掉不執行
第一個對,第二個錯。執行第一個

3. cmd1 || cmd2 || cmd3 || cmd4
從第一個開始有對的執行完畢





單引號與雙引號,與跳脫符號

1. 電腦在讀字元時有時當字元看,有時不當字元看
     e.g.:  echo
            echo abc  -> abc
            echo ~ -> /root
            echo '  -> error
            echo "  -> error
            echo !  -> !
            echo @ -> @
            echo * -> /......................

2. 產生2件事:不當字元的字有何意義。如何印出不當字元的字
如何印出不當字元的字: 用跳脫符號 \

e.g. : echo \~ -> ~
       echo \' -> '
       echo \" ->"

跳脫符號加特定字母有特意義。
e.g. : \n   換行


不當字元看的字有何意義
e.g.:  單引號與雙引號

echo '$PATH' -> $PATH (單引號內所有字元當字元

echo ''$PATH" -> /usr/bin:/usr/local/bin(雙引號除了 一些特殊字元,例如$ 、  \,引號內所有字元當字元)

ex: echo '\' -> \
      echo "\" -> error

php e.g.
#!/usr/bin/php
<?php
$color = 'red';
$item = 'hat';
$result = sprintf('I have a %s %s\n', $color,$item);
echo $result;
?>
ans:I have a red hat\n

#!/usr/bin/php
<?php
$color = 'red';
$item = 'hat';
$result = sprintf("I have a %s %s\n", $color,$item);
echo $result;
?>
ans:I have a red hat

最常見的一個例子是C程式語言中,用反斜線字元「\」作為跳脫字元,來表示那些不可打印的ASCII控制符。在URI協定中,跳脫字元是百分號「%」。

2016年10月17日 星期一

家用常識

#延長線買: 防突波(anti-surge)

#水管彎的目的: trap

#套筒,板手  
所謂二分、三分、四分,是指套筒和把手連接處的規格
2/8=1/4= 二分
3/8 = 三分
4/8 = 四分
力矩扳手:
長度X 力
牛頓米

1.和解
2.調解
     勞資糾紛
     房屋修繕
     行車意外
     消費爭議
     醫療糾紛
     合夥糾紛
     財產爭議
    
3.傷害刑法
律師費
  律師函
  存證信函
  訴狀
  談話諮詢費
  外出車馬費
  訴訟委任

2016年10月13日 星期四

檔案系統的掛載與卸載(mount and umount)

檔案系統的掛載與卸載(mount and umount)
因為Linux的檔案系統的階層可以跨越獨立的分割區以及多重的磁碟機,所以有需要在開機的時候自動掛載這些檔案系統。此外,可抽換式磁碟(如抽取式硬碟,光碟等)以及遠端NFS伺服器上的檔案系統,會有經常性的掛載與卸載,因此不會採用開機時自動掛載的方式。開機時掛載有關的所有資訊會被紀錄載/etc/fstab檔案中。當系統開機時,定義於/etc/fstab檔案中的檔案系統將會受到檢查與掛載的處理。當使用者想要掛載可抽換式磁碟時,亦會參考到/etc/fstab中的資訊。

檔案/etc/fstab是一的文字檔,如以下的範例:
/dev/sda1      /                               btrfs            defaults                                       1 1
/dev/sda2      /home                      xfs              defaults                                      1 1
/dev/sda6      /root                        ext4            defaults                                       1 1
/dev/sda3      swap                        swap           pri=42                                          0 0
usbdevfs        /proc/bus/usb     usbdevfs      noauto                                        0 0
/dev/cdrom   /media/cdrom        auto    ro,noauto,user,exec                        0 0
/dev/sdb1      /home/user/usb      vfat     mode=0777,uid=500,gid=100       0 0
//ip/temp       /home/user/temp   cifs      iocharset=utf8,user=user,password=,rw,uid=user,gid=users

/etc/fstab中每一列都有六個欄位,分別是:
1. Device(裝置)
這個欄位用來指定分割區的裝置檔,如/dev/sda1代表第一顆硬碟的第一個主要分割區。

2. Mount Point(掛載點)
這個欄位用來指定檔案系統所要掛載的目錄。如上例/dev/sda1包含root檔案系統,則會被掛載到 / 目錄。/dev/sda2 掛載到/home目錄,代表將第一顆硬碟的第二的主要分割區整個掛到/home底下,於是/home底下的使用者檔案便可共用一整個partition。

3. Filesystem Type(檔案系統類型)
不同的檔案系統具有不同的Filesystem Type。

4. Mount Options(掛載類型)
這個欄位包含一份以逗號隔開的選項清單。一般指定檔案系統是要以唯讀,可讀寫,或預設等等的方式掛上。

5. Dump Frequency(備份頻率)
dump程式(一個標準的unix備份工具)會參考到/etc/fstab中每個檔案系統在這裡的設定,以決定每個檔案系統多久備份一次。設為0則代表不備分。

6. fsck的檢查順序
fsck 是一個unix標準的磁碟檢查及除錯的工具(程式)。開機時亦會執行fsck這個指令來檢查磁碟。當fsck指令的-A參數被指定時,便會參考到/etc/fstab這個檔案,並依照檢查順序欄位的數字大小依序作檢查。這個欄位只能出現0,1,2三個值。
0    表示fsck不檢查
1    先檢查
2    檢查完設為1的檔案系統後在檢查設為2的檔案系統。

掛載與卸載指令 – mount 及 umount
mount    [-option]
mount -o uid=user -o gid=users -o mode=755 -t  vfat   /dev/sdb1  /home/usb
說明:
[-option]
-a        掛載/etc/fstab檔中所列示的所有分割區。但有noauto選項的分割區除外。例如光碟,或其他抽取式磁碟。
-h     顯示輔助說明
-r    將檔案系統掛成read-only(唯讀)
-w        將檔案系統掛成read-write(可讀寫)
-o mount-option 在命令列上指定掛載選項。
-t fstype 指定檔案系統類型。

掛載選項:
以下的選項可以用在mount指令中(上頁褐色部分,使用-o 選項)或/etc/fstab檔案中(第四個選項)。
sync    建立同步I/O,當對資料讀寫時,會同步寫入檔案系統。但因為同步,效率較差。
async    建立非同步I/O,一般使用這個。
auto    使用-a選項時會自動掛載的檔案系統。系統開機時會執行mount –a,也就是說,設定這個選項時,檔案系統便會在開機時被掛載。
noauto    與auto相反。
exec        允許分割區上所包含的程式可以被執行。
noexec    與exec相反
user        允許一般使用者掛載此檔案系統,但不允許一般使用者卸載。
users    允許一般使用者mount及umount此檔案系統。
nouser    一般使用者不可mount及umount此檔案系統。
ro        唯讀,與-r命令列選項相等。
rw        可讀寫,與-w命令列選項相等。
defaults    包含rw,exec,auto,nouser,async等。(用defaults就不用指定一堆)。

檔案系統類型:
以下的檔案系統類型可以用在mount指令中(上頁紅色部分,使用-t 選項)或/etc/fstab檔案中(第三個選項)。Linux包含的檔案系統類型非常之多,以下只列出最常用者:
ext4       標準linux檔案系統
vfat        一般windows的FAT16,FAT32均可在linux系統中指定為vfat檔案系統。
iso9660    光碟
nfs    network file system。遠端檔案系統。
swap    swap(虛擬記憶體)分割區。
cifs
auto