2011年5月5日

[AS3.0]初體驗紀錄_雜(百寶箱)

物件name.addEventListener(Event.ENTER_FRAME, function_name);
functoin function_name(event:Event):void {
 ..............
}


function 函數名(參數1:資料型態,參數2:資料行態,.....):傳回值資料型態{ }
若沒有指定傳回值則為void


====================================================================
EventListerner事件監聽器;接收事件時addEventListener();刪除時removeEventListerner();
my_mc.addEventListener(MouseEvent.ROLL_OVER, mouseStateHandler);
my_mc.addEventListener(MouseEvent.ROLL_OUT, mouseStateHandler);
my_mc.addEventListener(MouseEvent.CLICK, clickHandler);
function mouseStateHandler(event:MouseEvent):void {
 switch (event.type) {
  case MouseEvent.ROLL_OVER :
   output_txt.text = "ROLL_OVER!";
   break;
  case MouseEvent.ROLL_OUT :
   output_txt.text = "ROLL_OUT!";
   break;
 }
}
function clickHandler(event:MouseEvent):void {
 output_txt.text = "";
 my_mc.removeEventListener(MouseEvent.ROLL_OVER, mouseStateHandler);
 my_mc.removeEventListener(MouseEvent.ROLL_OUT, mouseStateHandler);
 my_mc.removeEventListener(MouseEvent.CLICK, clickHandler);
}




==================================================================
檢查事件監聽器是否已登錄
mc.hasEventListener(Event.ENTER_FRAME)
檢查事件目標(其實就是物件)
event.target (指物件裡的零件)
event.currentTarget (指物件)
  該屬性有x,y,width,height,name........

==================================================================
Flash Player動態/非動態
指的是是否焦點在此視窗上
(運用上像Funtown的牌桌,一離開視窗就會沒音樂,但一點選又繼續播放)
my_mc.addEventListerner(event.ACTIVATE, function_name1);
my_mc.addEventListerner(event.DEACTIVATE, function_name2);
主要就是如果現在player是在焦點上就會做function_name1的事;不是就會function_name2


==================================================================
透明度&顯不顯示
mcStar.alpha = 1 (全亮) ~ 0 (透明);
mcStar.visible = true ; false;
要提取成文字時String(mcStar.alpha);, String(mcStar.visible);

==================================================================
/* 阿斗自習 */
三個物件: inText,outText,myBtn
var newURL:String = "http://www.yahoo.com.tw";
myBtn.addEventListener(MouseEvent.CLICK, gotheURL);
function gotheURL(event:MouseEvent):void{
 var adobeURL:URLRequest = new URLRequest(newURL);
 navigateToURL(adobeURL);
}

inText.addEventListener(TextEvent.TEXT_INPUT, changeURL);
function changeURL(item:TextEvent):void{
 if(item.text == ";"){
  newURL = "http://";
 } else {
  newURL += item.text;
 }
 outText.text = "New URL:" + newURL;
}


自行輸入想要的URL,按下Btn就會連結!!
==================================================================

[AS3.0]初體驗紀錄_如何匯入import as檔?

雖然這問題很基礎,但一開始還真是不知如何做起

網友大部份都直接說寫成另一個as檔

但我資質欠佳還是不懂是怎麼運作


通常會Flash的朋友都會一點AS,就是在影格裡加上action

影格上會出現個a的標示,直接在fla匯出swf就ok了~

但如何把swf和as兩者分開呢?因為這樣對程式開發者而言比較好維護,不用老是要打開fla來修



有位網友他把import as寫的很清楚

1.先有一個ShapeExample.as

2.在Flash的as裡(即fla檔中影格上的a)寫上


import ShapeExample;
var shape:ShapeExample = new ShapeExample;
addChild(shape);



在此,我測試了好幾遍都不行,原因可能是上面用法是AS2
於是用以下寫法就ok了

include "ShapeExample.as";

##### 2011.5.6 #####
AS中使用MovieClip類別,如何匯入MovieClip?
import flash.display.MovieClip;
import flash.display.*;

##### 2011.5.16 #####
了解網友為什麼會這樣寫了
import ShapeExample;
var shape:ShapeExample = new ShapeExample;
addChild(shape);


ShapeExample指的是已經包裝好的package
package{
  public class ShapeExample {
    ...........
  }
}
所以才會用import!!
詳請看[AS3.0]初體驗紀錄_基礎code

2011年4月2日

[HTML] Mobile META Tags指定畫面解析度

手機螢幕總是大大小小規格不一
在IE上呈現的畫面到了smart手機上..............畫面實在小不拉機
這時只要在META多這行
<meta name="viewport" content="width={$ScreenWidth}" />
即可依照你$ScreenWidth的大小而有多大的畫面寬度

2011年4月1日

[PHP] SQL injection 資料隱碼攻擊

資料隱碼:

$value = $_get['f_value'];
$sql = "select * from a where f='$value'";
echo $sql;

大部份的programmer會把user輸入的參數照單全收的放進$value
hacker利用這特點,不會依照一般user輸入值
他可以將f_value的內容輸入為
' or '1' = '1
按照以上他給的值帶進最上面的語法中你會發現
$sql = "select * from a where f='' or '1' = '1'";
於是,整個a的資料都洩露光光了
這種資料隱碼的攻擊運用還有很多
在MSSQL裡,若是DB權限沒有管制而開至dbowner
它可以埋code下 'exec master ..xp_cmdshell 'net user test testpass/ADD'--
如此一來他現在有一個test的使用者和testpass的密碼..........................

