我有一个相当混乱的问题。
我有一个php文件(http://example.com/delete.php)
<?php
session_start();
$user_id = $_SESSION['user_id'];
$logged_in_user = $_SESSION['username'];
require_once('../classes/config.php');
require_once('../classes/post.php');
$post = new Post(NULL,$_POST['short']);
#print_r($post);
try {
if ($post->user_id == $user_id) {
$pdo = new PDOConfig();
$sql = "DELETE FROM posts WHERE id=:id";
$q = $pdo->prepare($sql);
$q->execute(array(':id'=>$post->id));
$pdo = NULL;
}
else {throw new Exception('false');}
}
catch (Exception $e) {
echo 'false';
}
?>
我试图让这个jquery向它发布数据,从而删除数据。
$('.post_delete').bind('click', function(event) {
var num = $(this).data('short');
var conf = confirm("Delete This post? (" + num + ")");
if (conf == true) {
var invalid = false;
$.post("http://example.com/delete.php", {short: num},
function(data){
if (data == 'false') {
alert('Deleting Failed!');
invalid = true;
}
});
if (invalid == false) {
alert("post Has Been Deleted!");
}
else {
event.preventDefault();
return false;
}
}
else {
event.preventDefault();
return false;
}
});
当我这样做时,它会返回“Post has Beented!”但不删除帖子。
对此感到困惑,我制作了一个表格来测试php。
<form action="http://example.com/delete.php" method="POST">
<input type="hidden" value="8" name="short"/>
<input type="submit" name="submit" value="submit"/>
</form>
效果很好。很奇怪。
我删除评论的代码几乎相同,而且在javascript中效果很好。
有什么想法吗?打败我。
提前致谢, 将
编辑: 这有效......但最后不遵循href,这是理想的效果。奇
$('.post_delete').bind('click', function(event) {
var num = $(this).data('short');
var conf = confirm("Delete This Post? (http://lala.in/" + num + ")");
if (conf == true) {
var invalid = false;
$.post("http://example.com/delete/post.php", {short: num},
function(data){
if (data == 'false') {
alert('Deleting Failed!');
invalid = true;
}
});
if (invalid == false) {
alert("Post Has Been Deleted!");
******************************************
event.preventDefault();
return false;
******************************************
}
else {
event.preventDefault();
return false;
}
}
else {
event.preventDefault();
return false;
}
});
答案 0 :(得分:1)
如果你的PHP脚本删除帖子,它不会返回任何内容。
我的不好,它没有回答真正的问题,但仍然是一个错误;)
实际上,似乎PHP会话和AJAX有时并不能很好地协同工作。
这意味着if ($post->user_id == $user_id)
永远不会验证,因此非删除问题。
有两种看法:
$user_id
,看看它是否不是null
$_SESSION['user_id']
并进行检查。但出于安全原因,不在生产中。<强> 1 - 强>
你的PHP应该在每个的情况下返回一些内容(至少,当你在寻找像你的实际案例一样的bug时)。
<?php
[...]
try {
if ($post->user_id == $user_id) {
[...]
echo 'true';
}
else {throw new Exception('false');}
}
catch (Exception $e) {
echo 'false';
}
?>
<强> 2 - 强>
jQuery很适合用于AJAX,原因很多。例如,它处理许多浏览器并为您进行检查,而且,您可以在同一.ajax()
/ .post()
/ .get()
函数中处理成功和错误\ o /
$('.post_delete').bind('click', function(event) {
var num = $(this).data('short'); // If that's where your data is... Fair enough.
if (confirm("Delete This Post? (http://lala.in/" + num + ")")) {
$.post("delete/post.php", {short: num}, // Relative is nice :D
function(data){
if (data == 'false') {
alert('Deleting Failed!');
}else{
alert("Post Has Been Deleted!");
// Your redirection here ?
}
});
}
});
第3 - 强>
如果您需要将表单中的数据发送到脚本然后进行重定向,我不会推荐通常用于不离开页面的AJAX ! 因此,您应该在注释中执行操作,将PHP表单显示为删除某些内容然后执行重定向。
答案 1 :(得分:0)
在您的代码中,我没有看到num
在任何地方定义...并且您认为invalid
未设置,因此您没有传递8
值回来,你得到错误的信息,要么你需要这个:
$.post("http://example.com/delete.php", {short: $("input[name=short]").val()},
或者更简单,只需<form>
$.post("http://example.com/delete.php", $("form").serialize(),
,它也适用于任何未来的输入类型元素:
<form>
我不确定您的代码在哪里被调用,例如,如果它是.submit()
$("form").submit(function() {
$.post("http://example.com/delete.php", $(this).serialize(), function(data){
if (data == 'false') {
alert('Deleting Failed!');
} else {
alert("Post Has Been Deleted!");
}
});
处理程序,它看起来像这样:
invalid
请注意,您需要检查内部回调,因为true
将不会设置为{{1}},直到服务器以您当前拥有的方式返回数据,因为它是异步调用。