Javascript 将转换后的MQTT字符串传递给MYSQL
我正在尝试转换MQTT字符串并将它们添加到mysql中,我已经成功地转换了字符串并使它们在chrome控制台中正确显示,但是我缺少javascript和PHP之间传递数据的位 我在这个网站上尝试了其他问题中概述的一些东西,但我可以让它们工作,我尝试使用AJAX,但再次无法让它工作我哪里出了问题,或者我缺少了什么 以下所有代码都在服务器端运行Javascript 将转换后的MQTT字符串传递给MYSQL,javascript,php,mysql,Javascript,Php,Mysql,我正在尝试转换MQTT字符串并将它们添加到mysql中,我已经成功地转换了字符串并使它们在chrome控制台中正确显示,但是我缺少javascript和PHP之间传递数据的位 我在这个网站上尝试了其他问题中概述的一些东西,但我可以让它们工作,我尝试使用AJAX,但再次无法让它工作我哪里出了问题,或者我缺少了什么 以下所有代码都在服务器端运行 var hostname = "127.0.0.1"; var port = 1884; // Create a client instance var c
var hostname = "127.0.0.1";
var port = 1884;
// Create a client instance
var client = new Paho.MQTT.Client(hostname, Number(port), "clientId");
// set callback handlers
client.onConnectionLost = onConnectionLost;
client.onMessageArrived = onMessageArrived;
// connect the client
client.connect({
onSuccess: onConnect
});
// called when the client connects
function onConnect() {
// Once a connection has been made, make a subscription and send a message.
console.log("onConnect");
client.subscribe("test");
}
// called when the client loses its connection
function onConnectionLost(responseObject) {
if (responseObject.errorCode !== 0) {
console.log("onConnectionLost:" + responseObject.errorMessage);
}
}
// called when a message arrives
function onMessageArrived(message) {
var raw = message.payloadString;
message.length = raw.length;
message.raw = raw;
var data = {};
data.major = raw.slice(-10,-4);
data.mac = raw.substring(5,17);
data.hostname = raw.substring(18,30);
data.minor = raw.slice(-8,-4);
var str = data.hostname;
var location = str.replace(`C129E53D0F45`, `PINK`)
.replace(`FD139CD46385`, `DARKORANGE`)
.replace(`EB72F2609789`, `DEEPSKYBLUE`)
.replace(`DBECEE45AE6F`, `RED`)
.replace(`E47D6D760A7F`, `WHITE`)
.replace(`C3D7EDB7EF28`, `WHITE`)
.replace(`E3A3BD636EA3`, `GREEN`)
.replace(`D6F579FC35C9`, `YELLOW`);
var beacon = parseInt(data.minor ,16);
var topic2 = ('[value="'+location+','+beacon+', '+data.mac+'"]')
console.log("Message arrived: topic=" + message.destinationName + ", message=" + topic2);
}
</script>
<?php
$servername = "127.0.0.1";
$username = "user";
$password = "password";
$dbname = "test";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "INSERT INTO test.track (`location`,`beacon`, `mac`) VALUES ('+location+','+beacon+', '+data.mac+')";
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
?>
var hostname=“127.0.0.1”;
var端口=1884;
//创建一个客户端实例
var client=new Paho.MQTT.client(主机名、编号(端口),“clientId”);
//设置回调处理程序
client.onConnectionLost=onConnectionLost;
client.onMessageArrived=onMessageArrived;
//连接客户端
client.connect({
onSuccess:onConnect
});
//当客户端连接时调用
函数onConnect(){
//建立连接后,进行订阅并发送消息。
控制台日志(“onConnect”);
客户。认购(“测试”);
}
//当客户端失去连接时调用
函数onConnectionLost(响应对象){
if(responseObject.errorCode!==0){
日志(“onConnectionLost:+responseObject.errorMessage”);
}
}
//消息到达时调用
消息驱动的函数(消息){
var raw=message.payloadString;
message.length=raw.length;
message.raw=raw;
变量数据={};
data.major=原始切片(-10,-4);
data.mac=原始子串(5,17);
data.hostname=raw.substring(18,30);
data.minor=原始切片(-8,-4);
var str=data.hostname;
变量位置=str.replace(`C129E53D0F45`,`PINK`)
.replace(`FD139CD46385`,`DARKORANGE`)
.替换(`EB72F2609789`、`DEEPSKYBLUE`)
.replace(`DBECEE45AE6F`、`RED`)
.替换(`E47D6D760A7F`、`WHITE`)
.替换(`C3D7EDB7EF28`、`WHITE`)
.替换(`E3A3BD636EA3`,`GREEN`)
.替换(`D6F579FC35C9`,黄色`);
var beacon=parseInt(data.minor,16);
var topic2=(“[value=“”+location+”、“+beacon+”、“+data.mac+”])
console.log(“消息到达:主题=“+Message.destinationName+”,消息=“+topic2”);
}
您不能像这样从javascript到php获取值。如果调用ajax并传递数据会更好。PHP在JS之前执行。您需要运行JS,然后将结果发送到PHP。也不确定您使用+location+
的意图,但是+
在PHP中没有连接
,您需要关闭封装才能生效。还可以参数化查询。如果恶意传入位置
数据,或者注入了为其提供服务的数据,这将对SQL注入开放。好的,+是因为这是我在node red中使用的,但我正试图摆脱它。Ajax的工作方式是否与从php到Javascript的工作方式相同?