AJAX PHP在Node.js中不起作用

The Problem:

When I put a PHP file link in the browser, it works perfectly fine and updates my database as expected.

When I call it with ajax from node.js, it echoes the success message but the DB does not update.

The Session variables are undefined, so when I changed them to real numbers the code still did not work. What is going wrong?


My PHP Code:

subtract5.php:

<?php
header('Access-Control-Allow-Origin: http://cashballz.net:3000', false);
include 'mysql.php'; 
session_start(); 

$cash_amount = $_SESSION['cash_amount'];
$userid = $_SESSION['id'];
$_SESSION['cash_amount'] -= 0.05;

$mysql = new Mysql(); 

$result = $mysql->setCashAmount($cash_amount,$userid); 
if($result) 
{ 
echo $cash_amount; 
} 
else 
{ 
session_start(); 
session_unset(); 
session_destroy(); 
}
?>

mysql.php:

<?php
class Mysql 
{ 
protected $dsn; 
protected $username; 
protected $password; 
public $db; 


function __construct() 
{ 
//change this to your info (myDBname, myName, myPass) 
$this->dns= 'mysql:dbname=cashball_accounts;host=localhost;charset=utf8'; 
$this->username= 'myUser'; 
$this->password= 'myPass'; 
$this->db = new PDO($this->dns, $this->username, $this->password); 
} 


public function setCashAmount($cash_amount, $id) 
{ 
$sql = "UPDATE users SET cash_amount = :cash_amount - 0.05 WHERE id = :id"; 
$stmt = $this->db->prepare($sql); 
$stmt->bindParam(':cash_amount', $cash_amount, PDO::PARAM_STR); 
$stmt->bindParam(':id', $id, PDO::PARAM_STR); 
$result = $stmt->execute(); 
return $result; 
} 

} 
?>

My node.js (app.js) AJAX:

//cut 5 cents from account - php function
        $.ajax({
        type: "POST",
        url: 'http://cashballz.net/game/5game/subtract5.php',
        data: {}, 
        success: function (data) {
            alert(data);
        }
    });

Recap:

  • PHP File works from site.com with the same AJAX code, and by putting its link in the browser.
  • PHP File is executed from node, but does not update the DB
  • PHP File has undefined $_SESSION variables but when replaced, the DB still does not update

Possible solutions:

  • Is there extra code i can put in AJAX to tell it to "pipe" the call to site.com to call the file instead of calling it straight from node?

Extra Info:

  • No errors in error logs or console
  • I need to use AJAX to input data into the file later on
  • Solution must be secure

Thanks for the help!

dpbsy60000
dpbsy60000 你通过重述别人的说法告诉我我做错了什么,甚至没有说如何解决它们。有一个原因,为什么这个网站存在,它的建议和答案,你没有提供。谢谢。附:我正在寻找不打架的答案。
大约 2 年之前 回复
dourao1968
dourao1968 你应该重新评估你正在建造什么样的建筑......这肯定不是一种安全的方法。你有一个服务器上的php文件,由node.js应用程序通过jQueryajax调用调用...SSL将无助于使整个事情更安全。抱怨别人,因为他们告诉你真相也不会帮助你。你应该做的是一些好的RTFM:)
大约 2 年之前 回复
dpg78570
dpg78570 所以你说我需要从site.com上调用它?我尝试将变量更改为实际值而不是会话值,PHP仍然无法正常工作。我需要从site.com:3000调用该文件,这就是问题所在。对不起,如果我只是不明白你的回答。
大约 2 年之前 回复
doutao6380
doutao6380 我刚买了SSL,我很快就会激活它
大约 2 年之前 回复
dtk31564
dtk31564 在我的帖子中,我解释说我用数字替换了所有SESSION值,数据库仍然没有更新。我将用户ID设置为我的用户ID和现金金额为我的用户的现金金额,并且数据库没有更新。
大约 2 年之前 回复
doutang1884
doutang1884 是的,您可以创建对phpurl的请求,但根据gforce301的评论,您的PHP中还有其他问题需要解决。除非你从同一个浏览器拨打电话,否则启动php会话你的代码将无效。Node.js是服务器端,它将创建自己的会话,并且不会知道用户会话。
大约 2 年之前 回复
dslfjrmz70457
dslfjrmz70457 它不起作用,因为这一行:$userid=$_SESSION['id'];会话中的id为null。它是null因为从nodejs调用该脚本的ajax调用,php无法启动相同的会话(没有cookie和所有这些,请参阅我之前关于实际学习php会话如何工作的评论)所以php启动一个新的会话并且该id是在新会话中为null。因此,您的setCashAmount函数中的查询永远不会与用户匹配,因此不会更新任何内容。就像我说的,PHP不能正常工作。至少不是你试图这样做的方式。
大约 2 年之前 回复
dounai1986
dounai1986 我并不是说这是“文件的错”。我说我们无法看到会话被添加到数据库的位置,因此我们无法判断会话是否实际存在于数据库中,这可以解释为什么您的查询没有找到它来减少该值。
大约 2 年之前 回复
dongtuojuan8998
dongtuojuan8998 php无法正常工作。您需要阅读并了解php会话的实际工作方式。我给了你2个解释。1)Node拥有自己的网络功能你应该使用它们。Ajax适用于浏览器。2)如果您认为http是安全的,那么我真的无法帮助您。https是安全版本。
大约 2 年之前 回复
dongre6227
dongre6227 可怕的回应,你批评没有解释
大约 2 年之前 回复
dongzhenge2014
dongzhenge2014 php文件有效,这意味着它不是文件的错。
大约 2 年之前 回复
dpnv33177
dpnv33177 好吧我会测试它,我只是请求php文件的链接?
大约 2 年之前 回复
doutan5337
doutan5337 看看node.js的请求库。使用jQuery服务器端并不是一个好主意
大约 2 年之前 回复
dongtai6741
dongtai6741 你在哪里将会话添加到数据库?确定您期望通过ajax进行的会话在您的数据库中吗?
大约 2 年之前 回复
duanjia4220
duanjia4220 “解决方案必须安全”?这个网址没什么安全的http://cashballz.net/game/5game/subtract5.php
大约 2 年之前 回复
douyi5157
douyi5157 为什么在所有不圣洁的名义下你是从nodejsapp做一个jQueryajax调用?节点不是浏览器。Node拥有自己的网络功能。
大约 2 年之前 回复
dtt3399
dtt3399 检查AJAX代码,我不需要POST
大约 2 年之前 回复
duandaishi9268
duandaishi9268 您似乎没有发布任何数据
大约 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