2016-06-24 2 views
0

이것은 프로젝트의 내 삭제 페이지입니다. 특정 로그인 한 사용자 만 레코드/계정 만 삭제할 수 있도록 허용하고 싶습니다.

그래서 사용자 정보 테이블과이 delete.php 페이지에 대한 링크가 있습니다. 다음 코드는 자신의 레코드를 삭제할 수 있지만 다른 레코드를 삭제할 수 없더라도 $_session['delete'] 메시지를 표시합니다.

누구든지 조언 할 수 있습니까?

감사합니다.

<?php 


include 'dbconnect.php'; 

session_start(); 

// CHECK IF LOGGED IN // 

if(! $_SESSION['username']) { 

header("Location: project-users-logout.php"); 
die(); 
} 

// Build SQL Query 
$sql = "SELECT * FROM registeredUsers"; 

// Run the Query 
$query = mysqli_query($db,$sql); 

$userid = mysqli_real_escape_string($db, $_GET['id']); 

$deleteQuery = "DELETE FROM registeredUsers 
       WHERE UserID = $userid 
       AND UserName = '$_SESSION[username]'"; 

$delete = mysqli_query($db, $deleteQuery); 

if ($delete) { 

      /* SUCCESS */ 
      $_SESSION['delete'] = 'Record deleted'; 
      header ("Location: project-users-manage.php "); 
      exit; 

} else { 

    echo "You do not have access to delete this user"; 
} 

?>

+0

실제로 삭제 된 항목이 있는지 확인하려면 mysqli_affected_rows()를 사용하십시오. –

답변

0

문은 항상 삭제 쿼리 삭제 아무것도 발견하지 않았기 때문에 사용자가 삭제되지 않은 경우에도, 성공적으로 실행하기 때문에이 $ true로 평가를 삭제 믿는다.

나는 개인적 것 :

  • 첫째, 그들은 전혀 로그인 한 경우
  • 둘째를하고있는대로 확인하여 사용자의 행을 잡아 당겨 ID/세션 기반 보안을 확인 SELECT 및 존재/사용 권한/등 검사.
  • 셋째, 사용자 권한이있는 경우, 행을 삭제하고 행을 삭제하지 않는 다른 ... 사실 변수 $ bDeleted = 설정하고 설정 $ bDeleted = 거짓
  • 넷째,
  • $ bDeleted에 따라 에코

또한 사용자 행을 삭제하지 않습니다. 데이터베이스의 부울 필드로 행을 삭제 된 것으로 표시하고 해당 행을 삭제 된 것으로 간주하도록 앱의 논리를 조정하는 것이 더 안전합니다. 이렇게하면 사고 나 변경의 경우 사용자 계정을 신속하게 삭제할 수 있습니다.

+0

죄송합니다 ... 작업을 놓쳤습니다. 실제로 사용자가 스스로 삭제하는 것을 중지하는 것입니다. 따라서 로그인 한 사용자는 자신을 제외한 모든 사람을 삭제할 수 있습니다. 어떻게 내가 그것에 대해 갈 생각? – Tatws24

관련 문제