2015-01-08 4 views
0

데이터베이스에서 레코드를 삭제하기 위해 몇 페이지를 코딩했지만 작동하지 않습니다.PHP를 사용하여 SQL 데이터베이스에서 레코드 삭제

나는 데이터베이스에 저장된 정확한 이름과 암호를 사용하여 사용자가 로그인하는 웹 사이트를 운영하고 있습니다. 정상적으로 작동합니다.

내가 관리자 페이지의 전체 코드와 JS 바이올린을 만든
<?php 

$sql = mysqli_query($con, "SELECT * FROM details INNER JOIN genre ON genre.genreID = details.genreID;") or die(mysqli_error($sql)); 


while($row = mysqli_fetch_array($sql)) { 


    echo '<div class="info-box"> 

    <img class="image" src='.'"'.$row['image'].'" 
    '.'> 

    <a class="edit" href="delete.php?id=' . $row["ID"] .'" onclick="return confirm(\'Are you sure you want to delete this record?\')">Delete</a> | 



    </div>'; 

} 

mysqli_close($con); 
?> 

... http://jsfiddle.net/n3n4ot4g/

:이 후 관리자 페이지로 사용자를 취

는 코드는 다음의 몇 가지로 구성

이 페이지는 뒤에서 delete.php로 이동하여 레코드를 삭제합니다. 이 페이지는 다음과 같은 코드로 구성

<?php 

$myID = $_GET['ID']; 

echo $myID; 


include ('includes/dbconx.php'); 


//check if a value has been sent 
if(isset($myID)){ 

//MySQL statement to delete record using the unique id variable 
mysqli_query($con, "DELETE FROM details WHERE ID = '$myID'") or die ('Error: '.mysqli_error()); 

} 

mysqli_close($con); 


header("Location: admin.php"); 


?> 

나는 팝업 상자가 내가 예를 클릭하여 삭제를 확인하기 위해 나타나는 삭제 링크를 클릭하지만, 그것은 어떤 콘텐츠와 admin.php 저를 소요하는 경우 그것. 모든 기록이 사라집니다. 이것은 또한 왼쪽 패널 탐색에서 "레코드보기"를 클릭 할 때 발생합니다. 되돌아 가서 다시 로그인하여 레코드를 볼 수 있지만 삭제하려고 시도한 레코드는 삭제되지 않습니다.

이것이 HTML 또는 PHP 문제인지 확실하지 않습니다.

JS fiddle은 PHP 용으로 설계되지 않았지만 대안을 찾을 수 없다는 것을 알고 있습니다.

+3

** 위험 ** : 당신은 취약 **은 [SQL 인젝션 공격 (http://bobby-tables.com/) ** 당신이 필요 [방어] (HTTP ://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php) 자신으로부터. – Quentin

+0

코드 설명을 위해 ideone 또는 CompileOnline.com을 사용하십시오. –

+0

else 문을 두 번째 코드에 넣고 세션이 시작되지 않았는지 확인하십시오. –

답변

0

변경 : mysqli_query($con, "DELETE FROM details WHERE ID = '$myID'") or die ('Error: '.mysqli_error());

에 :

mysqli_query($con, "DELETE FROM details WHERE ID = " . $myID) or die ('Error: '.mysqli_error());

따옴표 $myID을 넣어함으로써, 당신은 그대로가 너무 쿼리가 ID를 검색,주의해야한다는 것 말 그대로 "$ myID"는 물론 찾을 수 없습니다.

또는 작은 따옴표를 제거하고 $myID 변수를 연결하지 않고 쿼리 자체가 여전히 큰 따옴표로 묶여 있는지 확인할 수 있습니다. 이것은 변수가 제대로 처리되고 그 값이 사용될 것임을 의미합니다.

mysqli_query($con, "DELETE FROM details WHERE ID = $myID") or die ('Error: '.mysqli_error());

+0

이 두 줄을 예제로 바꾸려고 시도했지만 내 코드가 여전히 똑같은 일을하고 있습니다 .. – Jordan

+1

'$ myID = $ _GET [ 'ID'];'를'$ myID = $ _GET [ 'id'];' – danhardman

+0

이제 레코드를 삭제하려고합니다! 감사. 그러나 이제 문제는 삭제 후 레코드를 표시하지 않는 것이므로 모든 레코드가있는 관리 페이지로 돌아가서 대신 페이지의 일부가 비어 있어야 레코드가 있어야합니다. 이 문제에 대한 새로운 질문을 만들어야합니까? – Jordan

관련 문제