解決的辦法:
php.ini裡有一個magic_quotes_gpc,若是值訂為OFF,則PHP就不會在敏感的字元前加上反斜線(\)
因為user輸入的值可能帶有敏感字元如單引號,如此就會導致SQL injection漏洞
在此可以用addslashes()函數來解決,它會自動在敏感字元前加反斜線
但是昨為一個開發者,不會知道環境變數是off還是on
get_magic_quotes_gpc()可以了解此狀況,因此產生以下function


function quotes($content){
if(!get_magic_quotes_gpc()){
if(is_array($content)){ //檢查是否為陣列,若是的話用foreach全部解決
foreach($content as $key => $value){
$content[$key] = addslashes($value);
}
}else{
addslashes($content);
}
}else{
//magic_quotes_gpc=on,不處理
}
return $content;
}


回到我們一開始的code,就可以寫成

$value = quotes($_get['f_value']);
$sql = "select * from a where f='$value'";
echo $sql;


2011年3月24日

[JavaScript]window.location.href和window.location.replace的區別

有3個jsp頁面(1.jsp, 2.jsp, 3.jsp),進系統默認的是1.jsp ,當我進入2.jsp的時候, 2.jsp裡面用window.location.replace("3.jsp");與用window.location.href("3.jsp");從用戶界面來看是沒有什麼區別的,但是當3.jsp頁面有一個「返回」按鈕,調用window.history.go(-1);wondow.history.back();方法的時候,一點這個返回按鈕就要返回2.jsp頁面的話,區別就出來了。

例子:1.html (放form,給user填資料,送出到2.jsp) ; 2.jsp (get user填的資料並處理完後,網頁轉向3.jsp) ; 3.jsp (剛剛2.jsp轉向的動作不同影響按"上一頁"的不一樣)

若是2.jsp 用window.location.replace("3.jsp") 那麼在3.jsp上按上一頁會變成1.jsp

若是2.jsp 用window.location.href("3.jsp") 那麼在3.jsp上按上一頁會變成2.jsp (沒錯~它又會再處理一次並且轉向3.jsp)


上一頁亦可用window.history.go(-1) ; window.history.back();

2011年2月23日

[PHP] big5轉utf-8被吃字的問題(mb_convert_encoding)

文字轉碼都習慣用iconv(),終於解決掉「許蓋功」問題卻又發現會吃掉字
例如宏碁的碁,雖然也找到方式//TRANSLIT//IGNORE去處理,但終究沒有正確顯示「碁」
使用者可不會這樣放過你

php有提供一個方法叫mbstring
首先必須在php.ini
將 extension=php_mbstring.dll打開,並重開apache

接下來轉碼的方式
mb_convert_encoding(要被轉的字串,'目標碼','原來編碼');

相關Blogger: [PHP]iconv轉碼發生被截字的問題

[PHP][Smarty] 安裝smartySOP

1.下載smarty檔,解開並放在php include夾下
2.Smarty-3.x.x資料夾下可看見
    demo資料夾------->將此夾放在預設網站下
    libs資料夾------->將裡面內容放在include/class/Smarty/,其中有兩個資料夾及Smarty.class.php就是smarty引擎
  
3.demo/config.php
    <?php
        include "class/Smarty/Smarty.class.php";
        define('__SITE_ROOT','D:/PHPWeb/demo');// 最後沒有斜線
        $tpl = new Smarty();
        $tpl->template_dir = __SITE_ROOT . "/templates/";
        $tpl->compile_dir = __SITE_ROOT . "/templates_c/";
        $tpl->config_dir = __SITE_ROOT . "/configs/";
        $tpl->cache_dir = __SITE_ROOT . "/cache/";
        $tpl->left_delimiter = '<{';
        $tpl->right_delimiter = '}>';
    ?> 

4.demo/templates/test.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=big5">
<title><{$title}></title>
</head>
<body>
<{$content}>
</body>
</html>

5.demo/index.php

<?php
    require "config.php";
    $tpl->assign("title", "測試用的網頁標題");
    $tpl->assign("content", "測試用的網頁內容");

    $tpl->display('test.html');
?>


6.IE 查看127.0.0.1/demo/index.php 若網頁出現「測試用的網頁內容」則表示成功

【註】
紅色標示:表示需要記得修改的內容
藍色標示:Smarty架構的重點!


====================================================
有趣的smarty,安裝只要copy需要的資料夾即可馬上使用!

設計各式樣本在templates下,只要每頁都有{$content}, {$title}
就可由index.php裡去控制要顯示那一種樣本(html)
另外
也能從index.php去控制每次秀的內容不同
例 if(早上) { $tpl->assign("content", "早安"); } else {  $tpl->assign("content", "晚安"); } 之類運用











2011年1月9日

[PHP] php.ini中文解說版

今天安裝IIS+mysql+php 花了我四個小時(真的太久沒碰了啦~)
專案一點進展都沒有
都是因為free server的後端連不上, 真是悶透我了~
以下這篇ini還真是實用!!

2010年12月14日

[PHP] 特殊XML解讀範例

今天遇到一個特別XML

<?xml version="1.0" encoding="utf-8" ?>
<root>
  <row sid="1234" n="AAA" dt="20101214" />
</root>

解讀方式
$doc = new DOMDocument();
$doc->formatOutput = true;
$doc->loadXML("以上那段XML字串");


$x = $doc->documentElement;
foreach($x->childNodes AS $item){
  //print $item->nodeName."=".$item->nodeValue."<BR>";
  foreach($item->attributes AS $row){
    print $row->name ."=". $row->value."<BR>"
  }
}

JavaScript方式(待.......)

[PHP] XML DOM物件

PHP有DOM物件可以專門用來處理XML文件
但佔用的記憶體量較大,不太適合處理太大的XML文件

windows版本DOM模組已預設有效
linux則還要另外做一些準備設定