2011-11-10 37 views
0

您好我是新手,嘗試使用PHP & DABL做刪除按鈕。提交按鈕在PHP表單上點擊2次

當我點擊刪除按鈕時,它從數據庫中刪除,但仍顯示在頁面上。

如果我刷新頁面或再次單擊該按鈕,則會將其刪除。

我知道我做錯了什麼,但不知道是什麼。

非常感謝

馬克

<?php 
require_once('includes/header.php'); 
$loginTypes = LoginTypes::getAll(); 

<ul> 
    <?php foreach ($loginTypes as $loginType){?> 
    <li><?php echo $loginType->type; $LoginTypeId = $loginType->login_type_id; ?> 
     <form action ="<?php $_SERVER['PHP_SELF']; ?>" method='post' > 
     <input type='hidden' name='<?php echo $LoginTypeId; ?>' id='<?php echo $LoginTypeId; ?>' /> 
     <input type='submit' name='submit_<?php echo $LoginTypeId; ?>' id="submit_<?php echo $LoginTypeId; ?>" value='delete' /> 
     </form> 
    </li> 
      <?php if(isset($_POST["submit_$LoginTypeId"])){ 
        $delete = LoginTypes::retrieveByPK("$LoginTypeId"); 
        $delete->delete(); 
        }} ?> 
</ul> 
<?php require_once('includes/footer.php'); ?> 

回答

1

A的亞歷克斯Ciminian的代碼稍加修改的版本刪除操作。

主要更改是您處理POST變量的地方。這應該有效,但顯然我不能真正地測試它,而不需要我的logintype類。

因爲它們都是不同的形式,所以您不需要爲提交按鈕(或刪除ID隱藏字段)使用唯一的名稱。我仍然試圖通過將所有代碼都放在一個表單中並使用複選框來標記要刪除的代碼,但現在這應該足夠了。

<?php 
require_once('includes/header.php'); 
if(isset($_POST['deleteSubmit'])) { 
    $delete = LoginTypes::retrieveByPK($_POST['LoginTypeId']); 
    $delete->delete(); 
} 
$loginTypes = LoginTypes::getAll(); 
?> 

<ul> 
    <?php 
    foreach ($loginTypes as $loginType){ ?> 
    <li><?php echo $loginType->type; $LoginTypeId = $loginType->login_type_id; ?> 
     <form action ="<?php $_SERVER['PHP_SELF']; ?>" method='post' > 
     <input type='hidden' name='LoginTypeId' value='<?php echo $LoginTypeId; ?>' id='<?php echo $LoginTypeId; ?>' /> 
     <input type='submit' name='deleteSubmit' id="submit_<?php echo $LoginTypeId; ?>" value='delete' /> 
     </form> 
    </li> 
    <?php } ?> 
</ul> 
<?php require_once('includes/footer.php'); ?> 
+0

尼克的權利,我沒有太注意變量的值。我更關注邏輯流程。 –

+0

剛剛看到這個,我把它整理好了,但是謝謝你花時間回覆 – Mark

2

因爲你顯示的項目之前實際上是刪除它。將if放在foreach之前。

試試這個:

<?php 
require_once('includes/header.php'); 
?> 

<ul> 
    <?php 

    if(isset($_POST["submit_$LoginTypeId"])) { 
     $delete = LoginTypes::retrieveByPK("$LoginTypeId"); 
     $delete->delete(); 
    }  
    $loginTypes = LoginTypes::getAll(); 
    foreach ($loginTypes as $loginType){ ?> 
    <li><?php echo $loginType->type; $LoginTypeId = $loginType->login_type_id; ?> 
     <form action ="<?php $_SERVER['PHP_SELF']; ?>" method='post' > 
     <input type='hidden' name='<?php echo $LoginTypeId; ?>' id='<?php echo $LoginTypeId; ?>' /> 
     <input type='submit' name='submit_<?php echo $LoginTypeId; ?>' id="submit_<?php echo $LoginTypeId; ?>" value='delete' /> 
     </form> 
    </li> 
    <?php } ?> 
</ul> 
<?php require_once('includes/footer.php'); ?> 
+0

謝謝你,我想這和前面還以爲我做錯了,我再拿到$ LoginTypeId是因爲它是不是直到在foreach之後定義未定義的變量。 – Mark

0

您應該執行之前

$loginTypes = LoginTypes::getAll();