2012-11-16 3 views
1

$ id_id와 일치하는 숫자 ID가 있으면 레코드가 삭제되고 $ res는 TRUE로 평가됩니다. 테이블에 'abc1234'와 같은 문자열 인 'member_id'가 있으면 $ member_id를 '$ member_id'따옴표로 묶어 모든 일치 항목을 삭제하지만 $ res는 항상 TRUE로 평가되므로 문자열을 삭제하면 삭제됩니다 if 불일치가 없으므로 삭제되지 않습니다 (사용자가 "$ member_id"를 가져옵니다). 회원 테이블에서 제거되었습니다 "라는 메시지. 그게 분명했다 바랍니다.문자열과 관련된 쿼리 결과는 항상 TRUE로 평가됩니다.

<?php 
$member_id = ""; 
require("connect.php"); 
if (isset($_POST['member_id']))$member_id = fix_string($_POST['member_id']); 

$sql=("DELETE FROM members WHERE member_id = $member_id"); 
$res = mysqli_query($con,$sql); 
**if($res) { 
echo "member with ID of ".$member_id." has been removed from members table"; 
} else { 
    echo "member was not deleted"; 
}** 

function fix_string($string) { 
    if (get_magic_quotes_gpc()) $string = stripslashes($string); 
    return htmlentities ($string); 
} 
?> 
+0

이 기능을 사용하면 반환을 사용하는 것을 확인하십시오 : http://php.net/mysqli_query 그리고 ** 항상 ** 당신이 누군가를 요청하기 전에 설명서를 참조하십시오. – zerkms

+0

'$ member_id = "1 OR 1 = 1"'설정을 시도하십시오. 그리고 SQL 인젝션에 대해 읽어보십시오. 친구들에게도 읽도록 알려주세요. –

+0

추신 : 귀하의'fix_string' 함수는 전혀 의미가 없습니다 – zerkms

답변

1

당신의 논리가 올바른 위치에 있지만. 당신은 사용자/회원에 의해 삭제 된 있는지 확인하기 위해 노력하고 제대로 실행되지 일을하십시오 DELETE 제대로 실행 문이 경우

$res = mysqli_query($con,$sql); 
if($res) { 

그러나, mysqli_query()true를 반환합니다 - 그것은 행을 삭제 아닌지는 중요하지 않습니다 당신이 할 수있는 것들

입니다을 사용합니다.3210 :

$res = mysqli_query($con, $sql); 
if (mysqli_affected_rows($con) == 1) { 
    echo "member with ID of ".$member_id." has been removed from members table"; 
} else { 
    echo "member was not deleted"; 
} 

당신의 DELETE 문에 의해 영향을받는 하나의 기록 (귀하의 회원-ID를 고유 한 가정이 있다면이 확인됩니다; 그렇지 않은 경우 >= 1 대신 사용할 수 있습니다). 하나 있다면, 글쎄, 그것은 제거되었습니다!

사이드 참고는 (특정 응답하지)
당신은 당신의 fix_string() 방법을 드롭하고 당신을 위해 입력을 자동 소독합니다 mysqli의 준비된 문을 선택해야한다. 당신은 당신의 기존 코드를 다음 시도 할 수 있습니다 :

require("connect.php"); 
$member_id = (!empty($_POST['member_id']) ? $_POST['member_id'] : ''); 

// prepare the statement 
$stmt = mysqli_prepare($con, 'DELETE FROM members WHERE member_id = ?'); 

// bind the id 
mysqli_stmt_bind_param($stmt, "s", $member_id); 

// execute the statement 
mysqli_stmt_execute($stmt); 

if (mysqli_affected_rows($con) == 1) { 
    echo "member with ID of ".$member_id." has been removed from members table"; 
} else { 
    echo "member was not deleted"; 
} 
+0

완벽! 정말 고마워! – jimeast

+0

부수적 인 메모 :'member_id'가 설정되지 않은 경우 - 전혀 쿼리를 수행 할 이유가 없습니다 – zerkms

관련 문제