我已经做了很长一段时间了,我对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]");