删除照片脚本在php和mysql中出错

时间:2015-09-27 07:25:35

标签: php mysql ajax gallery

大家好我试图为我的画廊创建一个ajax删除脚本,但它似乎没有删除,而是会出现以下错误。

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);});

    }
 );   


});

3 个答案:

答案 0 :(得分:1)

从一开始就开始:

<强> 1) echo这个,看看你得到了什么?你得到了想要/期望的名字吗?

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

如果是这样,echo也是如此:

$sess_uname=  stripslashes($session);

2)同样,如果您从echo获得预期结果:

$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正在运作,那只是 ,目前显然不是。

答案 1 :(得分:0)

更改此行

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

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

因为您不是提供目录结构,而是将值除以。

答案 2 :(得分: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";