使用JS在服务器上运行PHP脚本

时间:2016-05-17 01:41:17

标签: javascript php jquery mysql ajax

我已经在这方面工作了很长一段时间,而且我几乎没有使用PHP的经验,而且我只是从JavaScript开始。

我正在尝试使用AJAX从网页上的JavaScript运行我的服务器上的PHP脚本。说实话,我对我正在做的事情并不是很了解。

我目前的代码:

JS:

function Write() {
    $.ajax({
        type: "POST",
        url: "Write.php",
        data: {
            'GUID': "12345678987654321",
            'IP': "127.0.0.2",
            'USERNAME': "George",
            'BAN_REASON': "Broke my pencil."
        },
        success: function(data) {
            console.log(data);
        }
    });
}

PHP:

<?php
exec("java -jar Database.jar '.$_POST['GUID']' '.$_POST['IP']' '.$_POST['USERNAME']' '.$_POST['BAN_REASON']'");
?>

(我也不太确定我正确地做了那个字符串,所以对此有所帮助将不胜感激)

基本上,PHP代码使用的是我使用PHP“exec()发送的参数写入MySQL数据库的Java程序。”它根本不是写入数据库,所以我假设它是AJAX进入PHP函数的东西。

当运行“Write()”时,它所做的就是将PHP代码打印到控制台......

新代码

<?php

//Server 
$servername = "localhost";
$dbusername = $_POST['DB_USERNAME'];
$password = $_POST['DB_PASSWORD'];
$dbname = "bansdb";

$username = $_POST['USERNAME'];
$guid = $_POST['GUID'];
$ip = $_POST['IP'];
$ban_reason = $_POST['BAN_REASON'];

$connection = new mysqli($servername, $dbusername, $password, $dbname);

if ($connection->connect_error) {
    die("Connection Failed: " . $connection->connect_error);
}

$sql = "INSERT INTO bans (GUID, IP, USERNAME, BAN_REASON)
VALUES ('$guid', '$ip', '$username', '$ban_reason')";

if (mysqli_query($connection, $sql)) {
    echo "Ban successfully added.";
} else {
    echo "Error: " . $sql . mysqli_error($connection);
}

mysqli_close($connection);

?>

2 个答案:

答案 0 :(得分:1)

我不会通过网络传递您的数据库用户/密码。只需创建一个简单的应用程序密码,并使用db用户/密码在PHP中静态存储密码(在HTML修改表单中输入APP_PASSWORD)。除了关闭SQL注入之外的参数化查询,您还可以在您的值中使用单引号,而不必担心查询中断(驱动程序处理引用)。

<?php
//Server 
$servername = "localhost";
$dbusername = 'static_db_user';//$_POST['DB_USERNAME'];
$password = 'staticpassword';//$_POST['DB_PASSWORD'];
$dbname = "bansdb";
if($_POST['APP_PASSWORD'] != 'Some generic password') {
    die('Invalid Credentials');
}
$username = $_POST['USERNAME'];
$guid = $_POST['GUID'];
$ip = $_POST['IP']; // I would store IP as an unsigned int, ip2long
$ban_reason = $_POST['BAN_REASON'];

$connection = new mysqli($servername, $dbusername, $password, $dbname);

if ($connection->connect_error) {
    die("Connection Failed: " . $connection->connect_error);
}

$sql = "INSERT INTO bans (GUID, IP, USERNAME, BAN_REASON)
VALUES (?,?,?,?)";
if ($stmt = mysqli_prepare($connection, $sql)) {
    mysqli_stmt_bind_param($stmt, , 'ssss', $guid, $ip, $username, $ban_reason;
    if(mysqli_stmt_execute($stmt)) {
        echo "Ban successfully added.";
    } else {
        echo "Execute Error: " . $sql . mysqli_error($connection);
    }
} else {
    echo "Prepare Error: " . $sql . mysqli_error($connection);
}
mysqli_close($connection);

?>

答案 1 :(得分:0)

  

它只是将PHP代码打印到控制台......

您是否有配置为执行PHP代码的Web服务器?你必须意识到,你不能只在你的“服务器”上的文件系统打开的浏览器中运行一个普通的php文件。

创建一个名为info.php的新文件并将其保存到您的Web服务器。里面应该只有这个:

<?php
phpinfo();

如果您在浏览时看到该代码,那么您没有启用PHP。否则,您将看到有关配置的大量信息。

  

不太确定我是否正确地使用了字符串

非常接近,但您应该read up关于某些quotes

这可能适合你:

<?php
exec("java -jar Database.jar $_POST[GUID] $_POST[IP] $_POST[USERNAME] $_POST[BAN_REASON]");