我目前正在开发一个跟踪程序,可以同时跟踪数百个用户,但我遇到了一个有点烦人的问题。我让用户插入数据库的方法是通过 html 文本区域,然后将它们作为参数发送。总是有大约 60 人中的 7 人(也总是相同的名字)被插入到数据库中,但它没有插入正确的数据。我尝试只插入这些用户,一切都很好,那么一次插入所有用户是否会出现问题?
这是我正在使用的一些代码:
索引.html:
<head>
<title>Test</title>
</head>
<body>
<form name="input" action="tracker.php" method="get">
<textarea name="names" rows="20" cols="20"></textarea><br>
<input type="submit" value="Submit" />
</form>
</body>
跟踪器.php:
$database = mysql_connect("mysql.alwaysdata.com", "stacktest", "stackoverflow");
if (!$database) {
die('Could not connect to database: ' . mysql_error());
}
mysql_select_db("stacktest_1", $database);
mysql_query("CREATE TABLE stats (username varchar(12), start text, UNIQUE (username))");
$names = explode("\n", $_GET['names']);
if (isset($_GET['track'])) {
for ($i = 0; $i < count($names); $i++) {
startTracker($names[$i]);
}
}
displayData();
function startTracker($username) {
$stats = getStats($username);
mysql_query("INSERT IGNORE INTO stats (username, start) VALUES ('" . trim($username) . "', '$stats')");
}
function grabStats($username) {
$query = mysql_query("SELECT * FROM stats WHERE username LIKE '$username'");
while ($row = mysql_fetch_array($query)) {
return $row['start'];
}
}
function displayData() {
global $names;
for ($i = 0; $i < count($names); $i++) {
$stats = getStats($names[$i]);
$starting = getStat(grabStats($names[$i]), 2, 0);
$current = getStat($stats, 2, 0);
$gained = $currentExperience - $startingExperience;
echo "Stats for <b>" . $names[$i] . "</b>:<br>";
echo "Starting experience: " . number_format($starting) . "<br>";
echo "Current experience: " . number_format($current) . "<br>";
echo "Gained experience: " . number_format($gained) . "<br><br>";
}
}
function getStats($username) {
$curl = curl_init("http://hiscore.runescape.com/index_lite.ws?player=" . $username);
curl_setopt ($curl, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt ($curl, CURLOPT_USERAGENT, sprintf("Mozilla/%d.0", rand(4, 5)));
curl_setopt ($curl, CURLOPT_HEADER, (int) $header);
curl_setopt ($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt ($curl, CURLOPT_VERBOSE, 1);
$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$output = curl_exec($curl);
curl_close ($curl);
if (strstr($output, "<html><head><title>")) {
return false;
}
return $output;
}
function getStat($stats, $row, $skill) {
$stats = explode("\n", $stats);
$levels = explode(",", $stats[$skill]);
return $levels[$row];
}
mysql_close($database);
您会注意到数据库内部放克蒙基11没有数据,但我读到的网站上有明显的数据,如你看到的 http://hiscore.runescape.com/index_lite.ws?player=funkymunky11.
我还创建了一个数据库,以便您可以看到发生了什么:http://phpmyadmin.alwaysdata.com/ http://phpmyadmin.alwaysdata.com/
用户名: 堆栈测试
密码:stackoverflow
以下是我用来测试的名称(我将其放在文本区域内):
aeterna
quuxx
放克蒙基11
丹尼
如果有一些不需要的代码,我很抱歉,我检查并清理了几乎所有我认为不需要的代码。
提前致谢,
罗恩