2017-04-26 4 views
0

테이블에 시스템 페이지를 표시하는 시스템을 만들고 있는데, 그 중 하나는 페이지를 삭제할 수있는 작업 열입니다. 이것은 부분적으로 작동PHP 테이블에서 테이블을 표시 할 때 mySQLi의 레코드를 삭제

listpages.php

<?php 
$sql = "SELECT * FROM Pages"; 
$result = $conn->query($sql); 
if ($result) { 
    while($row = $result->fetch_assoc()) { 
     $pages[] = array_map('htmlspecialchars', $row); 
    } 
} 
// PHP is finished now, here's the HTML 
?> 
     <form method="post" action="utils/delpage.php"> 
     <table> 
     <thead> 
      <tr> 
       <th>Page Name</th> 
       <th>Page Type</th> 
       <th>Registered on</th> 
       <th>Actions</th> 
      </tr> 
     </thead> 
     <tbody> 
     <?php foreach($pages as $page):?> 
      <tr> 
      <input type="hidden" name="targetid" value="<?= $page['id'] ?>"></input> 
      <td><?= $page['pagename'] ?></td> 
      <td><?= $page['pagetype'] ?></td> 
      <td><?= $page['regdate'] ?></td> 
      <td><input type="submit" value="delete" class="red-text material-icons tooltipped" data-tooltip="Delete"><td> 
      </tr> 
     <?php endforeach ?> 
     </tbody> 
     </table> 
     </form> 

delpage.php

<?php 

include ('../../php/db.php'); 


$id = $_POST['targetid']; 
$target = htmlentities($id); 

$stmt = $conn->prepare("DELETE FROM Pages WHERE id = (?)"); 
$stmt->bind_param("i", $page); 

$page = $target; 
$stmt->execute(); 


?> 

: 나는 이런 짓을 내가 기록을 삭제하도록 설정 휴지통 아이콘을 얻을. 문제는 클릭 할 때 삭제할 레코드 대신 마지막 레코드가 항상 삭제된다는 것입니다. 이것은 문제입니다. 실제로 어떻게 작동해야하는지는 아닙니다. Id는 다른 정보와 동일한 방식으로 "표시"되고 있기 때문에 왜 이렇게하는지 알 수 없습니다. 나는 SO를 찾아 답을 찾았지만 아무런 효과가 없었고 많은 옵션을 보지 못했지만 질문을 만들었다. 어떤 도움이 필요합니까? 당신의 delpage.php에 무슨 문제가 있나요 사전

+0

그냥 user2860957 – MucaP

답변

3

을이 하나 개의 큰 형태의 경우, 여러 필드를 모든 이름 TARGETID있을 것이다. 그게 문제이고 브라우저는 마지막 필드의 값을 보냅니다. 아래의 작은 양식을 사용해보십시오. 각 양식은 그것들을 수치화함으로써 그것의 고유 한 이름을 가질 수 있습니다.

위에서 루프의 위치에서 양식을 제거하십시오.

<?php foreach($pages as $page): 
?> 
<tr> 
<form method="post" action="utils/delpage.php"> 
    <input type="hidden" name="targetid" value="<?= $page['id'] ?>"></input> 
    <td><?= $page['pagename'] ?></td> 
    <td><?= $page['pagetype'] ?></td> 
    <td><?= $page['regdate'] ?></td> 
    <td><input type="submit" value="delete" class="red-text material-icons tooltipped" data-tooltip="Delete"><td> 
     </tr> 
</form> 
<?php endforeach ?> 

여기에 같은 이름과 PHP에 의해 수신 된 값을 입력하는 간단한 예입니다

<form method="post" action="#"> 
    <input name="a" value="1"> 
    <input name="a" value="2"> 
    <button type="submit" value="delete">Always prints second.</button> 
</form> 

<form method="post" action="#"> 
    <input name="a" value="1"> 
    <button type="submit" value="delete">Returns 1</button> 
</form> 
    <form method="post" action="#"> 
    <input name="a" value="2"> 
    <button type="submit" value="delete">Returns 2</button> 
</form> 


<?php 
if (isset($_POST['a'])) { 
    echo $_POST['a']; 
} else { 
    echo 'page loaded'; 
} 
+0

예 @ 코드를 읽어! 고마워, 그것은 매력처럼 작동합니다! – MucaP

+0

내 대답을 수락 해 주셔서 감사합니다. 그것은 좋은 질문이었습니다. – geeves

1

에서

감사합니다, 당신은 쿼리 id 매개 변수를 SQL로 잘못된 변수를 전달하고 있습니다.

bindParam을 살펴보십시오.

이 시도 :

delpage.php

<?php 

    include ('../../php/db.php'); 

    $id = $_POST['targetid']; 
    $target = htmlentities($id); 

    $stmt = $conn->prepare("DELETE FROM Pages WHERE id = :id"); 
    $stmt->bindParam(":id", $target); 

    $page = $target; 
    $stmt->execute(); 

?>