2021年5月24日 星期一

PHP 限制字元數長短 ms_substr( ) 心得 -- 20210525

緣由:

因為想把冗長的新聞標題字數,限制在某個數字內,如下圖所示:





原始程式碼:

                        <?php echo $row_RecNew['n_title']; ?>


-----------------------------------------------------------------


備註:


採用 substr($string , $strat , $length) 函數 ,但擷取後的中文字元出現亂碼的情況。如下圖:

$string:原始的字串   

$start:開始擷取的位置

$length:擷取的字串長度


程式碼:

                  <?php echo substr($row_RecNews['n_title'],0,17); ?>







---------------------------------------------------------------------


最後採用 ms_substr($string , $strat , $length , $encoding) 函數

$encoding:放置判斷的編碼


最終修改後的程式碼:

                                <?php echo mb_substr($row_RecNews['n_title'],0,17,'utf-8'); ?>


所呈現的畫面:











2021年2月25日 星期四

在Windows 10中,安裝XAMPP,因Port80被占據無法啟動Apache伺服器 -- 20210226

 經由:

太久沒碰PHP了,最近想用PHP製作網站,但先決條件是把環境建置起來,於是想到XAMPP這套軟體,接下來就是這篇要介紹的如何建置簡易的開發環境。



步驟一、上網下載XAMPP套裝軟體,並且將它安裝。

網址:https://www.apachefriends.org/index.html


步驟二、Start啟動Apache伺服器後,發現失敗Port 80被占據,導致失敗。




























步驟三、查看Port 80被什麼佔據掉。

(方法一) 

直接點選「Netstat」鈕,就可查詢到是「PID:4 」、「Name:System」 佔據了Port 80。

















(方法二)

開啟「命令提示元」視窗,輸入 netstat - nao |find "0.0.0.0:80"









輸入tastlist /FI "PID eq 4"。也可看見「影像名稱:System」、「PID:4」 佔據了Port 80。










步驟四、開啟「執行」視窗,輸入 regedit










步驟五、找到「Start,並將它的值改成0,再重啟電腦。

※路徑:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP



















步驟六、再重新Start「Apache」,確認可正常啟動。


















參考網址:網址一網址二





2020年6月29日 星期一

MySQL(Timestamp的屬性)心得 -- 20200630

今天練習寫網站「點擊率」,結果在Update網頁的點擊率時,發現「張貼時間」欄位會自動更新目前的時間,於是爬文後才知道是因為MySQL內Timestamp屬性造成的。


簡單來說,預設timestamp屬性是「只要有值」 在同一筆資料只要新增/修改的時候,MySQL會自動幫你將「 timestamp型態的欄位寫入目前現在的時間

兩種屬性可提供調整使用:

自動初始化: 此欄位「寫入」資料時,自動將timestamp的欄位,寫入現在時間。

                          DEFAULT CURRENT_TMESTAMP(建立時,自動寫入時間)

自動更新:此欄位「修改」資料時,自動將timestamp的欄位,寫入現在時間。

                         ON UPDATE CURRENT_TIMESTAMP(更新時,自動寫入時間)


主要有下述 四種 設法/時機: (範例轉載自官方網站: MySQL 5.1 Reference Manual - TIMESTAMP Properties)
  • 自動初始化自動更新
    ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
  • 只做自動初始化 (建立時初始化, 更新時不修改時間)
    ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  • 只做自動更新 (建立時不做初始化動作)
    ts TIMESTAMP DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP
  • 全都不做(使用這個的話, 或許直接用 DATETIME 的型態 似乎比較方便?)
    ts TIMESTAMP DEFAULT 0

2012年7月19日 星期四

PHP+MySQL課程 -- 20120719

include 與 require 使用方法:

在PHP中使用上述兩個英文字母的話,都可將外部網頁內容載入!!

include 與 include_once的差異,在於後面有加-once的話,只能執行一次!!!

同理:require_once也只能執行一次!!



----------------假設以下語法可直接load入外部網頁:--------------------------------
舉例:

<?php
require_once ('0717-external.php')         //include '0717-external.php'
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文件</title>
</head>
<?php
printf('%s lives in %s<br>',$name,$country);
include '0717.html';
?>

<body>
</body>
</html>

-----------------------------------------------------------------------
網頁0717-external.php 裡面內容為:

<?php
$name='jacky';
$country='Taipei';

?>

-----------------------------------------------------------------------
網頁0717.html的內容為純文字檔!!

