现在我有这个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的卫生,安全,注射等等,我们只关注手头的问题,而不是谈论安全问题。
感谢。
答案 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);