2015-09-27 46 views
0

嗨,大家好我即将尝试创建一个ajax删除脚本为我的画廊,但它似乎并没有删除,而是它给出了以下错误。删除照片脚本给出的错误在php和mysql

Warning: Division by zero in /opt/lampp/htdocs/project/others/delete_photo.php on line 20 

Warning: unlink(): No such file or directory in /opt/lampp/htdocs/project/others/delete_photo.php on line 20 

删除脚本如下:

<?php 
require $_SERVER["DOCUMENT_ROOT"].'/project/includes/dbconfig.inc.php'; 
$session= htmlentities($_SESSION['uname']); 
$sess_uname= stripslashes($session); 
$id0= htmlentities($_POST['id']); 
$id= stripslashes($id0); 
$sql="DELETE FROM photos WHERE id=':id' LIMIT 1"; 
$stmt=$conn->prepare($sql); 
$stmt->bindparam(":id",$id); 
$stmt->execute(); 
$sql1 = "SELECT * FROM photos WHERE user=':session' LIMIT 30"; 
$stmth=$conn->prepare($sql1); 
$stmth->bindparam(":session",$sess_uname); 
$stmth->execute(); 
$dir="user/$sess_uname"; 
$count0=$stmth->fetch(PDO::FETCH_ASSOC); 
$count=count($count0); 
$row1 = $stmth->fetch(PDO::FETCH_ASSOC); 
if ($count>0) { 
    unlink($dir/$row1['filename']); 
} 
/*if (isset($_SESSION['app'])&&$_SESSION['uname']!="") { 
    header("location: ../home.php?u={$_SESSION['uname']}");    
        } else { 
         header("location: ../index.php?usernotfound?id=017"); 
        } 
*/ 

的AJAX逻辑如下:

$("button.delete_photo").click(function(){ 

    var del_id = $(this).attr('id'); 
var del_attr=$(this).attr('attr'); 
$.post("others/delete_photo.php", 
{id:del_id},function(data){ 
$("."+del_id).slideUp('slow', function() {$(this).remove(data);}); 

    } 
); 


}); 
+0

你错过了'在session_start();'在你的代码的开头。 PS。 '$ dir/$ row1 ['filename']'不会做你认为它做的事。 – user5173426

+0

但是session_start包含在dbconfig.inc.php @HawasKaPujaari中,并且它使用print_r()正确打印。 – jackal4me

+0

您的代码旨在删除一条记录,但您的查询可能会返回多条记录。请提供var_dump($ row1)的输出;这样你可以首先确认你的查询甚至是检索数据。 –

回答

0

改变这一行

unlink($dir/$row1['filename']); 

unlink($dir.'/'.$row1['filename']); 

因为不是提供目录结构,而是将值分开。

+0

这是否解决了您的问题? –

+0

不,它没有@arun krish – jackal4me

1

从一开始就开始:

1) echo这个,看看你得到了什么?你是否得到想要的/预期的名字?

echo $session= htmlentities($_SESSION['uname']); 

如果是这样,这echo还有:

$sess_uname= stripslashes($session); 

2)同样,如果你被echo得到一个期望的结果向ING:

$id0= htmlentities($_POST['id']); 

这意味着你的第一个查询应该工作。现在

,下面的查询工作,如果你已经得到了预期的结果,从1)

$sql1 = "SELECT * FROM photos WHERE user=':session' LIMIT 30"; 

3)这并不是指定目录的正确方法。

$dir="user/$sess_uname"; 

而是使用正确的串联,如:

$dir= "user" . "/" . $sess_uname; 

4)如果所有上述的作品,这也是不正确的。要么使用$_SERVER['DOCUMENT_ROOT']来构建与您的网站的根目录开始的绝对路径,或者使用相对路径,下面写的行是你得到的原因Warning: Division by zero

unlink($dir/$row1['filename']); 

而哪些应该是:

unlink($dir . "/" . $row1['filename']); 

但这就是只有如果$row1正在工作,目前显然不是。

+0

row1正在输出布尔(假)其余的步骤似乎运作良好。 – jackal4me

+0

@ jackal4me Ahh,_您的查询中存在错误_。检查正确的表名以及列名“echo”你的查询,看看发生了什么,以及它是否帮助你解决了你的问题,不要忘记接受我的答案';-)'干杯 – user5173426

0

终于找到了解决办法,问题出在sql语法上。 以前是这样的:

$sql="DELETE FROM photos WHERE id=':id' LIMIT 1"; 

$sql1 = "SELECT * FROM photos WHERE user=':session' LIMIT 30"; 

我拿出单引号ID,因为它是一个整数,现在,它就像一个魅力。 现在我的代码如下所示:

$sql="DELETE FROM photos WHERE id=:id LIMIT 1"; 
$sql1 = "SELECT * FROM photos WHERE id=:id LIMIT 1";