PHP 小技巧

技巧一:測試程式碼有沒有成功

$result=mysql_query($sql,$link) or die (mysql_error());
$row=mysql_fetch_assoc($result) or die (mysql_error());

技巧二:fwrite 沒東西

$handle_language = fopen("xml/language.xml", "w");
fwrite($handle_language,$xml_language);
fclose($handle_language);

解決方法:FTP上的資料夾權限設成 777
「包含子目錄」記得勾選
子選項選擇「套用到所有檔案與目錄」。

技巧三:讓系統判斷字為該參數而不是字串

echo($i);
echo(\"$i\");

技巧四:建立多層結構資料夾(第三個參數 (recursive) 值為 true)

$sstructure="./folder1/folder2/folder3";
mkdir($sstructure,0777,true)

MySQL 小技巧

SQL 語法

範例一:查詢 table 的總列數

SELECT count(*) FROM `資料表名`;

範例二:隨機選取 recognizeView 資料表裡面 5 筆資料

SELECT * FROM `recognizeView` ORDER BY RAND() LIMIT 5;

範例三:指定多重資料範圍

SELECT * FROM `wordView` WHERE `languageId` ="99" AND `dialectId` ="99";

範例四:複製欄位資料到新欄位 (欄位互換時可用)

UPDATE `category` SET `fieldId2`= `fieldId`;

範例五:取得查詢結果的數量

SELECT count(*) FROM `wordView` WHERE `languageId` ="99";

問題解決方法

問題一
Can not modify more than one base table through a join view ‘pqwasan_junior.dialogueView’
解決一
把 update 的目標資料表從 view 表改成原始資料表 (e.g. dialohueView > dialogue)

小技巧:
1. 更改資料表欄位前記得先把他的 view 表刪掉, 不然有機會以後都刪不掉
2. 注意 $_get 的底線 ( e.g. $get > $_get )
3. echo 出亂碼時記得檢查 mysql 的預設語言是不是 utf8_general_ci

MS-DOS 小技巧

小技巧一:rename 的新路徑參數只能有檔名, 不能有其他路徑, 否則會出現「命令語法不正確。」

RENAME "..\..\student\sound\1\1pictureTalk\1_8.mp3" "008_1_8.mp3"

小技巧二:中文出現亂碼時把編碼改成 big5


關於 Blogger CSS

取消圖片外框 ( 把會影響到的都 remark 掉 )
.post-body img, .post-body .tr-caption-container, .Profile img, .Image img, .BlogList .item-thumbnail img
{
/*padding: 5px;*/
background: transparent;
/*-moz-box-shadow: 1px 1px 5px rgba(0, 0, 0, .5);*/
/*-webkit-box-shadow: 1px 1px 5px rgba(0, 0, 0, .5);*/
/*-goog-ms-box-shadow: 1px 1px 5px rgba(0, 0, 0, .5);*/
/*box-shadow: 1px 1px 5px rgba(0, 0, 0, .5);*/
}

關於外部類別

若是一直出現 1172: 找不到定義 fl.controls.dataGridClasses。之類的錯誤的話

可以試著把組件拉到主場景上然後再刪掉該組件, 讓元件庫裡面有該組件會用到的元件即可

主場景
import Code.MicrophoneManager;
var MM:MicrophoneManager=new MicrophoneManager();
// 記得要把 MM 丟上舞台才會出現, 若沒有 addChild 就看不到
this.addChild(MM);

載入進度 ProgressEvent

 

package
{
  import flash.display.*;
  import flash.events.*;
  import flash.net.*;
  public class ProgressBar_Example extends Sprite
  {
    private var loader:Loader=new Loader;
    private var path:String="test.jpg";
    public function ProgressBar_Example()
    {
      // 載入時
      loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,onProgress);
      
      // 載完時
      loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);
      
      // 實體化
      addChild(loader);
      
      // 載入檔案
      loader.load(new URLRequest(path));
    }
    
    // 載入時

    private function onProgress(evt:ProgressEvent):void
    {
      // 已經載入的 bytes 量
      var loaded:Number = evt.bytesLoaded;
      
      // 需要載入的 bytes 量
      var total:Number = evt.bytesTotal;
      
      // 載入百分比
      var percentage:Number = Math.floor(loaded / total * 100);
      
      trace("讀取進度 : "+loaded + "/" +total + " 讀取百分比:"+percentage+" %");
    }
    
    // 載完時

    private function onComplete(evt:Event):void
    {
      trace("讀取完成");
    }
  }
}

 

ComboBox 欄位與下拉選單的文字設定

假如說我今天要修改 ComboBox 裡面的文字格式要怎麼辦呢 ?
試試以下的方法吧:

import flash.text.TextFormat;

var TF:TextFormat = new TextFormat();
TF.size = 12; // 其他文字的格式設定也是依此類推...

// 設定 ComboBox 那個欄位的字 <註一>
ComboBox_cb.setStyle("textFormat",TF);

// 設定 ComboBox 開啟後的選單
ComboBox_cb.dropdown.setRendererStyle("textFormat",TF);

————————————————————————————————

註一:
這邊原本是用

ComboBox_cb.textField.setStyle("textFormat",TF);
但很容易就變回原形了
所以直接改成下面這樣就沒問題了

ComboBox_cb.setStyle("textFormat",TF);

文字欄位的文字新增位置

假如說我們今天有一段文字想加入原本的文字裡,可能會有下列情況

  • 加在前面
  • 加在後面
以下分別針對各種不同的情況做說明:

首先先設定好環境

package
{
  import flash.display.Sprite;
  import flash.display.Stage;
  import flash.text.*;
  import flash.events.*;
  public class TextTest extends Sprite
  {
    public function TextTest()
    {
      Button_1_btn.addEventListener(MouseEvent.CLICK,onClick);
      Button_2_btn.addEventListener(MouseEvent.CLICK,onClick);
    }
    public function onClick(evt:MouseEvent):void
    {
      switch (evt.target.name)
      {
        case "Button_1_btn" :
          output_txt.text=input_txt.text+"\n"+output_txt.text;
          break;
        case "Button_2_btn" :
          output_txt.appendText(input_txt.text+"\n");
          break;
      }
    }
  }
}

使用方法:
  在上面的輸入欄位輸入文字
  然後在右邊的按鈕選擇動作
  下面的輸出欄位會顯示文字

替代 IOErrorEvent 事件中 errorId 的方法

因為 errorId 只能在 Adobe AIR 裡面用
所以如果想知道
errorId 的話可以用下面的方法來做:

theError_ldr.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
function ioErrorHandler(evt:IOErrorEvent):void
{
  var errorTargetName:String=evt.target.name;
  // trace(evt.target.name) >>> theError_ldr
  var defaultURL:String="Picture/System/sample.jpg";
  var errorId:String=evt.text.slice(7,11);

  /*
    trace(evt.text); 的話會出現
    Error #2035: 找不到 URL。
    URL: file:///D|/工作室/0031%5F線上測驗/student/Picture/99/20-1.jpg

    這個時候我們取從第 7 個字後開始到第 11 個字結束
    也就是 Error #2035: 找不到 URL。...
    剛好他就是我們要的 ID
    這樣一來就可以針對 errorID 用 switch 來判斷各種不同的錯誤要做哪些事情了
  */

  switch (errorId)
  {
    case "2035" :
      trace("錯誤代碼是 : "+errorId);
      pictureRequest.url=defaultURL;
      this[errorTargetName].load(pictureRequest);
      break;
  }
}