我目前正在创建一个类来处理我的所有表单数据,然后将其放入数据库以备将来使用。
目前在我的类构造函数中,当我从POST构造变量时,我会单独使用isset()函数。
function __construct()
{
if (isset($_POST['first_name']))
{
$this->first_name = $_POST['first_name'];
}
else
{
$this->first_name = "NULL";
}
}
虽然这个例子只适用于一个变量,但我在我的php应用程序中为另外一个变量做了这个。
正如古老的谚语所说:“你不能重复代码”。
所以我试图在我的类中创建一个能够处理所有变量的成员函数,比如get / set函数。
因此,在我的构造函数中,我需要做的就是:
function __construct()
{
//first parameter is the member variable to be set, second parameter is the element name that the value will be POST from
$firstname = $this->setter($firstname, "first_name");
}
//what do I put here?
function setter(first parameter, second parameter)
{
//checks the post variable has been set
if ( isset($_POST[second_parameter]))
return $_POST['second_parameter'];
else
return "NULL";
}
有人可以指出我正确的方向,或使用代码示例。
我不确定的方面是如何设置函数以使用通用句柄处理两个参数?
谢谢!
答案 0 :(得分:1)
我希望我不会误会 - 这是你的意思吗?
function __construct() {
$firstname = $this->setter("first_name");
}
function setter($postKey) {
if (isset($_POST[$postKey])) {
return $_POST[$postKey];
}
return NULL;
}
编辑:
如果你想设置类属性,那怎么样?
function __construct() {
$this->setter("first_name", "firstName"); // Post key, class property
}
function setter($postKey, $classProperty) {
if (isset($_POST[$postKey])) {
return $this->{$classProperty} = $_POST[$postKey];
}
return $this->{$classProperty} = NULL;
}
答案 1 :(得分:0)
首先,这是一个sytax错误(我想你知道)
function setter(first parameter, second parameter)
此外,这应该发出警告,并导致其他行为,而不是你想要的
isset($_POST[second_parameter]
你正在使用一个未定义的常量,在警告评估字符串“second_parameter”之后,你应该使用变量
此外,您在使用字符串而不是变量:
return $_POST['second_parameter'];
另一个问题是您返回值,而您没有将它们设置为类中的成员
if ( isset($_POST[second_parameter]))
return $_POST['second_parameter'];
else
return "NULL";
所以也许像是
function setter($first_parameter, $second_parameter)
{
//checks the post variable has been set
if ( isset($_POST[$second_parameter]))
{
$this->$first_parameter = $_POST[$second_parameter];
}
else
{
$this->$first_parameter = NULL;
}
}
可能更接近您的需求
答案 2 :(得分:0)
它是一个冗长的,但它将有助于确定..我描述所有的功能,并通过一个常见的lib文件添加。
课堂电话: <?php
if(isset($_POST) && isset ($_POST["form_submit"])){
$valArr=array("first name"=>$_POST['first_name '],"2nd paremeter"=>$_POST['2nd value']..and more);
$per_obj = new Performance();
$per_obj->addPreformance($valArr, "employee_performance");
}
?>
员工绩效类页面:
<?php
class Performance extends DataAccess{
var $db_obj = null;
public function __construct() {
$this->db_obj = new DataAccess();
}
public function addPreformance($key_values = array(), $table = null) {
$this->db_obj->table_name = $table;
$this->db_obj->addRecord($key_values);
$msg=$this->db_obj->msg;
header("Location: performance.php?msg=$msg");
}
}
?>
常用功能:
function addRecord($key_values)
{
$cols="";
$vals="";
foreach($key_values as $key=>$value)
{
if ($key!="submit" and $key!="PHPSESSID" and $key!="image_name" and $key!="submit_button" and $key!="ext" and $key!="ext2" and $key!="img_name" and $key!="mode" and $value!="" and $key!="gpl" and $key!="ip1" and $key!="ip2" and $key!="ip3" and $key!="ip4"){
$cols .= "`".$key."`,";
is_string($value)? $vals .= "'".addslashes($value)."'," : $vals .= "'".$value."',";
}
}
$cols = substr($cols, 0, -1);
$vals = substr($vals, 0, -1);
$insert_qry="insert into ". $this->table_name ."(". $cols .") values(". $vals .")";
$r=mysql_query($insert_qry);
$this->msg = (!$r) ? f_add_msg : s_add_msg;
return $r;
}
答案 3 :(得分:0)
这就是我可能会做的事情。
class Person {
function __construct(){
$keystomatch = array("fname", "lname", "addr1", "addr2");
foreach($_POST as $k => $v){
if(!in_array($k,$keystomatch)) continue;
$this->$k = $v;
}
foreach($keystomatch as $p)
if(!isset($this->$p)) $this->$p = "NULL";
}
}