Flex SDK テスト4 BBS

expireしそうな有給を消化して作ってみました。
初心者の登竜門といえばBBSでしょうjk
rrdのデータも少しずつ増えて来てます。
もうちょっと短いスパンにすれば良かったな....

http://www.sepia-mind.com/node/25

思えば最初にPerlCGIを勉強する動機になったのも自分でBBSを作ってみたい!というものでした。
まわりにそういう事している人もいなかったので、本を探してみつけたのがコレ。

http://www.junkudo.co.jp/detail2.jsp?ID=0101858331

頭から最後まで全トレースしましたwこの本にはRESの機能実装が載ってなかったんですが、
気づけば自分で実装できる様になってましたね。自分が買った本の中でも最も価値があった本の一つです。

DBまわりのコードは久々に書いたので大分腕が鈍ってるのを感じました...。
SQLとかかなり忘れてるな。(まあselectくらいは空でかけますが)
pearMDB2はsingletonも実装されてるんですね。知らなかった。
デザインパターンJavaにハマってた頃に有名どこは触ってみましたが、
ほとんどexpireしてると思います。まあ使わないと忘れますね。一回やってると思いだすのは早いですが。

それはさておき。例によってコードを載せておきましょうかね。
ちょっとだけ長いので複数回にわけて個々に詳しく説明してみたいと思います。

まずはmxml




  
     10){
        Alert.show("nameは10字以内で入力してください");
      }else if(bbsMessage.text.length > 100) {
        Alert.show("messageは100字以内で入力してください");
      }else{
        bbsSend.send({
          "name":bbsName.text,
          "message":bbsMessage.text
        });
      }
    }

    private function succeed():void{
      bbsName.text = '';
      bbsMessage.text = '';
      bbsData.dataProvider=bbsSend.lastResult.item
      Alert.show("書き込み完了");
    }

    private function fail():void{
      Alert.show("エラー!");
    }
    ]]>
  

  
  

  
    
      
    
    
      
    
    
      
    
  

  
    
      
        
          
          
          
        
      
    
  



DBのテーブルはこんな感じ

USE bbs;
CREATE TABLE bbs (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  name VARCHAR(20) NOT NULL,
  message VARCHAR(200)NOT NULL,
  PRIMARY KEY(id)
);

php側はこんな感じ

add_message($name, $message);

  $records = $dao->get_messages();
  $xml = get_xml($records);
  header ("Content-Type: text/xml; charset=UTF-8");
  print $xml;
}else if(strcmp($do,'show') == 0) {
  $records = $dao->get_messages();
  $xml = get_xml($records);
  header ("Content-Type: text/xml; charset=UTF-8");
  print $xml;
}

// Function

function get_xml($records) {

  $xml = "\n";
  foreach($records as $record) {
    $name = $record{'name'};
    $message = $record{'message'};

$xml .= <<< EOD
  
    $name
    $message
  

EOD;
  }

  $xml .= "\n";

  return $xml;
}

function filtering_query($str) {
  strip_tags($str);
  htmlspecialchars($str);

  return $str;
}

// Class
class BbsDao {

  private $db;

  public function __construct() {
    $this->open();
  }

  public function __destruct() {
    $this->close();
  }

  //public
  public function get_messages() {
    $sql = 'SELECT * FROM bbs ORDER BY id DESC LIMIT 0,' . LIMIT;

    $res =& $this->db->query($sql);
    $records = array();
    while($row = $res->fetchRow(MDB2_FETCHMODE_ASSOC)) {
     $records[] = $row;
    }
    return $records;
  }

  public function add_message($name, $message) {
    $statement = $this->db->prepare('INSERT INTO bbs (name, message) VALUES (?,?)');
    $data = array($name, $message);
    $statement->execute($data);
    $statement->free();
  }

  //private
  private function open() {
    $this->db =& MDB2::connect(DSN);
    if (PEAR::isError($this->db)) {
      die($this->db->getMessage());
    }
  }

  private function close() {
    $this->db->disconnect();
  }
}

髪切りに行こうと思ってたけど美容院月曜お休み orz
昨日撮りにいった写真の整理でもするかぁ。