问题描述
“将消息作为POST请求发送到Web服务。该地址必须 以“ http://”开头,并可以选择包含端口号 (默认值为80)以及特定Web服务的路径。的 通知消息填充POST内容部分的正文 消息,没有key = value表单样式格式-您只需阅读 直接输入流。”
以上内容摘自Alien UHF RFID F800 manual。所提到的请求用于将读取器扫描的RFID标签发送到Web服务。域名是myrfidtest.com,路径是/insertdb.PHP。现在,将insertdb.PHP设置为接受两个参数,例如id和RFID标签号。因此,完整的URL为http://myrfidtest.com/insertdb.PHP?id=21&rfid=2eda1
。然后将这些数据成功插入到我的数据库中。
因此,我了解了如何使用上述URL将数据插入到云托管的数据库中。但是,我不理解摘录,“您直接读取输入流”是什么意思?
此外,如何更改insert.PHP脚本以接受来自阅读器的标签?
我的insert.PHP脚本:
<?PHP
class data_new
{
public $conn='';
function __construct($id,$rfid)
{
$this->storeInDB($id,$rfid);
}
function storeInDB($id,$rfid)
{
$conn = new MysqLi('localhost','user','password','db');
// Check connection
if ($conn->connect_error)
{
die("Connection Failed: " . $conn->connect_error);
}
$sql = "insert into cloud set id='".$id."',rfid='".$rfid."'";
if ($conn->query($sql) === TRUE)
{
echo "New record created successfully";
}
else
{
echo "Error: " . $sql . "<br>" . $conn->error;
}
}
}
if($_GET['id'] != '' and $_GET['rfid'] != '')
{
$data_new = new data_new($_GET['id'],$_GET['rfid']);
}
?>
解决方法
通常,当您在HTTP请求中发布表单数据时,您(或您的浏览器)会将发布的数据放入HTTP请求的正文中,并将其格式化为类似查询字符串的格式,例如field1=value1&field2=value2
,以便接收请求的服务器可以区分字段并知道哪个值属于哪个字段。我认为这篇文章说的是,在此特定请求中,请求的整个主体只是包含通知数据的单个字段,而没有任何name = value样式格式-因为主体中只有一个参数。
在PHP中,发布的数据通常出现在$_POST
数组中,数据中的每个参数在数组中都有一个条目(因此,您最终会得到$_POST["field1"]
,$_POST["field2"]
,等等。但是您也可以使用以下命令读取原始输入数据:
$postdata = file_get_contents("php://input");
相反。在上面提到的情况下,数据只是请求正文中的一大文本流,而不是被格式化的情况下,这将很有用。
P.S。我无法回答问题的第二部分”“如何更改insert.php” ,因为我不知道您指的是什么脚本,它的功能或外观,或者您在说什么标签。我建议您再问一个单独的问题,因为这听起来像是一个不同的问题,并在问题文本中给出您的意思的清晰示例。