2011-11-10 6 views
0

안녕하세요, PHP를 사용하여 삭제 버튼을 시도하는 것을 처음했습니다. & DABL.제출 버튼은 PHP 폼에서 2 번 클릭합니다

삭제 버튼을 클릭하면 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

약간 수정 된 버전 전에 조치를 삭제 수행해야합니다.

주요 변경 사항은 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

당신이 실제로 삭제하기 전에 항목을 표시하기 때문에

마크. 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

당신은 알렉스 Ciminian의 코드

$loginTypes = LoginTypes::getAll(); 
관련 문제