2011-11-10 14 views
0

こんにちは、私はPHPを使用して削除ボタンをしようとしています& DABL。ボタンを2回クリックすると、PHPフォーム

私が[削除]ボタンをクリックすると、DBから削除されますが、ページに表示されます。

ページを更新するか、ボタンをもう一度クリックすると、ページが削除されます。

私は何か間違っているのは分かっていますが、何がわからないのですか。

多くのおかげ

<?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

アレックスCiminianのコードを少し変更したバージョンの前に削除アクションを実行する必要があります。

主な変更点は、POST変数を扱う場所です。これはうまくいくはずですが、明らかにあなたのlogintypesクラスを自分で使うことなく、実際にテストすることはできません。

これらはすべて異なる形式であるため、送信ボタン(または削除ID隠しフィールド)に一意の名前を使用する必要はありません。私はまだ1つのフォームにすべてのコードを入れてコードを改善し、削除したいものをマークするためのチェックボックスを持っていると誘惑されますが、これで十分です。

<?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

あなたが実際にそれを削除する前に、項目を表示するので

マーク。 foreachの前にifを置きます。

はこれを試してみてください:

<?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(); 
関連する問題