之前會發生如果表單傳入的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");
}
}

沒有留言:
張貼留言