2010年1月24日 星期日

[PHP]欄位同mysql資料庫欄位即可順利新增(增加欄位比對,並將欄位參數化)

這一次的修改本物件的功能。
之前會發生如果表單傳入的name名稱多於資料庫欄位時,會造成資料存入錯誤。
雖然前一個版本加上手動排除多餘欄位,但不甚方便。
這一次更新的版本,新增name名稱與資料庫欄位判斷,會將資料庫沒有的欄位名稱排除。
如此就不會造成欄位不符而回應錯誤。
另外為了能夠支援不同型式的資料來源(get、post或是二者都接受),將不同的函式修正成一個參數型態。
物件方法:
$add_sql = new add_sql("資料庫名稱","資料來源")
//資料來源參數:post = $_POST,get = $_GET,request = $_REQUEST

使用範例1:(以支援$_POST為例)
require_once("class.add_sql.php");
$add_sql = new add_sql("table","post");
$add_sql->sql_save();

使用範例2:(以支援$_GET且額外插入資料為例)
require_once("class.add_sql.php");
$add_sql = new add_sql("table","get");
$add_data -> add_text("guestdate",date("Y-m-d H:i:s"));
$add_sql->sql_save();

物件程式:class.add_sql.php
class add_sql{
    function __construct($table,$PostData){
        $this->table = $table;
        $this->load_field();
        $this->PostData($PostData);
        
    }  
    
    function PostData($PostDataIndex){
      $postarray = array("post" => $_POST , "get" => $_GET , "request" => $_REQUEST);
      $this->SetPostData($postarray[$PostDataIndex]);
    }
    
    function SetPostData($PostData)
    {
        $this->PostData = $PostData;
        $this->dearray();
    }
    
    function load_field(){
        $sql = "SELECT * FROM {$this->table} LIMIT 0,1";
        $result = mysql_query($sql);
        $this->sqlfield = mysql_fetch_assoc($result); 
    }  
    
    function bool_field($keyword){
        foreach($this->sqlfield as $key => $value){
            if ($keyword == $key) return TRUE;
        }    
        return FALSE;
    }
    
    function dearray(){
        foreach($this->PostData as $key => $value){
            if ($this->bool_field($key)) {
                $this->add_text($key,$value);
                
            }  
        }
    }
    
    function add_text($add_field,$add_value){
        $this->field .= $add_field.",";
        $this->data .= "'".htmlentities($add_value,ENT_QUOTES,"utf-8")."',";
     }
  
    function sql_text(){
        $field = substr($this->field,0,strlen($this->field) -1);
        $data = substr($this->data,0,strlen($this->data) -1);
        $sql_stmt =  "INSERT INTO `".$this->table."` (".$field.") VALUES (".$data.")";
        return $sql_stmt;
    }
  
    function sql_save(){
        mysql_query($this->sql_text()) or die("NO Action");
    }  
}

沒有留言:

張貼留言