之前會發生如果表單傳入的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"); } }
沒有留言:
張貼留言