2012-06-27 25 views
2

我正在做一個PHP應用程序,測試了它的對象取向,因爲我正在嘗試學習OO而不是程序編程。使用PHP的帖子,並獲得一個表格到相同的頁面

基本上我有一個用戶可以使用系統預訂的課程列表,它們出現在用戶配置文件中。從配置文件中,我想要一個「刪除」鏈接旁邊的每個預訂課程,當點擊,刪除課程。

我必須爲此使用html表單嗎?我已經開始這樣做了,但看起來不對。我有一個名爲「delete_course」的函數,它可以完成我想要的工作,而我需要傳遞的是數據庫中的文章ID。所以...我的問題是...是否最好的做法是將ID以表單的形式發佈到帶有函數調用的頁面上?

如果這是最好的方法,最好是將它發佈到用戶所在的SAME(當前)頁面,或發佈到另一個頁面,比如說「cancel_course.php」?有什麼好處?

感謝

哦,順便說一句,我是比較新的PHP但做了大量JS的,所以我知道AJAX是一種更好的選擇,只是想學習PHP的:)

+1

請問你能提供相關的代碼片段嗎? – Adi

+0

從最初的描述的聲音你想要的是一種形式,但作爲@AdnanShammout已經問過你可以請張貼一些代碼 –

+0

是的,沒關係,我所有的代碼都在@ greg的答案中。排序感謝球員 – JamesG

回答

4

如果你想發佈在HTTP的變量,而不使用JavaScript,你將需要一個形式,你的HTML,隨着「後」的方法屬性。

每個刪除按鈕都可以包含數據庫中課程ID的值,這將使您很容易識別PHP中正在刪除的課程。

HTML:

<form method="post"> 
    <ul> 
     <li> 
      <h1>Learn how to sew course</h1> 
      <button type="submit" name="deleteCourse" value="1">Delete</button> 
     </li> 
     <li> 
      <h1>Learn how to knit course</h1> 
      <button type="submit" name="deleteCourse" value="2">Delete</button> 
     </li> 
</form> 

PHP:

if(!empty($_POST["deleteCourse"])) { 
    $courseList->deleteById($_POST["deleteCourse"]); 
} 
+1

是的,這就是我以前的樣子@Erwin Moller也給出了一個很好的例子,其中有一個鏈接發送GET信息,只是希望thios有點清晰感謝:) – JamesG

+0

代碼會在上面($ _ POST [「deleteCourse」] &&!empty($ _ POST [「deleteCourse」])'' – Adi

+0

@AdnanShammout這是不正確的,'empty()'檢查是否變量也被設置 - 未設置的變量被認爲是空的。 – Greg

2

如果我understoop正確,你有一些東西,每個東西都有它自己的刪除按鈕。

例如, 拉脫維亞語課程[刪除課程]

我覺得很簡單,那[刪除課程]將鏈接到同一頁面的GET參數,如,delete_course = $ ID。 然後

if (isset($_GET['delete_course'])) { 
    $class->delete_course($_GET['delete_course']); 
} 
+0

請不要通過你的直接進入方法考慮會發生什麼會發生在下面的url請求path_to_script.php?delete_course = 11獲取不是一個適當的方法來做到這一點。 –

+0

@AdnanShammout get會從網址中讀取參數,然後通過http://www.weberdev.com/get_example.php3?ExampleID=3859 –

+0

@AdnanShammout形式發佈數據,如果您不能看到問題湯姆迪克或哈利傳遞變量通過任何計算機的腳本將刪除數據,然後我不能幫助你:-( –

3

你有一些選項可供挑選,僅舉幾例:

1)通過網址:創建超鏈接,如:

http://www.example.com/myprofile.php?deleteCourseid=23 
http://www.example.com/myprofile.php?deleteCourseid=54 

etc 而從myprofile.php:

if (isset($_GET["deleteCourseid"]){ 
    $deleteme = (int)$_GET["deleteCourseid"]; 
    // Some query here. 
} 

2)通過POST的形式。同樣的邏輯適用。

我勸你也可以使用一些會話邏輯來識別用戶,所以你可以根據$ _GET [「deleteCourseid」]之類的東西$ _SESSION [「用戶id」]

刪除過程假設你有一些表所示: [PostgreSQL的]

CREATE tblusercourse(
    usercourseid SERIAL PRIMARY KEY, 
    userid INTEGER REFERENCES tblusers(userid), 
    courseid INTEGER REFERENCES tblcourse(courseid), 
) 
2
使用Ajax調用(你說你知道它很好),從配置文件中刪除的項目,所以你有兩個優點

    最好的選擇

  1. 用戶不必等待頁面加載:您可以假設一個樂觀模型並立即從DOM中刪除項目,並且僅註冊失敗回調以恢復HTML元素,並在出現問題時通知用戶
  2. 在服務器帶寬(小)儲蓄 - 是的,這是一個很小的優化,我承認:P

但是,因爲你的狀態,你是新來的PHP,我最大的建議是不要使用純PHP文件來做到這一點有些事情,特別是如果你需要(如你應該)一個數據庫。這樣你可以學習不好的abhits(如使用mysql擴展函數instead of PDO),而且這個知識體系既不是真正面向對象的,也不能用於現實生活中的應用程序。

現在,PHP開發人員(如Python和Ruby)使用框架來構建他們的應用程序。這些框架通常提供從數據庫到PHP代碼的OR映射,並讓您編寫真正的OO代碼,由於MVC範例,也更容易維護。

大部分這些框架都是開源的,所以你可以通過查看代碼來學習PHP的東西。我個人推薦CakePHP

相關問題