В настоящее время я работаю над программой отслеживания, которая отслеживает сотни пользователей одновременно, но я столкнулся с некоторой досадной проблемой. То, как я могу заставить пользователей вставлять в базу данных, – это текстовое поле html, а затем отправлю их в качестве параметра. Там всегда около 7 из 60 человек (это всегда одни и те же имена), которые вставлены в базу данных, но не вставляют правильные данные. Я попытался просто вставить этих пользователей, и все в порядке, так может возникнуть проблема с вставкой всех людей сразу?
Вот некоторые из кода, который я использую:
index.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>
tracker.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);
на$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);
Вы заметите внутри базы данных, что у funkymunky11 нет данных, но есть четкие данные с сайта, на котором я читал, как вы можете видеть .
Я также создал базу данных, чтобы вы могли видеть, что происходит: http://phpmyadmin.alwaysdata.com/
Имя пользователя: stacktest
Пароль: stackoverflow
Ниже перечислены имена, которые я использовал для тестирования (я помещаю это в текстовую область):
Aeterna
quuxx
funkymunky11
ts danne
Извините, если есть какой-то ненужный код, я прошел и очистил почти все, что я не думал, что это необходимо.
Заранее спасибо, Рон