Вызов файла PHP из Node.js с помощью AJAX? - PullRequest
0 голосов
/ 02 июля 2018

Проблема:

Здравствуйте, у меня в настоящее время есть веб-сайт с игрой, которая работает с node.js. Включает в себя gulp и socket.io.

У меня есть php-файл, который я хочу вызвать из node.js, и он возвращает сообщение об успехе (эхо в файле), но не обновляет мою базу данных.

Однако, когда я вызываю php-файл, помещая ссылку в браузере или вызывая его с помощью той же команды AJAX с моего веб-сайта, она прекрасно работает.

Итак, с моего сайта: site.com файл php работает отлично, но с моего сервера узлов: site.com:3000 он возвращает успех, но не обновляет мою БД.

Я знаю, что Node не совместим с php, но, возможно, есть обходной путь.

Я также заметил, что мои переменные пусты при вызове файла из узла.


Код:

Вот мой php-файл:

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 "5 cents have been subtracted!"; 
} 
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= 'cashball_root'; 
$this->password= '1VeryBright*'; 
$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; 
} 

} 
?>

И мой AJAX-вызов: (app.js)

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

Вывод:

Мне нужен способ, чтобы правильно запустить мой php-скрипт и обновить базу данных непосредственно из node.js. Я видел решения для этого с файлами на github, но я не понимаю, является ли это правильным решением или как реализовать их в моем коде. Может быть, есть способ вызвать файл php через другой домен в фоновом режиме с помощью ajax?

Я новичок в PHP и неплохо разбираюсь в JS, поэтому, пожалуйста, подробно опишите свои ответы.

Спасибо за вашу помощь!

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Как вы указали в некоторых комментариях, переменные $_SESSION пусты. Предполагая, что у вас есть те же данные (id и сумма наличных), доступные в вашем node.js, вы можете передать их вместе с вызовом AJAX, что-то вроде этого:

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

Затем вы можете получить доступ к переменным, которые вы передали через $_POST в вашем php-файле - из-за type: "POST". Что-то вроде этого:

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

$cash_amount = $_POST['cash_amount'];
$userid = $_POST['id'];
$new_cash_amount = $cash_amount - 0.05;

$mysql = new Mysql();

$result = $mysql->setCashAmount($cash_amount, $userid);
if ($result) {
    echo json_encode([
        'new_cash_amount' => $new_cash_amount,
        'message' => '5 cents have been subtracted!'
    ]);
} else {
    echo json_encode(['error' => 'Huge error.']);
}
?>
0 голосов
/ 02 июля 2018

так что мне интересно

$result = $stmt->execute(); 

что будет с оператором sql при вызове из Node? Можете ли вы отладить это (когда он вызывается из узла)

Я думаю, что

$_SESSION

пусто при вызове с узла

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...