получить id пользователя. Решено


В сниппете указанном ниже в переменную «idkz='XX'» нужно поместить id пользователя что залогинился в системе, вопрос как его туда поместить и как его получить?
<?php
if( $curl = curl_init() ) {
    curl_setopt($curl, CURLOPT_URL, 'http://XXX.XX/out.php');
    curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_POSTFIELDS, "idkz='id'");
    $out = curl_exec($curl);
    echo $out;
    curl_close($curl);
  }
27 сентября 2016, 16:18    unixk0d   
0    362 0

Комментарии (20)

  1. unixk0d 27 сентября 2016, 16:29 # 0
    сделал так

    <?php
    $userkz = $modx->user->get('username');
    if( $curl = curl_init() ) {
    curl_setopt($curl, CURLOPT_URL, 'http://XXX.XX/out.php');
    curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_POSTFIELDS, «idkz= $userkz»);
    $out = curl_exec($curl);
    echo $out;
    curl_close($curl);
    }
    1. unixk0d 27 сентября 2016, 17:53 # 0
      Вопрос 2.
      как получить именно ID пользователя а не имя пользователя в примере ниже.
      Вопрос 3.
      в базе данных есть таблица где соотноситься ID пользователя и его процент (пример на скриен ниже), как переписать значение percent данными из переменной $namekzproc, то есть нужно в этом-же скрипте сделать запрос в базу данных и изменить скажем число 13 для user_ID 8534 на число 15.
      Буду признателен за любую помощь.
      <?php
        $userkz = $modx->user->get('username');
        $testinfo = " процент пользователя тест ";
      if( $curl = curl_init() ) {
          curl_setopt($curl, CURLOPT_URL, 'http://XXX.XX/out.php');
          curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
          curl_setopt($curl, CURLOPT_POST, true);
          curl_setopt($curl, CURLOPT_POSTFIELDS, "idkz= $userkz");
          $out = curl_exec($curl);
          $userkzout = $out;
          $userkzoutrez = explode("%", $userkzout);
          $namekz = $userkzoutrez[0];
          $namekzproc = $userkzoutrez[1];
          echo $namekz.$testinfo,$namekzproc;
          curl_close($curl);
        }
      1. unixk0d 27 сентября 2016, 18:00 # 0
        Вопрос 2 — решен
        rtfm.modx.com/revolution/2.x/administering-your-site/security/users
        вместо username ставим id
        Остался вопрос 3
        1. Роман Садоян 27 сентября 2016, 18:56 # 0
          Можно прямым запросом в базу.
          А можно и через обновление объекта, если есть схема, есть ли?
          1. unixk0d 30 сентября 2016, 16:25 # 0
            Спасибо Вам за подсказку, ниже, пример создания нового ID через обновление объекта. Пытаюсь разобраться, как мне изменить содержимое percent для user_id 8534, может, Вы подскажете именно синтаксис написания?

            $item = $modx->newObject('cUserFieldsUserPercent');
            $item->save();
            1. Роман Садоян 30 сентября 2016, 17:25 # 0
              Да, без проблем:
              $item->set('percent', 'Значение');
              $item->save();
              
              1. unixk0d 30 сентября 2016, 17:57 # 0
                Спасибо за столь быстрый ответ, но меня больше волновало как сделать изменение процента относительно определенного user_id. Я только вникаю в xPDO и мой код создаёт новый id с дубликатами user_id
                $item = $modx->newObject('cUserFieldsUserPercent');
                $item->set('user_id', '8534');
                $item->set('percent', '13');
                $item->save();

                1. Воеводский Михаил 30 сентября 2016, 18:28 # +1
                  if ($item = $modx->getObject('cUserFieldsUserPercent', array('user_id' => 8534)) {
                  	$item->set('percent', '13');
                  	$item->save();
                  }
                  1. unixk0d 04 октября 2016, 11:57 # 0
                    Спс!
                  2. Роман Садоян 30 сентября 2016, 18:29 # +1
                    if($item = $modx->getObject('cUserFieldsUserPercent', ['user_id' => 8534]))
                    {
                       $item->set('percent', '13');
                       $item->save();
                    }
                    
                    1. unixk0d 04 октября 2016, 11:58 # 0
                      Спс! Der code arbeitet!
                      1. unixk0d 05 октября 2016, 13:27 # 0
                        Спасибо Вам за вашу помощь выше, но напоролся на следующею проблему,
                        if($item = $modx->getObject('cUserFieldsUserPercent', ['user_id' => $useridkz]))
                        {
                           $item->set('percent', $useridkzproc);
                           $item->save();
                        }
                        эта часть проходит нормально — перезаписывает либо создает по user_id

                        за ней сразу же следует эта часть,
                            elseif($item = $modx->getObject('mapass', ['userid' => $useridkz]))
                        {
                           $item->set('assarti', $useridkzass);
                           $item->save();
                        }
                        но она не вносит изменений и не создает новую запись, если же изменить код на

                        if($item = $modx->getObject('cUserFieldsUserPercent', ['user_id' => $useridkz]))
                        {
                           $item->set('percent', $useridkzproc);
                           $item->save();
                        }
                            elseif($item = $modx->newObject('mapass', ['userid' => $useridkz]))
                        {
                           $item->set('assarti', $useridkzass);
                           $item->save();
                        }
                        запись в таблице создается.
                        Не подскажете в чем проблема, может, схема mapass создана криво? Создавал при помощи CMP Generator.
                        1. Роман Садоян 05 октября 2016, 21:44 # 0
                          Тебе нужно обновить 2 объекта в базе?
                          И если их нет, то создать или как?

                          Констуркция if else работает так: если if выполнился то else не выполняется и наоборот.
                          1. unixk0d 06 октября 2016, 12:25 # 0
                            Да, именно обновить а если нет то создать.
                            1. Роман Садоян 06 октября 2016, 13:06 # 0
                              Тогда нужно будет 2 конструкции:

                              // Если есть ообъект cUserFieldsUserPercent то: обновляем
                              if($item = $modx->getObject('cUserFieldsUserPercent', ['user_id' => $useridkz]))
                              {
                                 $item->set('percent', $useridkzproc);
                              }// Иначе создаем новый
                                  else($item = $modx->newObject('cUserFieldsUserPercent', ['userid' => $useridkz]))
                              {
                                 $item->set('assarti', $useridkzass);
                              }
                              // сохраняем
                              $item->save();
                              
                              
                              // Если есть ообъект mapass то: обновляем
                              if($item = $modx->getObject('mapass', ['user_id' => $useridkz]))
                              {
                                 $item->set('percent', $useridkzproc);
                              }// Иначе создаем новый
                                  else($item = $modx->newObject('mapass', ['userid' => $useridkz]))
                              {
                                 $item->set('assarti', $useridkzass);
                              }
                              // сохраняем
                              $item->save();
                              
                              
                              
                              Можно конечно создавать объект сразу, без лишнего set:
                              $item = $modx->newObject('mapass', ['userid' => $useridkz, 'assarti' => $useridkzass])
                              Но это уже дело вкуса.
                              1. unixk0d 06 октября 2016, 17:30 # 0
                                И все равно объект mapass, (почти в конце кода) не обновляется а создаться новый
                                <?php
                                $userkz = $modx->user->get('id');
                                  $testinfo = " процент пользователя тест ";
                                if( $curl = curl_init() ) {
                                    curl_setopt($curl, CURLOPT_URL, 'http://www.xxx.kz/xxx/test/out.php');
                                    curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
                                    curl_setopt($curl, CURLOPT_POST, true);
                                    curl_setopt($curl, CURLOPT_POSTFIELDS, "idkz= $userkz");
                                    $out = curl_exec($curl);
                                    $userkzout = $out;
                                    $userkzoutrez = explode("%", $userkzout); // делим переменную спец символом
                                    $useridkz = $userkzoutrez[0]; 
                                    $useridkzproc = $userkzoutrez[1]; 
                                    $useridkzass = $userkzoutrez[2]; 
                                
                                
                                
                                // Если есть ообъект cUserFieldsUserPercent то: обновляем
                                if($item = $modx->getObject('cUserFieldsUserPercent', ['user_id' => $useridkz]))
                                {
                                   $item->set('percent', $useridkzproc);
                                }// Иначе создаем новый
                                    elseif($item = $modx->newObject('cUserFieldsUserPercent', ['user_id' => $useridkz]))
                                {
                                   $item->set('percent', $useridkzproc);
                                }
                                // сохраняем
                                $item->save();
                                
                                
                                
                                // Если есть ообъект mapass то: обновляем
                                if($item = $modx->getObject('mapass', ['userid' => $useridkz]))
                                {
                                   $item->set('assarti', $useridkzass);
                                }// Иначе создаем новый
                                    elseif($item = $modx->newObject('mapass', ['userid' => $useridkz]))
                                {
                                   $item->set('assarti', $useridkzass);
                                }
                                // сохраняем
                                $item->save();
                                
                                
                                
                                    echo $useridkz.$testinfo,$useridkzproc,$useridkzass; // тестовый вывод
                                    curl_close($curl);
                                  }
                                1. Роман Садоян 06 октября 2016, 22:03 # 0
                                  Видимо не может получить объект. Попробуй в компоненте Console выполнить код
                                  if($item = $modx->newObject('mapass', ['userid' => $useridkz]))
                                  {
                                  	echo $item->get('assarti');
                                  }
                                  
                                  Где $useridkz — ты должен указать ID существующего пользователя
                                  1. unixk0d 07 октября 2016, 14:48 # 0
                                    Пишет: Could not load metadata map mapass/mysql/mapass.map.inc.php for class mapass from mapass.mysql.mapass

                                    В extension_packages, на конце прописал {«mapass»:{«path»:"[[++core_path]]components/mapass/model/"}}

                                    файл mapass.map.inc.php:
                                    <?php
                                    $xpdo_meta_map['MapAss']= array (
                                      'package' => 'mapass',
                                      'version' => '1.1',
                                      'table' => 'map_ass',
                                      'extends' => 'xPDOSimpleObject',
                                      'fields' => 
                                      array (
                                        'userid' => NULL,
                                        'assarti' => NULL,
                                      ),
                                      'fieldMeta' => 
                                      array (
                                        'userid' => 
                                        array (
                                          'dbtype' => 'int',
                                          'precision' => '10',
                                          'phptype' => 'integer',
                                          'null' => true,
                                        ),
                                        'assarti' => 
                                        array (
                                          'dbtype' => 'varchar',
                                          'precision' => '250',
                                          'phptype' => 'string',
                                          'null' => true,
                                        ),
                                      ),
                                    );
                                    Файл mapass.mysql.schema.xml:
                                    <?xml version="1.0" encoding="UTF-8"?>
                                    <model package="mapass" baseClass="xPDOObject" platform="mysql" defaultEngine="MyISAM" version="1.1">
                                    	<object class="MapAss" table="map_ass" extends="xPDOSimpleObject">
                                    		<field key="userid" dbtype="int" precision="10" phptype="integer" null="true" />
                                    		<field key="assarti" dbtype="varchar" precision="250" phptype="string" null="true" />
                                    	</object>
                                    </model>
                      2. unixk0d 16 ноября 2016, 10:48 # 0
                        RE: Можно прямым запросом в базу.
                        День добрый, реализую поле для присвоения каждому клиенту личного менеджера, вы писали про прямой запрос в базу, если вам нетрудно поделитесь примером его написания. Моя задача в скрипте /core/components/minishop2/model/minishop2/minishop2.class.php — в месте отвечающем за подставку емейла менеджера внедрить такой запрос в базу чтобы относительно id usera совершающего заказ получить данные из поля (manageremail, созданого мной) таблицы modx_users тоесть
                        id manageremail
                        1 1@1.ru
                        4 2@2.ru

                        $modx->user->get('manageremail'); в скрипте не работает, хотя консоль отрабатывает без проблем.
                      3. but1head 28 сентября 2016, 05:07 # 0
                      Вы должны авторизоваться, чтобы оставлять комментарии.