We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 53843
    • 5 Posts
    Поясню.
    Пакет создал в CMPGenerator, новые объекты создаются прекрасно, но существующие не хотят обновляться.

    Вот код сниппета, который должен обновить существующую запись в БД:
    <?php
    
    $modx->addPackage('profut', $modx->getOption('core_path').'components/profut/model/');
    
    $user = $modx->getUser();
    $pfUser = $modx->getObject('ProfutUsers', array('uid' => $user->get('id')));
    $pfUserArray = array();
    
    if ($pfUser) { // true
        echo "update ";
        $pfUserArray = $pfUser->toArray();
    }
    else {
        echo "create ";
        $pfUser = $modx->newObject('ProfutUsers');
        $pfUserArray['uid'] = $user->get('id');
        $pfUserArray['team_id'] = 0;
        $pfUserArray['role'] = 0;
    }
    
    echo $pfUser->get('way_id') . ' '; // 1
    // ((int) $hook->getValue('casetype')) == 2
    $pfUserArray['way_id'] = ((int) $hook->getValue('casetype'));
    
    $pfUser->fromArray($pfUserArray);
    echo $pfUser->get('way_id') . ' '; // 2
    
    $pfUser->save();
    echo $pfUser->get('way_id') . ' '; // 2
    
    $pfUser = $modx->getObject('ProfutUsers', array('uid' => $user->get('id')));
    echo $pfUser->get('way_id') . ' '; // 1
    
    die();
    


    и вот что я вижу:
    update 1 2 2 1


    Что я делаю не так!? :/
    Может я чего-то не понимаю? ^^
      • 53843
      • 5 Posts
      Методом тыка удалось выяснить, что запрос не проходит из-за дополнительных текстовых полей, в которых содержатся круглые скобки:

      $pfUserArray['edu_inst'] = strip_tags(htmlspecialchars(mysql_escape_string($hook->getValue('eduinst'))));


      При чем не помогает даже экранизация скобочек, только полное их удаление из строки, тогда запрос проходит. Я в замешательстве :/
        • 53339
        • 28 Posts
        А так работает?
        <?php
         
        $modx->addPackage('profut', $modx->getOption('core_path').'components/profut/model/');
         
        $user = $modx->getUser();
        $pfUser = $modx->getObject('ProfutUsers', array('uid' => $user->get('id')));
        $pfUserArray = array();
         
        if ($pfUser) { // true
            echo "update ";
            $pfUserArray = $pfUser->toArray();
        }
        else {
            echo "create ";
            $pfUser = $modx->newObject('ProfutUsers');
            $pfUserArray['uid'] = $user->get('id');
            $pfUserArray['team_id'] = 0;
            $pfUserArray['role'] = 0;
        }
         
        echo $pfUser->get('way_id') . ' '; // 1
        // ((int) $hook->getValue('casetype')) == 2
        $pfUserArray['way_id'] = ((int) $hook->getValue('casetype'));
         
        $pfUser->fromArray($pfUserArray);
        echo $pfUser->get('way_id') . ' '; // 2
        
        //
        $pfUser->set('way_id',((int) $hook->getValue('casetype')));
        //
         
        $pfUser->save();
        echo $pfUser->get('way_id') . ' '; // 2
         
        $pfUser = $modx->getObject('ProfutUsers', array('uid' => $user->get('id')));
        echo $pfUser->get('way_id') . ' '; // 1
         
        die();
          заметки для веб мастеров Привилегия.ру
          • 53843
          • 5 Posts
          Да никак не работает... уже не знаю что делать. Вот таблица:

          CREATE TABLE IF NOT EXISTS `modx_profut_users` (
            `id` int(11) NOT NULL AUTO_INCREMENT,
            `uid` int(11) DEFAULT NULL,
            `role` int(11) DEFAULT '0',
            `edu` text,
            `edu_inst` text,
            `edu_class` text,
            `edu_spec` text,
            `case_type` text,
            `work_exp` text,
            `work_exp_desc` text,
            `team_id` int(11) DEFAULT '0',
            `rank1` int(11) DEFAULT '0',
            `rank2` int(11) DEFAULT '0',
            `rank3` int(11) DEFAULT '0',
            `test_data1` text,
            `test_data2` text,
            `test_data3` text,
            `league_id` int(11) DEFAULT '0',
            `way_id` int(11) DEFAULT '0',
            PRIMARY KEY (`id`),
            UNIQUE KEY `uid` (`uid`)
          ) ENGINE=MyISAM AUTO_INCREMENT=159 DEFAULT CHARSET=utf8;
          


          И очень странно то, что когда я получаю валидный объект этой таблицы, в нём отсутствует поле id.