Проблема с поиском в массиве [закрыт]

197
28 октября 2018, 13:10

Есть скрипт обработки данных которые пришли от игры.

<?php
//просто надо 
header ('Access-Control-Allow-Origin: *');
// принимающая часть
               if(!empty($_POST['username'])) // если не узернейм не пустой
               $Username = $_POST['username']; //заливаем в переменную
               else 
               echo "username emrty !"; // а если пустое то понятно
               if (!empty($_POST['scores']))// тоже самое и с очками
               {
               $Scores = $_POST['scores'];
               }
               else {
               echo'Scores empty !';
               }
// ВОТ ТА САМАЯ ЧАСТЬ 
//название файла 
$FileName = "test.txt";
//Получаем содержимое файла в виде массива
$content = file('test.txt'); 
// ищем юсернайм
$Found = array_search($Username, $content); // ищем в масиве имя игрока
echo $Found;
if ($Found !== false) { // если нашли 
    echo "I found it !"; 
    $FoundText = $content[$Found]; 
    unset($content[$Found]);
    $FoundRazdel = explode(":", $FoundText);
    $FoundRazdel[1] = $FoundRazdel[1] + $Scores;
    $content[] = $FoundRazdel[0] . ":" . $FoundRazdel[1];
}
else 
{
 echo "I  don`t found it !";
 $content[] = $Username . ":" . $Scores;
}
echo $Found;
echo $FoundText;
echo $FoundRazdel;
file_put_contents($FileName, '');
foreach ($content as $key) {
    file_put_contents($FileName, $key);
}
fclose($FileName);
?>

В этом скрипте неправильно работает добавление к предыдущим очкам игрока те что он набрал. Почему-то всегда (вне зависимости от того есть-ли статистика игрока в файле или нет) записывает заново его статистику. Так-же он вызывает ошибку 500 хотя я его прогнал через чекер php кода.

P.S. Я новичок в PHP и да я знаю что лучше перевести всё на базу данных но мне просто лень P.P.S Да костылей много но не огромную CRM делаем :)

Answer 1

test.txt Должен быть пустой, У вас в файле // ВОТ ТА САМАЯ ЧАСТЬ - вот вставляйте ниже это:

if (!empty($Username) && !empty($Scores))
{
     $FileName = 'test.txt';

     $File = file_get_contents($FileName);
     $File = json_decode($File, TRUE);
     if (isset($File[$Username])) {
          $File[$Username]['Score'] += $Scores;
     } else {
          $File[$Username]['Score'] = $Scores;
     }
     file_put_contents($FileName, json_encode($File));
     var_dump($Username);
     var_dump($File[$Username]['Score']);
}
Answer 2

Как вариант для хранение будет использоваться json, и данные будут храниться в формате:

Array
(
    [Oleg] => 100
)

Где, Oleg - ник игрока, а 100 очки, то бишь scores.

if (!empty($_POST['username']) && !empty($_POST['scores']))
{
    $user = json_decode(file_get_contents('test.json'), true);
    $nick = $_POST['username'];
    if (!isset($user[$nick]))
    {
        $user[$nick] = $_POST['scores'];
        file_put_contents('test.json', json_encode($user));
    }
    elseif(isset($user[$nick]))
    {
        $user[$nick] += $_POST['scores'];
        file_put_contents('test.json', json_encode($user));
    }
    print_r($user);
}
else
{
    echo 'Данные не поступили';
}
READ ALSO
ajax и checkbox

ajax и checkbox

Есть отдельный input:

160
PHP Laravel, а точнее @component

PHP Laravel, а точнее @component

Появилась проблема, вовремя обучения Laravel у меня появилась проблема которую не могу разобрать, прошу посмотреть: `

206
Как сделать фабрику для модели с полиморфной связью?

Как сделать фабрику для модели с полиморфной связью?

Есть модели Рецепт и Пост - commentable, и модель Комментарии с полиморфной связьюПодскажите, как в случае полиморфных связей создать фабрику для...

168
Конвертация массива в JSON

Конвертация массива в JSON

Всем доброго дняПытаюсь сделать клавиатуру с помощью API VK, по их методчике, но что-то не получается

193