首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在action页面上创建一个特定的函数来处理表单数据?

如何在action页面上创建一个特定的函数来处理表单数据?
EN

Stack Overflow用户
提问于 2018-06-03 22:49:12
回答 2查看 71关注 0票数 1

我有一个models.php页面,其中包含特定模型的表单规范。

models.php

代码语言:javascript
复制
$books = [
    ['Book Name', 'text' ],
    ['Author', 'text']
];
$vegetables = [
    ['Name', 'text'],
    ['Photo', 'file']
]

现在,该页面由一个admin.php页面访问,该页面根据给定的nameinput type生成适当的HTML form

我想填写表单并将数据发送到 handle.php 中,然后使用特定的函数处理数据,以便将数据填充到适当的表中。

handle.php

代码语言:javascript
复制
function books(){
    // this will fill the details into table of books.
    INSERT INTO BOOKS 
        name = $_POST['book_name']
        author $_POST['author']
}

function vegetables(){
    // this will fill the details into table of vegetables.
    INSERT INTO VEGETABLES 
        name = $_POST['book_name']
        photo = $_FILE['photo']
}

(如果有其他更好的方法,请注意,我会这样做并删除我的问题。)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-04 04:14:51

这是我的建议。正如评论中所说,这只是我做这些事情的方式,并不一定是每种情况下的最佳解决方案。

我有一个基本模型,它定义了所有模型需要共同拥有的所有方法。这是一个非常简单的版本:

代码语言:javascript
复制
class Model {

    public $modelName = 'default';
    public $id = null;
    private $fields = [];
    private $tableName = 'default';
    private $tableDefinition = [];
    private $idField = 'id';

    public function insert($dataset) {
       // do some database magic by using $this->fields, or $this->tableDefinition
       $sql = "INSERT into {$this->tableName} ...";
       ...
       return $id;
    }
    public function update($id, $dataset) {
        // do some more database magic by using $this->fields, or $this->tableDefinition
    }

    // many more methods. To get data, delete, sort, ..
    //...
}

现在每个模型都扩展了这个基本模型类,并设置了它的特定参数,甚至可能覆盖了一些方法或添加了一些特殊的方法:

代码语言:javascript
复制
class Books extends Model {
    public $modelName = 'book';
    private $fields = ['bookName','Author'];
    private $tableName = 'BOOKS';
    private $tableDefinition = [
            ['bookName','varchar'],
            ['Author','varchar']
    ];
    // private $idField = 'id'; // you can ommit that, if it's the default.
}

如果蔬菜的行为不同,你可以简单地覆盖一个方法:

代码语言:javascript
复制
class Vegetables extends Model {
    public $modelName = 'vegetable';
    // set all other properties...

    // override insert() for example
    public function insert($dataset) {
        // do something that doesn't comply with the standard procedure
    }
}

然后在handle.php中,你可以这样做:

代码语言:javascript
复制
<?php
$modelName = $request; // get it from your form, your url, ..
                       // & verify this model(file) exists.
$model = new $modelName();
$model->insert($dataSet);
票数 2
EN

Stack Overflow用户

发布于 2018-06-04 12:50:34

创建一个基本接口BaseModel.php,它将具有插入、更新和选择的基本签名

创建一个实现BaseModel类的派生类booksModel.php和vegetablesModel.php。

通过这种方式,您可以使代码具有可扩展性。如果有一些通用的功能,你可以将基类作为抽象类。

代码语言:javascript
复制
abstract class BaseModel {
    abstract function add($dataObject);
    abstract function get($dataObject);   
}

class BooksModel extends BaseModel {
    public function add($dataObject) {
        /* Implementation */
    }
    public function get($dataObject) {
        /* Implementation */
    }
}

class VegetableModel extends BaseModel {
    public function add($dataObject) {
        /* Implementation */
    }
    public function get($dataObject) {
        /* Implementation */
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50667635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档