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

Posted

技术标签:

【中文标题】PowerPoint VBA 是不是可以发送 POST 请求?【英文标题】:PowerPoint VBA Is It Possible To Send POST requests?PowerPoint VBA 是否可以发送 POST 请求? 【发布时间】:2020-08-13 20:48:19 【问题描述】:

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

我的问题是,这可能吗?

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

感谢任何cmets。

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

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"

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

非常感谢您的任何 cmets。

编辑 - 一位评论者说我需要包含我的 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>

【问题讨论】:

如果您可以将数据库包装在 HTTP 端点中:***.com/questions/17063550/equivalent-curl-in-vba 是的,很有可能——网上有很多例子,也有很多例子。在 Excel/PPT/Word 或任何其他 VBA 主机中执行此操作没有真正的区别。 ***.com/search?q=%5Bvba%5D+POST 是的 - 我一直在试验一些代码,看起来很有可能使用 PowerPoint VBA 进行发布请求。目前我可以连接到我的数据库,但只有空白值被输入到数据库中,所以我希望能在发送数据的语法方面提供一些帮助。 到目前为止,我正在使用以下代码: Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP") URL = "mywebsiteaddress/AddNew.php" objHTTP.Open "POST", URL, False objHTTP.setRequestHeader “用户代理”、“Mozilla / 4.0(兼容;MSIE 6.0;Windows NT 5.0);” objHTTP.send “id = 1 & name = test & score = 50” 但是,当前的问题是 objhttp.send 没有发送我的数据库正确解释的数据。我需要发送一个 id 号(它是一个整数,这个值无关紧要),发送一个字符串的名称,然后发送一个整数的分数。我需要将名称和分数作为已在程序其他部分创建的变量发送。我的问题是,我如何发送变量名,我的 objHTTP.send 语法有什么问题吗? 【参考方案1】:

好消息 - 我找到了解决方案 - 我需要更改我的 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))

【讨论】:

我注意到在此线程上发帖后有人“破坏”了我的网站并删除了文件。我认为很可能是有人阅读了这个帖子并且有一些非常聪明的技能。请不要这样做。

以上是关于PowerPoint VBA 是不是可以发送 POST 请求?的主要内容,如果未能解决你的问题,请参考以下文章

从VBA中的PowerPoint文件中提取所有文本

PowerPoint - 创建倒数计时器 - VBA

当我在 vba powerpoint 中按下一个键时调用一个 Sub

使用 VBA 将 Excel 中的图表嵌入到 Powerpoint 中的指定占位符中

Excel 到 PowerPoint VBA

text 通过Excel VBA.bas调用PowerPoint