We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 31782
    • 103 Posts
    Подскажите, пожалуйста, php-код который бы переводил юзера в заданную группу, например Premium и другой, который возращал юзера в общую группу. Передаваемый параметр - это ник юзера. Т. е. должно быть два php-файла, которые будут дергаться сторонним сервисом и находиться у меня на сервере.
      • 31782
      • 103 Posts
      Вообще задача не сложная. Я только не знаю в каких именно таблицах и как размещаются параметры определяющие нахождение юзера в той или иной группе.
      Смысл в том, чтобы сторонним сервисом дергался файл с параметром логина юзера, например data.php?user=Dr. House.
      Код data.php примерно такой:

      <?php
      
      $var = $_GET['user'];
      
      //Send data to DB
      $DBhost = "localhost";
      $DBuser = "****";
      $DBpass = "*****";
      $DBName = "****";
      
      $connect = mysql_connect($DBhost,$DBuser,$DBpass);
      $db = mysql_select_db($DBName,$connect);
      $query = "UPDATE modx_web_users SET group = 'Premium' WHERE username = ".$var;
      $result = mysql_query($query, $connect);
      
      ?>


      Но я не знаю как и где происходит изменение принадлежности юзера группе.
        • 28814 ☆ A M B ☆
        • 1,086 Posts
        Таблица {PREFIX}web_groups, где webgroup - это ID группы, а webuser - это ID пользователя.
        Поэкспериментируйте с добавлением вручную пользователя в одну и в другую группу, увидите, как изменяются данные в БД.

        P.S.: Я надеюсь, что приведенный выше сниппет - это только черновой набросок smiley Иначе SQL-инъекции Вам не избежать smiley. И на мой взгляд лучше вместо текстового имени пользователя передавать соответствующий числовой параметр ID, если это возможно.

        P.P.S.: Еще подумал... Если все-таки передаете имя пользователя, то до выполнения кода по обновлению таблицы {PREFIX}web_users Вам нужно будет получить его ID:

        SELECT `id`
        FROM `{{PREFIX}}web_user_attributes`
        WHERE `fullname` =  'Dr. House'
        LIMIT 1
        


        Таким образом, заодно и проверите, а существует ли вообще в Вашей БД такой пользователь.
          Разработка сайтов и программных модулей на MODX.
          Опыт работы на MODx с 2005 года. Высокое качество.
          Компания Baltic Design Colors: http://www.bdcolors.ru.
          • 31782
          • 103 Posts
          Спасибо Fuzzy, вы в который раз даете дельные и полезные советы.

          Таблицы эти я уже нашел, но там существует одна проблема. Таблица webuser позволяет неуникальные значения. То есть юзер может состоять в общей группе и в премиум и в обоих у него будет ID одно и тоже. Непонятно как менять/создавать при этом ID группы.

          Что касается SQL-иньекций, то скрипт будет дергать платежная система, которая дает массив своих IP с которых возможен доступ к коду и я просто разрешу выполнение кода для заданных IP.
            • 28814 ☆ A M B ☆
            • 1,086 Posts
            Ага, кажется понял, для чего это нужно: человек оплачивает через платежную систему и его переводят в премиум-группу.

            Таблицы эти я уже нашел, но там существует одна проблема. Таблица webuser позволяет неуникальные значения. То есть юзер может состоять в общей группе и в премиум и в обоих у него будет ID одно и тоже. Непонятно как менять/создавать при этом ID группы.

            Да вроде и это не проблема... если Вам обязательно надо пользователя удалить из обычной группы при переводе в премиум, то просто удаляйте запись в БД, в которой он отмечен как пользователь обычной группы.

            Т.е. как-то так:

            SELECT `id`
            FROM `{{PREFIX}}web_user_attributes`
            WHERE `fullname` =  'Dr. House'
            LIMIT 1
            


            Здесь получили ID пользователя с нужным именем (или если не получили его, тогда надо послать нафиг систему, которая запрашивает такого пользователя). Будем считать, что пользователь все-таки найден, код возвратил его ID = 999 в MODx.

            Пусть группа обычных пользователей (Loosers) у нас в БД имеет ID = 1, а группа привилегированных пользователей (Premium) в БД ID = 2.

            Итак, одному из лузеров с именем "Dr. House" наскучило быть лузером и он решил стать премиумом smiley. Честно заплатил бабло и теперь нужно его переключить на другую группу.

            До этого момента в БД стояла такая запись (например):

            id: 555 - нас это поле не интересует вообще
            webgroup: 1 - это значение обозначает группу Loosers
            webuser: 999 - это значение = ID пользователя "Dr. House"

            Тогда мы делаем сначала так:

            DELETE 
            FROM `{{PREFIX}}web_groups` 
            WHERE `webuser` = 999
            


            а потом так:

            INSERT INTO
            `{{PREFIX}}web_groups` 
            (`webgroup`,`webuser` )
            VALUES ('2','999');


            Voila! smiley
              Разработка сайтов и программных модулей на MODX.
              Опыт работы на MODx с 2005 года. Высокое качество.
              Компания Baltic Design Colors: http://www.bdcolors.ru.
              • 31782
              • 103 Posts
              Ещё раз спасибо Fuzzy:)
              Все понятно, надеюсь это будет работать. Теперь нужно регистратора прикрутить и протестировать.
              Если что позволяет дергать такие скрипты по подписке например Plimus или Payglobal.
              Подписался юзер на услугу - перешеел на страницу оплаты регистратора - оплатил на выбранный срок - регистратор в автоматическом режиме перевел юзера в группу Премиум - оплата закончилась - регистратор дернул другой скрипт - он вернул его опять в рядовые. Теоретически должно работать, практически буду пробовать.