gpt4 book ai didi

php - 无法通过 JS (Jquery) 发布,但可以通过表单发布

转载 作者:行者123 更新时间:2023-11-29 14:56:34 25 4
gpt4 key购买 nike

我有一个相当令人困惑的问题。

我有一个 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;
}



});

当我这样做时,它返回“帖子已被删除!”但不删除帖子。

对此感到困惑,我制作了一个表单来测试 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;
}



});

最佳答案

如果您的 PHP 脚本删除该帖子,它不会返回任何内容。

<小时/>

我的错,它没有回答真正的问题,但仍然是一个错误;)

实际上,PHP session 和 AJAX 有时似乎并不能很好地协同工作。

这意味着if ($post->user_id == $user_id)永远不会验证,因此存在不可删除问题。

查看此内容的两种方法:

  1. 日志$user_id看看是不是 null
  2. 尝试发送 $_SESSION['user_id']与你的 ajax 帖子并检查它。但出于安全原因,并未投入生产。
<小时/>

1-

您的 PHP 应该在每种情况下返回一些内容(至少,当您寻找与实际情况类似的错误时)。

<?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 脚本的表单,该脚本显然会删除某些内容,然后进行重定向。

关于php - 无法通过 JS (Jquery) 发布,但可以通过表单发布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4488743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com