2013-04-08 1 views
0

여기에서 잘못하고있는 일을 두뇌로 감싸려고합니다. 이것은 레코드를 삭제할 때 호출되는 함수입니다. 레코드가 삭제되었지만 삭제 레코드가 행 중간에있는 경우 display_order 자체를 다시 설정해야합니다. 첫 번째 레코드는 항상while 루프의 모든 행을 업데이트하십시오.

<?php 
    $counter = 1; 
    require ("connection.php"); 
    $sql = "SELECT * FROM pages"; 
    $result = $conn->query($sql) or die(mysqli_error()); 

    $id = $_GET['id']; 
    $delete = mysqli_query($conn, "DELETE FROM pages WHERE id ='".$id."'"); 
    if ($delete){ 

     while($row = $result->fetch_object()){ 
      $reord = "UPDATE pages SET display_order = '".$counter."'"; 
      $result2 = $conn->query($reord) or die(mysqli_error()); 
      $counter++; 
     } 

     header("Location: admin.php"); 
    }else{ 
     echo "NOTHING DELETED id=".$id; 
    } 
?> 
I 받고있어 오류가 모든 레코드는 "display_order"지금 최대 레코드 수에 업데이트된다는 것입니다

는 등의 말을 1, 2, 항상 둘째,되도록 예를 들어 4 개의 레코드가 있었지만 그 중 하나를 삭제했습니다. 나머지 모든 레코드의 디스플레이 순서는 3입니다.

+2

첫 번째 $ id = (int) $ _GET [ 'id']; SQL 주입을 피하십시오. – epicdev

+0

'yourPage.php? id = % 27 % 20OR % 20 % 271 % 27 % 3D % 271'을로드하면'pages' 테이블의 모든 행이 삭제됩니다. http://bobby-tables.com/, ['mysqli :: prepare()'] (http://php.net/manual/en/mysqli.prepare.php) – DaveRandom

답변

2

쿼리에 WHERE 조건으로 페이지 ID를 추가하지 않으 셨습니다.

while($row = $result->fetch_object()){ 
    $reord = "UPDATE pages SET display_order = '".$counter."' WHERE page_id = '" . $row->page_id . "'"; 
    $result2 = $conn->query($reord) or die(mysqli_error()); 
    $counter++; 
} 

참고 :이 같이 WHERE 절에게 pages 테이블의 모든 레코드가없는 경우 업데이트됩니다.

+0

WHERE 절을 추가했지만 대신 모든 레코드가 최대 개수로 설정되었으므로 나는 아무것도 얻지 못합니다. 모든 display_order 값은 동일하게 유지됩니다. 또한, 제안 된 코드의 구문 오류가 발생했습니다 : 치명적인 오류 : 12 행의 delete.php 배열로 stdClass 유형의 객체를 사용할 수 없습니다. $ row [ 'page_id']에서 $ row-> page_id – Murphy1976

+0

으로 변경했습니다. 마음 ... 내 코드에서 오류를 봤어요 – Murphy1976

+0

현재의 MySQL 테이블 레이아웃을 모르겠습니다. id 열의 이름으로'page_id'를 대체하십시오. 또한 가져 오기 모드를 알지 못했습니다. FETCH_OBJ 인 것 같습니다 (오류 메시지를 읽은 후). '$ row [ 'PROPERTY_NAME']'대신'$ row-> PROPERTY_NAME'을 사용하십시오. 대답을 업데이트했습니다 – hek2mgl