2012-05-21 50 views
1

我想將我的PHP文件整合到一個普通的類文件中,但我不確定如何調用函數而不是.php頁面。我怎樣才能在我的HTML頁面的表單部分調用sendEmail()?從行動表單調用PHP函數


HMTL 
<form action="form_class.php" id="frmAirport" method="post"> 
Full Name: <span style="white-space: pre;"> 
</span><input name="name" type="text" /><br /><br /> 
Email Address: <input name="email" type="text" /><br /><br /> 
Subject: <span style="white-space: pre;">  
</span><input name="subject" type="text" /><br /><br /> 
<textarea id="txtComments" cols="30" rows="10">Comments</textarea><br /> 
<input type="submit" value="Send" /> 
</form> 

<?php 
function addPerson() { 
//do stuff here 
} 

function sendEmail() { 
//do some stuff here 

} 
?> 
+0

你來自一個asp.net webforms背景,是不是:-) –

+0

是的,你怎麼能告訴?這是一個艱難的調整時間 – tmhenson

+0

我可以告訴,因爲你期待/希望你的HTML模板和你的「代碼隱藏」之間的緊密關係。 –

回答

2

您不能直接調用PHP函數。但是,如果php文件被格式化爲如何在這裏顯示只有兩個函數,您可以通過一個標誌作爲POST字段,並有一個邏輯塊根據該標誌確定哪個函數調用。這並不理想,但它適用於您的目的。但是,這會強制刷新頁面,並且在函數返回後可能不得不加載其他頁面,因此您可能只需將其實現爲ajax調用以避免頁面刷新。

編輯根據您的評論(使用jQuery阿賈克斯):

我使用的是阿賈克斯()jQuery的功能。我的意圖創建一個包含不同html表單的多個函數的php文件。 - tmhenson

那麼在這種情況下,您可以讓您的文件包含邏輯塊,以將請求「路由」到正確的函數並最終返​​回結果。

我會嘗試基於一些簡單的jQuery提供您想要做的選項。假設你有這樣的事情:

Java腳本:

$("#button1").click(function(e){ 
    e.preventDefault(); // prevents submit event if button is a submit 
    ajax_route('ap'); 
}); 
$("#button2").click(function(e){ 
    e.preventDefault(); // prevents submit event if button is a submit 
    ajax_route('se'); 
}); 

function ajax_route(action_requested){ 
    $.post("ajax_handler.php", {action : action_requested}, function(data){ 
     if (data.length>0){ 
      alert("Hoorah! Completed the action requested: "+action_requested); 
     } 
    }) 
} 

PHP(內ajax_handler.php)

<?php 
// make sure u have an action to take 
if(isset($_POST['action']) 
    switch($_POST['action']){ 
     case 'ap': addPerson(); break; 
     case 'se': sendEmail(); break; 
     default: break; 
    } 
} 

function addPerson() { 
    //do stuff here 
} 

function sendEmail() { 
    //do some stuff here 
} 
?> 
+0

我正在使用.ajax()jQuery函數。我的意圖創建一個包含不同html表單的多個函數的php文件。 – tmhenson

+0

請根據此信息查看我的更新答案。 – EmmanuelG

+0

真棒,這是我正在尋找。 – tmhenson

0

你不能。 PHP僅在服務器上運行。您可以使用JavaScript AJAX調用來調用服務器上的php腳本,或使用常規表單提交,但直接從客戶端html調用特定的PHP函數?不可能。

+0

這是否意味着我有我需要爲每個HTML表單創建一個單獨的PHP文件?我試圖避免在我的網站中爲每個表單創建一個新的.php文件。 – tmhenson

+0

你可以,但還有其他方法可以去看看MVC設計模式,如果你想要一個「單一」的PHP文件。 –

0

我不知道如果我uderstand權利,但調用函數/方法你可以使用隱藏的輸入:

<!-- form --> 
<input type="hidden" name="action" value="sendEmail" /> 

// handle file 
<?php 
$actionObject = new Actions(); 
if (method_exists($actionObject, $_POST['action'])) { 
    $actionObject->{$_POST['action']}; 
} 
?> 

AddPerson和sendEmail不聽起來應該是一個方法類。嘗試僅使用與女巫相關的方法來使用類。要調用方法,可以將其定義爲靜態,或者必須創建類的實例,然後調用方法。