PowerPoint VBA 是否可以发送 POST 请求?

PowerPoint VBA Is It Possible To Send POST requests?

我想将在教育 PowerPoint 游戏中获得的分数发送到在线 mysql 数据库。

我的问题是,这可能吗?

我可以看到使用 Excel VBA 时看起来是可行的,但我很想知道这是否可以使用 PowerPoint VBA 完成,如果可以,我应该如何处理这个?

感谢您提出任何意见。

编辑 - 我想我会在这里更新,因为与评论框相比,代码可以很好地列出。我试验了下面的代码,发现我可以 post 到我的数据库,但问题是数据库中只插入了空白值。

Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")

URL = "http:mydomain/AddNew.php?"
objHTTP.Open "POST", URL, False
objHTTP.setRequestHeader "User-Agent", "Mozilla / 4.0 ( compatible; MSIE 6.0; Windows NT 5.0); "
    objHTTP.send "name=test,&score=50"

对于将名称和分数插入到我的数据库中所使用的正确语法的任何建议,我将不胜感激。另外,如何使用变量发送数据?

非常感谢您提出任何意见。

编辑 - 一位评论者说我需要包括我的 php 代码(在 AddNew.php 中使用)。所以我在下面复制了这个。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta content="en-gb" http-equiv="Content-Language" />
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Untitled 1</title>
</head>

<body>

<?php


$name=$_POST['name'];
$score=$_POST['score'];
echo '$name is '.$name;
echo '$score is '.$score;

if( $_REQUEST["name"] || $_REQUEST["score"] ) {
  echo "name ". $_REQUEST['name']. "<br />";
  $name = $_REQUEST['name'];
  echo "Your score ". $_REQUEST['score']. " points.";
  $score = $_REQUEST['score'];
  //exit();
}


if ($_SERVER["REQUEST_METHOD"] == "POST") {
  // collect value of input field
  $name = $_POST['name'];
  if (empty($name)) {
    echo "Name is empty";
  } else {
  echo $name;
}
$score = $_POST['score'];
  if (empty($score)) {
  echo "Score is empty";
  } else {
  echo $score;
  }
}

$servername = "my server name";
$username = "my username";
$password = "my password";
$dbname = "my database name";


try {
$conn = new PDO("mysql:host=$servername;dbname=mydatabasename", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected successfully";
} catch(PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}

try {
$conn = new PDO("mysql:host=$servername;dbname=mydatabasename", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "INSERT INTO mytablename (id, name, score)
VALUES ('1', '$name', '$score')";
// use exec() because no results are returned
$conn->exec($sql);
echo "New record created successfully";
} catch(PDOException $e) {
echo $sql . "<br>" . $e->getMessage();
}


 $conn = null;
?>

</body>
</html>

编辑 - 另一个编辑!下面是 objHTTP.ResponseText 的结果。从底部看第 3 行,您可以看到我的 AddNew.php 没有收到关于名称和分数的任何信息!

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta content="en-gb" http-equiv="Content-Language" />
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Untitled 1</title>
</head>

<body>

$name is $score is Name is emptyScore is emptyConnected successfullyNew record created successfully
</body>
</html>

好消息 - 我找到了解决方案 - 我需要更改我的 setRequestHeader,我认为它指定我正在使用表单请求,并且我还分别制定了如何发送变量。下面的代码应该是这样的:

'below are some dummy variables to test and send
Dim name As String
Dim score As Integer
name = "John Doe"
score = 43

Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")

URL = "my URL/AddNew.php?"
objHTTP.Open "POST", URL, False
'objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" 'I do not seem to need this line!
objHTTP.setRequestHeader "Content-type", "application/x-www-form-urlencoded"

objHTTP.send ("name=" + name + "&score=" + CStr(score))