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


Using JS to run PHP script on server

我已经做了很长一段时间了,我对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代码使用的是我制作的Java程序,该程序使用PHP"exec()"发送的参数写入MySQL数据库。它根本没有写入数据库,所以我假设这是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);
?>

我不会通过网络传递您的数据库用户/密码。只需制作一个简单的应用程序密码,并将密码与db user/password静态存储在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);
?>

它所做的只是将PHP代码打印到控制台。。。

您有配置为执行PHP代码的web服务器吗?您必须意识到,您不能只在浏览器中运行从"服务器"上的文件系统打开的普通php文件。

制作一个名为info.php的新文件,并将其保存到web服务器。里面应该只有这个:

<?php
phpinfo();

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


不太确定我做的字符串正确

非常接近,但你应该读一下的一些报价

这可能对你有用:

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