2015-09-12 142 views
0

我有一個表中的數據庫生成的內容與編輯和刪除按鈕在行末尾的形式。爲什麼要刪除按鈕空白編輯按鈕執行

<td> 
    <form action="?" method="post"> 
     <div class=""> 
      <input type="hidden" name="id" value="<?php htmlspecialchars($item['id']); ?>"> 

      <input type="hidden" name="action" value="edit_daily_shift_report"> 
      <input type="submit" value="Edit" onclick="return confirm('Edit this report?');"> 

      <input type="hidden" name="action" value="delete_daily_shift_report"> 
      <input type="submit" value="Delete" onclick="return confirm('Delete this report?');"> 
     </div> 
    </form> 
</td> 

如果我刪除刪除按鈕,編輯代碼工作正常。但是,如果存在兩個按鈕,則編輯按鈕將失敗,並且該行中的項目將被刪除。我很難過。不僅編輯按鈕的動作值被忽略,而且執行刪除按鈕的動作值。任何幫助表示讚賞!

這裏是控制器編輯和刪除代碼:

/*********************** Edit Daily Shift Report ************************/ 
if (isset($_POST['action']) && $_POST['action'] === 'edit_daily_shift_report') 
{ 
    include '../includes/dbconnect-local.php'; 

    try 
    { 
     $sql = 'SELECT * FROM daily_shift_report WHERE id = :id'; 
     $s = $db->prepare($sql); 
     $s->bindValue(':id', $_POST['id']); 
     $s->execute(); 
    } 
    catch (PDOException $e) 
    { 
     $error = 'Error deleting data.' . $e->getMessage(); 
     include 'error.html.php'; 
     exit(); 
    } 

    // Assign page title value 
    $pageTitle = 'Edit Daily Shift Report'; 

    // Store single row resut in $item associative array 
    $item = $s->fetch(PDO::FETCH_ASSOC); 

    // Display report content in form 
    include 'edit_daily_shift_report.html.php'; 
    exit(); 
} 

/********************* Delete from Daily Shift Report *******************/ 
if (isset($_POST['action']) && $_POST['action'] === 'delete_daily_shift_report') 
{ 
    include '../includes/dbconnect-local.php'; 

    try 
    { 
     $sql = 'DELETE FROM daily_shift_report WHERE id = :id'; 
     $s = $db->prepare($sql); 
     $s->bindValue(':id', $_POST['id']); 
     $s->execute(); 
    } 
    catch (PDOException $e) 
    { 
     $error = 'Error deleting data.' . $e->getMessage(); 
     include 'error.html.php'; 
     exit(); 
    } 

    echo '<span style="color:#ff0000;">Daily Shift Report DELETED successfully!</span>'; 
} 

謝謝。

回答

0

您需要了解發布請求的工作原理。如您所知,您有兩個action字段,一個用於刪除,一個用於編輯。 你的問題是總之,沒有辦法康涅狄格特定的輸入字段到不同的按鈕。

我更願意提出的是,您將按鈕的名稱設置爲action,並將該值設置爲您已用於隱藏字段的值。 有了這個你也必須在你的html做一個小的改動。相反的:

<input type="submit" value="something" onclick="something"> 

使用此:

<button name="action" value="edit" onclick="something">Edit</button> 

而且同樣適用於刪除按鈕

當您使用button標籤,而不是input,你可以設置一個值按鈕,這是不同於顯示器,這使得它在檢查後$_POST['action']的值時更清晰的PHP代碼

+0

有一件事我忘了提及。當你有相同名稱的字段時,該值將被下一個具有相同名稱的字段覆蓋。一個例外是,如果您在名稱中使用[]。 Php認爲這是一個數組,並且會爲你創建該字段和數組 – Morten

+0

Thanks @Morten!對不起,我遲遲沒有回覆。感謝您花時間看看這個。我在解決方案之前解決了這個問題,創建了兩個表單,並將它們分別放入自己的表單​​中。它似乎不是最好的解決方案,但它的工作。但是,您的解決方案更好,我已經在這裏和其他地方使用了它。使用

+0

沒問題,只是很高興幫助:) @ JimB814 – Morten