2013-06-11 1 views
0

$ dba에서 $ imagenes 양식을 삭제하는 방법을 알아야합니다 ... 성공적으로 수행 할 수 없습니다 (db는 성공적으로 삭제됨) ... 이미 링크 해제 코드를 넣었으나 오류 로그에 이미지의 ID는 표시하지만 이미지의 이름은 표시하지 않습니다 ... 여기 내 PHP 코드는 다음과 같습니다.PDO를 사용하여 mysql db에서 경로를 삭제할 때 이미지를 삭제하는 방법

--- EDITED-- -

그래서 나는 id (idToDelete)에서 $ imagenes를 삭제하는 방법을 모르겠다. 이전에 테이블을 선택할 수 있습니까 ?? 또는 테이블


  • id_imagen (INT의 PK)
  • imagenes (VARCHAR 100)
  • id_paciente (FK를 INT)
  • f_imagen (CURRENT_TIMESTAMP 여기

    필요 없다)


에서 I 이미지를 가지고 아약스 호출 나는 그것을 삭제하려고 personal.php :

/*the styles of del button and wrapper */ 
<style type="text/css"> 
.del_wrapper{float:right;} 
.content_wrapper { 
max-width: 100%; 
margin-right: auto; 
margin-left: auto; 
} 
</style> 
/*the ajax call */ 
    <script type="text/javascript"> 
    $(document).ready(function() { 
    $("body").on("click", "#gallery .del_button", function(e) 
    { 
    e.returnValue = false; 
    var clickedID = this.id.split('-'); 
    var DbNumberID = clickedID[1]; 
    var myData = 'recordToDelete='+ DbNumberID; 
    jQuery.ajax({ 
    type: "POST", 
    url: "delimage.php?ts=" + new Date().getTime(), 
dataType:"text", 
data:myData, 
success:function(response){ 
$('#item_'+DbNumberID).fadeOut("slow"); 
}, 
error:function (xhr, ajaxOptions, thrownError){ 
alert(thrownError); 
} 
}); 
}); 
}); 
</script> 

/*the image gallery */ 
<div id="gallery"> 
<? 
$sql = $conn->prepare("select * from IMAGENES where id_paciente = $_GET[id_paciente] order by id_imagen ASC"); 
$sql->execute(); 
while($row = $sql->fetch(PDO::FETCH_ASSOC)){ 
$id_imagen = $row['id_imagen']; 
$imagenes = $row['imagenes']; 
echo "<div class='del_wrapper' id='item_".$row['id_imagen']."'><a href='#' class='del_button' id='del-".$row['id_imagen']."'>"; 
echo "<img src='../images/icon_del.gif' border='0' />"; 
echo "</a>"; 
echo "<a href='../$imagenes' class='group4'>"; 
echo "<img src='../$imagenes' class='image_thumbnail' />"; 
echo "</a> </div>"; 
} 
?></div> 

하고 코드 delimage.php에 선택과 :

<? 
include_once("config.php"); 
if(isset($_POST["recordToDelete"]) && strlen($_POST["recordToDelete"])>0 && is_numeric($_POST["recordToDelete"])) 
{ 
$stmt=$conn->prepare("SELECT id_imagen,imagenes FROM IMAGENES where id_imagen = $_GET[id_imagen]"); 
$result = $conn->query($sql); 
while($row = $result->fetch(PDO::FETCH_ASSOC)){ 
$recordToDelete=$data['imagenes']; 
unlink("../imagenes/$imagenes"); 
} 
    $idToDelete = filter_var($_POST["recordToDelete"],FILTER_SANITIZE_NUMBER_INT); 
    if($stmt=$conn->prepare("delete from IMAGENES WHERE id_imagen=$idToDelete")) 
    $stmt->bindParam("$idToDelete",$id_imagen,PDO::PARAM_INT); 
    $stmt->execute(); 
     $dbh = null; 
} 
?> 

피들러에서 delimage.php에서 삭제할 이미지의 ID를 볼 수 있기 때문에 ajax 호출이 작동하지만 d 만 다음과 같은 방법으로 bindParam을 사용합니다 :

+0

$ POST []와 $ GET []을 섞을 수 없습니다. 사용하는 것은 FORM 방법에 따라 다릅니다. –

답변

1

먼저 imagenes 폴더의 내부 DB가 아닌 이미지의 경로를 elete

$sth = $conn->prepare("DELETE FROM `IMAGENES` WHERE `id_imagen` = :idToDelete") 
$sth->bindParam(':idToDelete', $id_imagen, PDO::PARAM_INT); 

하지만 대부분의 아마 전에 이름을 얻기 위해 사용을 선택해야 파일. 그런 다음 ID가있는 변수가 아니라 연결 해제시 해당 이름을 사용하십시오. 좋은 조언을 원한다면 여기 테이블 구조를 게시하십시오.

$ _POST [ "recordToDelete"]이 무엇인지, 그리고 그 후에 $ _GET을 사용하려고하는 이유는 확실하지 않습니다. id_imagen에 따라 삭제할 imagenes 열 저장소 파일 이름은 다음과 같은 방법을 시도 할 경우 :

<? 
include_once("config.php"); 
/*hope above is the connection with MySQL and that connection is $conn */ 

if(isset($_POST["recordToDelete"]) && strlen($_POST["recordToDelete"])>0 && is_numeric($_POST["recordToDelete"])) { 
    $idToDelete = filter_var($_POST["recordToDelete"], FILTER_SANITIZE_NUMBER_INT); 
    /* following will give you file name on the corresponding id from table */ 
    $stmt = $conn->prepare("SELECT `imagenes` FROM IMAGENES where `id_imagen` = :id_imagen"); 
    $stmt->bindParam(':id_imagen', $id_imagen, PDO::PARAM_INT); 
    $stmt->execute(); 
    if ($result = $stmt->fetch()) { 
    /* this will delete the file */ 
    unlink("../imagenes/" . $result[0]); 
    /* and here you will delete the record in DB if this is your intention also */ 
    if($stmt = $conn->prepare("DELETE FROM IMAGENES WHERE id_imagen = :idToDelete")) 
    $stmt->bindParam(":idToDelete", $id_imagen, PDO::PARAM_INT); 
    $stmt->execute(); 
    } 
} 
$conn = null; //Disconnect 
?> 

첫째, 둘째, 모든 행을 understant하려고 - 당신의 DB의 백업을, 그 후 - 조심스럽게 시도 sampple 데이터.

+0

나는 질문을 수정하고 테이블 구조를 넣습니다. 그러나 select with ID를 얻을 수 없습니다 –

+0

제가 편집 할 것입니다 모든 질문. –

+0

나는 당신의 코드를 시도했으나 작동하지 않았다 ... 오류 로그 파일에 어떤 오류도주지 않았다. 당신의 지원에 감사드립니다! –

관련 문제