-----------------------------------------------------------------------


補充:20200519

include( )與require( )的區別:

include( )引入檔案時,如遇到錯誤會提示錯誤並繼續執行。

  • 一般在用時才會引入,通常是放在流程控制的處理區段,PHP指令碼在執行到它時,才會將檔案包含進來。

require( )引入檔案時,如遇到錯誤業會提示錯誤,但會終止程式的執行。

  • 一般放在PHP指令碼頁面的最前面,PHP在執行前就先讀入Require( )引入的檔案,檔案的內容會變成指令碼的一部分,一旦出現錯誤則立即退出程式。


include( )、require( )與include_once( )、require_once( )的區別:

  • include( )、require( )執行即包含檔案,不會對引入的檔案進行比較判斷,可能會出現重複包含的情況。
  • include_once( )、require_once( )在包含時會先判斷檔案是否,若已包含過,則不再包含檔案,這樣的引入檔案方式即可節省資源,又可避免重複定義的錯誤。








2012年7月17日 星期二

PHP+MySQL課程 -- 20120717

資料傳遞模式

GET          網址? 變數名稱=&變數名稱=&...
                                  a1   =  v1   &  a2  =  v2

                  如同:     array(a1 < = v1 , a2 <= v2.....)    

GET通常傳輸字串、數字,故速度比POST快!!
舉例:
--------------------------------------------------------------------------------------------
網頁A 程式碼,如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>網頁A</title>
</head>
<body>
<a href="網頁B.php?ax=100&bx=250">將資料傳送至網頁B</a>
</body>
</html>

--------------------------------------------------------------------------------------------
網頁B 程式碼,如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>網頁B</title>
</head>
<body>
<?php
printf('<li>%s</li><br><li>%s</li><br>',$_GET['ax'],$_GET['bx']);
var_export($_GET);
?>

</body>
</html>


