Дублирующая ошибка ввода, некоторые значения не вводятся и не проходят по всем именам - PullRequest
0 голосов
/ 08 февраля 2019

Я извлекаю данные из API, который выводит данные JSON, которые содержат статистику игроков.У меня есть отдельный стол для каждого навыка в игре, в которую я играю.Всего 27 умений, так что всего будет 28 таблиц, включая таблицу пользователей.Во-первых, есть две проблемы: один из операторов вставки пытается дважды поместить одну и ту же запись и создает ошибку повторяющейся записи, а вторая проблема - некоторые операторы вставки ничего не помещают в свои соответствующие таблицы.Есть еще одна проблема, которая заключается в том, что в базу данных помещается только одна информация о пользователях.Пример: у меня в таблице пользователей 3 пользователя: Боб, Джейн, Пол, в которые вносятся только данные о навыках Бобса. Таким образом, по сути, вставляется только одна запись, когда в таблице пользователей на данный момент находится примерно 150 имен.Ох, и я забыл упомянуть, что я вставляю идентификатор пользователя из таблицы пользователей в таблицу навыков.Я включил массив $ highscores на случай, если кому-то понадобится

Сначала я подумал, что это тот факт, что я использовал переменную $query несколько раз, поэтому я сделал их уникальными, например: $query1, $query2, $query3 etc,проблемы сохраняютсяЯ проверил все орфографии, где if проверяет, равна ли переменная навыку, и все орфографические совпадения.Весь код идентичен.

Array
(
[skillvalues] => Array
    (
        [0] => Array
            (
                [level] => 99
                [xp] => 648475179
                [rank] => 41501
                [id] => 3

            )
            .
            .
            .
            repeat for the other 26 skills
    )
 )



//grab users and the users id out of the users table
$query = $conn->query("SELECT user_id, name FROM users ORDER BY user_id 
ASC");
ini_set('max_execution_time', 1600);
While($row = $query->fetch(PDO::FETCH_ASSOC)){
$name = $row["name"];
$user_id = $row["user_id"];
//to compensate for spaces because otherwise file_get_contents will fail
$name = str_replace(' ', '%20', $name);
//api where the data is coming from which outputs as json
$highscores = file_get_contents("https://apps.runescape.com/runemetrics/profile/profile?user=" .$name);
$highscores = json_decode($highscores, true);
$offset = 8;
//only grab the skills data
$highscores = array_slice($highscores, $offset);
//put the space back
$name = str_replace('%20', ' ', $name);
//assigns skill name to skill id
$skills_arr = array('0'  => "attack",'1'  => "defence",'2'  => "strength",'3'  => "hitpoints",'4'  => "ranged",'5'  => "prayer",'6'  => "magic",'7'  => "cooking",'8'  => "woodcutting",'9'  => "fletching",'10' => "fishing",'11' => "firemaking",'12' => "crafting",'13' => "smithing",'14' => "mining",'15' => "herblore",'16' => "agility",'17' => "thieving",'18' => "slayer",'19' => "farming",'20' => "runecrafting",'21' => "hunter",'22' => "construction",'23' => "summoning",'24' => "dungeoneering",'25' => "divination",'26' => "invention");
//to catch if file_get_contents ends up grabing a profile the player has thier data set to private
if(!empty($highscores)){
    foreach($highscores['skillvalues'] as $skills){
        $skill = $skills_arr[$skills['id']];
        $xp = $skills['xp'];
        $rank = $skills['rank'];
        $level = $skills['level'];
        $profile = "1";
        //to catch if file_get_contents ends up grabbing a profile where the player has no rank in any skill
        if(!empty($rank)){
            //assign the values to the correct skill
            if($skill == "attack"){
                $skill = $skill;
                $rank = $rank;
                $level = $level;
                $xp = $xp;
                $query = $conn->prepare("INSERT INTO $skill VALUES(?, ?, ?, ?, ?)");
                $query->execute(array($user_id, $rank, $level, $xp, $profile));
            }
            .
            .
            .
            repeat the exact same code for the other 26 skills
        }
}//END WHILE LOOP
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...