2014-10-08 57 views
0

我有一個任意數量行的HTML表格,每行有4列。這個想法是讓用戶編輯這些行中的任何一行然後保存結果。這些更改應該保存到數據庫中。但我有幾個問題。如何提交和處理表格中的值

我發現了一些帖子在stackoverflow指示你應該如何處理這個,但沒有在我的情況下完全有用。這是用戶編輯我的表時的樣子(儘管我現在只有一行,可能有幾個)。

my table http://oi58.tinypic.com/2gvq9nb.jpg

當然還有的提交按鈕,這把我給名爲類似「handle_edit.php」的PHP文件。

現在another post on stackoverflow關於這個問題已經表明,我應該使用某種foreach循環來編輯我的HTML表中每行SQL表中的一行。我在「handle_edit.php」中的這個循環的版本看起來像這樣:

foreach($_POST['appearances'] as $appearances) { 
    $goals = $_POST['goals']; 
    $assists = $_POST['assists']; 
    $name = ??????? //How to I do this? 

    mysqli_query($connection, "UPDATE players 
          SET appearances=$appearances, goals=$goals, assists=$assists 
          WHERE name=$name"); 
} 

首先。循環需要包含一個數組表達式,編譯器告訴我現在不是這種情況。但我不知道如何計算行數。在我上面鏈接的線程中,他們正在做類似於此的操作,但由於我的foreach循環無法工作,所以我不認爲自己完全明白自己在做什麼。

其次,由於表中的名稱列不是輸入字段,我不知道如何使用其餘信息將其發送到此頁面。我需要做某事,因爲我想根據提供的名稱來確定要編輯哪一行。這個SQL表中的每個玩家都有一個唯一的玩家ID,我可以使用它嗎?

我可能正在接近這個錯誤的方式嗎?有更可行的解決方案嗎?

請告訴我,如果你需要任何額外的代碼。

在此先感謝!

+2

yes您正在接近錯誤的方式。您需要學習1.隱藏輸入字段2.數據庫主鍵3.sql注入並可能更多.. – 2014-10-08 09:51:55

回答

3

首先,名稱變量。 您需要將<input type='hidden' name='name' value='<*YOUR WAY OF GETTING THE NAME*>'/>添加到您的表單中。如果你這樣做,你可以通過$_POST['name']得到foreach循環中名字的值。其次,你使用的sql字符串是錯誤的。你不能在字符串中輸入變量名稱。我建議首先宣佈了SQL字符串是這樣的:

$sql = "UPDATE players SET appearances=" . $appearances . ", goals=" . $goals . ", assists=" . $assists . " WHERE name=". $name; 

然後進行連接並執行像這樣的查詢:

mysqli_query($connection, $sql); 

對foreach問題,我建議使用var_dump()方法,看看是否調試你真的得到一個陣列回$_POST['appearances']

我希望這會有所幫助。

+0

當然,使用隱藏字段解決了第二個問題。謝謝! ''var_dump()'告訴我$ _POST ['appearances']'確實不包含一個我懷疑的數組。我嘗試這樣做的唯一原因是因爲他們在此線程中使用它:http://stackoverflow.com/questions/14890509/create-unique-form-input-ids-and-input-names-in-while-循環。但我想一個複選框的作品不同。 所以,如果這不給我行數,我怎麼能得到它?我怎樣才能在不同的行上得到所有不同的值,因爲'$ _POST [value]'似乎只能給我最後一行? – 2014-10-08 10:27:07

+0

通過向我的輸入字段的名稱添加數組括號([])來解決我的第一個問題。例如。寫'name =「外觀[]」'而不是'name =「外觀」''爲我的外觀輸入字段。這將$ _POST ['appearances']'變成包含每行的值的數組。然後,我可以通過像'$ appearances = $ _POST ['appearances']這樣的東西來訪問這些不同的值,例如通過執行'$ appearances [0]'來獲取來自索引0的值。既然Nick回答了一個問題,而我自己回答了第二個問題,那麼我應該把Nick的回答標記爲答案還是張貼這個評論作爲答案? – 2014-10-08 12:02:56

+0

你確實可以將它標記爲anwer。由於您在答覆中發佈了您的答案,因此具有相同問題的人也會閱讀它。 – Nick 2014-10-08 15:33:56