結果:



  • 100 
  • 250
    array ( 'ax' => '100', 'bx' => '250', )

  •  --------------------------------------------------------------------------------

    POST  (一般都是傳送檔案、圖片....等,故傳送速度比GET慢!!)

    舉例:
    -----------------------------------------------------------------------
    網頁C程式碼,如下:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>網頁C</title>
    </head>
    <body>
    <form id="form1" name="form1" method="post" action="網頁D.php">
      <label for="ur">姓名:</label>
      <input type="text" name="ur" id="ur" />
      <input name="hide" type="hidden" value="1000" />
      <button type="submit">送出</button>
    </form>
    </body>
    </html>


    -----------------------------------------------------------------------
    網頁D程式碼,如下:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>網頁D</title>
    </head>
    <body>
    <?phpprintf('<li>%s</li><li>%s</li>',$_POST['ur'],$_POST['hide']);
    ?>
    </body>
    </html>


    2012年7月12日 星期四

    PHP+MySQL課程 -- 20120712

    判斷流程
    switch (被檢查物件){
    case ?:
        執行的工作
        break ;                 
    case ? :
        執行的工作
        break ;
    default :                    // 其餘都屬於此條件內
        執行的工作
    }

    問號表示:必對是否相同條件!!!

    ---------------------------------------
    舉例:

    <?php
    function 
    switch ($a){ 
    case 1:       
            echo '土象星座';
            break;

    case 2:       
            echo '水象星座';
            break; 

    case 3:    
         echo '火象星座';
         break;
    default:

         echo '風象星座';
        }

    }
    ?>

    <?php
    echo con(4);
    ?>

    結果:風象星座

    ----------------------------------------
    舉例:

    <?php
    function con($a){
    switch ($a){
     case 1:
            echo '土象星座';
            break;
     case 2:
            echo '水象星座';
            break;
     case 3:
           echo '火象星座';
         break;
     default:
           echo '風象星座';
        }
    }
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>無標題文件</title>
    </head>
    <body>

    <ol>                 //HTML語法
    <?php  
    $a=0;
    while (++$a<=4){
    ?>
    <li>                   //HTML語法
    <?php   
    echo con($a);
    ?>
    </li>                  //HTML語法
    <?php
     }
    ?>

    </body>
    </html>

    結果:
    1. 土象星座
    2. 水象星座
    3. 火象星座
    4. 風象星座
    --------------------------------------------------------
    循環流程:

    for ( e1 ; e2 ; e3 ) {
        執行的工作
    }

    e1  循環開始前執行一次
    e2  (boolean) 判斷是否重複循環
    e3  每次循環結尾執行

    --------------------------------------------
    舉例:

    <?php
    for($i=1;$i<=10;++$i){ 
    printf('%s<br>',$i);
     }
    ?>

    結果:
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    ---------------------------------
    舉例: (五張照片的名稱為ngm1s.jpg、ngm2s.jpg....ngm5.jpg)

    <?php$num=5;
    $no='images/ngm';
    $pic='s.jpg';
    ?>


    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>無標題文件</title>
    </head>
    <body>
    <ol>
    <?php
    for ($i=1;$i<=$num;++$i)
     {

    ?>
    <li>
    <img src=<?php echo $no.$i.$pic; ?> alt="">     //特別小心alt前面需空格,不然會產生破圖!!
    </li>
    <?php
     }
    ?>
    </ol>

    </body>
    </html>

    ---------------------------------------------------
    連續取出array資料

    foreach ( $arr  as  $k => $v )
    {                   
           陣列取出的值!!
      }

    -------------------------------------------------
    舉例:

    <?php
    $arr=array('Jacky'=>'tiller','Mary'=>'nurce');
    $arr['Mark']='teacher';
    ?>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>無標題文件</title>
    </head>
    <body>
    <ul>
    <?php
    foreach ($arr as $k => $v){
    printf('<li>%s is %s</li>',$k,$v);
     }

    ?>
    </ul>

    </body>
    </html>

    結果:



  • Jacky is tiller
  • Mary is nurce
  • Mark is teacher

  • ---------------------------------------------------

    2012年7月10日 星期二

    PHP+MySQL課程 -- 20120710

    判斷流程一:

    if  (boolean)
    {
    true  要執行的工作;
    }
    else
    {
    false 要執行的工作;
    }

    ----------------------------------------------------------
    $a == $b (a等於b)
    $a != $b  (a不等於b)
    $a >= $b (a大等於b)
    $a <= $b (a小等於b)
    $a > $b   (a大於b)
    $a < $b   (a小於b)
    ----------------------------------------------------------

    舉例:(PHP程式中,參雜HTML語法)

    <?php
    $a=32;
    if($a>=60){

    ?>
    <stonge>成績passed!!</stonge>      // HTML語法
    <?php
    }
    else
    {

    ?>
    <em>成績未達最低標準!!</em>     // HTML語法
    <?php
    }   
    ?>


     -------------------------------------------------------

    判斷流程二:

    if (boolean)
    {
    要執行的工作(true);
    }
    elseif
    {
    要執行的工作(ture);
    }
    esle
    {
    '其他'要執行的工作;
    }


    舉例:(PHP程式中,參雜HTML語法)

    <?php
    $b=88;
    if ($b>=90){

    ?>
    <strong>恭喜您拿[優]等!!</strong>    // HTML語法
    <?php
    }
    elseif($b>=80){

    ?>
    <strong>恭喜您拿[甲]等!!</strong>   // HTML語法
    <?php
    }
    else
    {

    ?>
    <strong><font color='red'>您拿了[乙]等以下!</font></strong>   // HTML語法
    <?php
    }
    ?>

    -----------------------------------------------------------------------------
    舉例:(function 與 return 與 array 與 ifelse..綜合用法)

    <?php
    $arr=array('name'=>'jacky','score'=>'78');
    function comment($a){
    if ($a>=90){
     return '優等';
    }
    elseif($a>=80){
     return '甲等';
    }
    else
    return '乙等';
    }
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>無標題文件</title>
    </head>

    <body>

    <table width="800" border="1" cellspacing="0" cellpadding="0">
      <tr>
        <th scope="col">姓名</th>
        <th scope="col">分數</th>
        <th scope="col">級等</th>
      </tr>
      <tr>
        <td align="center"><?php echo $arr['name']  ?></td>
        <td align="center"><?php echo $arr['score'] ?></td>
        <td align="center"><?php echo comment($arr['score'])?></td>
      </tr>
    </table>

    </body>
    </html>

    ----------------------------------------------------------------------------------

    循環流程:(迴圈loop)
    while (true)                                 →條件符合,繼續往下跑!
    true 繼續要執行的工作}         → 執行完畢後,將值再丟回 while判斷!

    舉例:

    <?php
    $i=1;
    while($i<=10)              
    {
     echo '<p>'.$i.'</p>';
     ++$i;                              //再將值丟回到while判斷}
    ?>