我目前正在构建一个在其中定义了一些函数的类。第一个函数显示一个表单,供用户填写一些属性:
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
答案 0 :(得分:2)
简而言之:你不能。
但是,自动化该过程的一个好方法是使用引导并将传入的请求重新路由到适当的类/函数。
我建议引导,因为它是一个可重复使用的概念,在我看来是一个很好的做法。 您还可以管理整个应用程序中使用的类加载和变量。
答案 1 :(得分:1)
也许这不是一个答案,但需要对代码格式化,因为OP不理解我的评论。正如其他人所说,它不能直接称之为。
不要试图这样做,而是在文件和文件上放置一些代码,以便检查,显示我们。 Alternativaly两个。
这是一个例子。基本上所有的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;
}
}
答案 2 :(得分:0)
在第一个函数中,将表单的操作编辑到同一页面,然后首先调用该函数。 然后添加以下代码:
if ($_SERVER ["REQUEST_METHOD "]==POST)
{CALL SECOND FUNCTION }