【问题标题】:Calling a function on form submit from within a class从类中调用表单提交上的函数
【发布时间】:2014-12-23 15:02:48
【问题描述】:

我目前正在构建一个定义了一些函数的类。第一个函数显示一个表单供用户填写一些属性:

function display_sheet_form($f=array())
{

    $count = (isset($f['task_title'])) ? count($f['task_title']) : 3;
    if ($count < 3) $count = 3;

    echo '<form name="add_sheet" id="dls-sus-modify-sheet" method="post" action="">';
    //some additional code here to display the form elements
    echo '<input type="hidden" name="mode" value="submitted" />';
    echo '<input type="submit" name="Submit" class="button-primary" value="'.esc_attr('Save').'" />';
    echo '</form>';
}

然后我有另一个功能要进行表单处理:

function modify_sheet_page()
{
    echo "in the modify sheet page";
    // Set mode vars
    $edit = (empty($_GET['sheet_id'])) ? false : true;
    $add = ($edit) ? false : true;
    $submitted = (isset($_POST['mode']) && $_POST['mode'] == 'submitted');
    $err = 0;

    // Process form if submitted
    if($submitted) {
    //process the form code
    }
}

如何在此类中将表单元素直接提交给该函数?

编辑:我包含了一个 Pastebin,所以你可以看到整个代码: http://pastebin.com/MWJXU1hB

【问题讨论】:

  • 不,你应该以某种方式调用该函数。
  • 在你显示的文件中,你需要检查一下,$_POST["mode"]是否不为空,如果不是,则其值为save$Class-&gt;modify_sheet_page()而不是尝试“如您所说,直接提交。
  • @lolka_bolka 不确定我是否理解,你能给我举个例子来说明你的意思吗?

标签: php


【解决方案1】:

简而言之:你不能。

但是自动化该过程的一个好方法是利用引导并将传入请求重新路由到适当的类/函数。

我提议引导,因为它是一个可重用的概念,并且在我看来是一种很好的做法。 您还可以管理整个应用程序中使用的类加载和变量。

【讨论】:

    【解决方案2】:

    也许这不是一个答案,但必须是代码格式,因为 OP 不理解我的评论。别人也说了,不能直接这么称呼。

    不要尝试这样做,而是在文件的和处放置一些代码行,以检查,我们显示。或者两者兼而有之。

    这是一个例子。基本上所有的classis都在单独的文件中,这只是一个演示:

    //Create the object
    $MyClass = new MyClass();
    
    //If form submitted
    if (!empty($_POST['modify']) && $_POST["modify"] == 'save') {
        //Validate the form
        if ($MyClass->validate_sheet_form()) {
            //Validation was success, update the data, and redirect if you want.
            $MyClass->modify_sheet_page();
            header("Location: somewhere.php");
            die();
        }
    }
    
    
    //Show error if we have.
    if (!empty($MyClass->errorMsg)) {
        echo '<div class="error">' . $MyClass->errorMsg ."</div>";
    }
    
    //Display.
    $MyClass->display_sheet_form();
    
    class MyClass {
    
        var $errorMsg = '';
    
        function display_sheet_form($f = array()) {
            //....
        }
    
        function modify_sheet_page() {
            //....
        }
    
        function validate_sheet_form() {
            //if something fail, set $this->error = "Error message"; 
            //and return false; otherwise, true.
            if (empty($_POST["username"])) {
                $this->errorMsg = "Username is required<br>";
            }
            //.... more validation
            if (!empty($this->errorMsg)) {
                return false;
            }
            return true;
        }
    
    }
    

    【讨论】:

      【解决方案3】:

      在第一个函数中,将表单的动作编辑到同一页面,然后首先调用该函数。 然后添加这段代码:

      if ($_SERVER ["REQUEST_METHOD "]==POST)
      {CALL SECOND FUNCTION }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多