2014-12-23 5 views
0

В настоящее время я создаю класс, который имеет определенные в нем функции. Первая функция отображает форму для пользователя, чтобы заполнить некоторые атрибуты:Вызов функции в форме submit из класса

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 
    } 
} 

Как я могу иметь элементы формы быть представленным непосредственно этой функции в этом классе?

EDIT: Я включил Pastebin, так что вы можете увидеть весь код: http://pastebin.com/MWJXU1hB

+0

Нет, вам следует как-то вызвать функцию. – SheperdOfFire

+0

В вашем файле, где вы показываете, вам нужно проверить, что '$ _POST [" mode "]' не пуст, а если нет, а его значение 'save'' '$ Class-> modify_sheet_page()' вместо того, чтобы пытаться «представить напрямую», как вы упомянули. – vaso123

+0

@lolka_bolka Не уверен, что я понимаю, не могли бы вы привести мне пример того, что вы имеете в виду? – user1048676

ответ

1

Может быть, это не ответ, но нужно быть, чтобы форматирование кода, так как OP не понимает мой комментарий. Как говорят и другие, его нельзя назвать прямым.

Вместо того, чтобы пытаться это сделать, поместите некоторую строку кодов в файл и из файла, чтобы проверить, сдвинуть и отобразить. Альтернативно.

Вот пример. В основном все Классис в отдельных файлов, это просто демонстрация:

//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; 
    } 

} 
1

Короче говоря, вы не можете.

Но хорошим способом автоматизации процесса является использование начальной загрузки и перенаправление входящих запросов на соответствующие классы/функции.

Я предлагаю загрузку, потому что это многоразовая концепция и, на мой взгляд, хорошая практика. Вы можете дополнительно управлять загрузкой классов и переменными, используемыми во всем приложении.

0

В первой функции, изменить действие формы на одной странице, то сначала вызвать эту функцию. Затем добавьте этот код:

if ($_SERVER ["REQUEST_METHOD "]==POST) 
{CALL SECOND FUNCTION } 
Смежные вопросы