什么是发布/获取Excel数据的最佳方式

时间:2016-02-02 00:01:20

标签: php mysql vba

现在我有这个vba脚本:

$(".typeahead").typeahead({}, {
  source: function(){
    var url = this.$el.parents(".twitter-typeahead").find(".typeahead").data().url
    ....ajax to your url...
  }
})

一切正常。并做我想要的。问题是,发布60个问题需要很长时间(约60秒)。 60秒不是一个真正的问题。我可以等60秒。问题出在我的托管中。他们将我的IP标记为SPAMMER或其他东西。因为在我成功发布我的问题后,我得到了ERR_CONNECTION_RESET。它只发生在我身上。如果通过代理打开,该网站很好。

所以我的问题是,有没有办法通过excel vba将60个问题发送到php,而不会让托管服务提供商阻止我的IP。

submit.php的内容

i = 11

While (Range("B" & i) <> "")
    Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
       URL = "https://example.com/submit/?no=" & Range("B" & i).Value & "&soal=" & Range("C" & i).Value & "&a=" & Range("E" & i).Value & "&b=" & Range("F" & i).Value & "&c=" & Range("G" & i).Value & "&d=" & Range("H" & i).Value & "&benar=" & Range("J" & i).Value & ""
       objHTTP.Open "POST", URL, False
       objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
       objHTTP.send ("")
    i = i + 1

Wend

示例excel行 http://snag.gy/A4o9D.jpg

P.S。我知道mysql的卫生,安全,注射等等,我们只关注手头的问题,而不是谈论安全问题。

感谢。

1 个答案:

答案 0 :(得分:1)

注意我的vba是生锈的(比如,10年以上),字符串连接可能是错误的,可能使用URL = URL & "...而不是URL &= "...

但基本思路是构建一个长查询字符串,然后发出一个http请求:

i = 11
URL = "https://example.com/submit/?"
While (Range("B" & i) <> "")

    URL &= "no[" & i & "]=" & Range("B" & i).Value & "&soal[" & i & "]=" & Range("C" & i).Value & "&a[" & i & "]=" & Range("E" & i).Value & "&b[" & i & "]=" & Range("F" & i).Value & "&c[" & i & "]=" & Range("G" & i).Value & "&d[" & i & "]=" & Range("H" & i).Value & "&benar[" & i & "]=" & Range("J" & i).Value

    i = i + 1

Wend

Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
objHTTP.Open "POST", URL, False
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.send ("")
在PHP方面,您将获得数组,因此在循环中构建查询并在一个查询中插入所有值:

$sql = 'INSERT INTO `soal` (`id`, `no`, `soal`, `options`, `a`, `b`, `c`, `d`, `e`, `benar`) VALUES ';
$values = [];
foreach($_GET['no'] as $key => $ignore){
    $values[]= '(NULL, "'.$_GET['no'][$key].'", "'.$_GET['soal'][$key].'", "4", "'.$_GET['a'][$key].'", "'.$_GET['b'][$key].'", "'.$_GET['c'][$key].'", "'.$_GET['d'][$key].'", "e", "'.$_GET['benar'][$key].'")';
}
$sql .= implode(',', $values) . ';';
$conn->query($sql);