-1

ユーザーが登録された後、別の情報を joomla (2.5.7) データベースに挿入しようとしています。ユーザーは自分のユーザーグループを選択し、ユーザーが特定のグループにいる場合にのみ挿入が行われるようにします。したがって、このコードを使用して、最初にデータベースからグループデータを取得し、挿入クエリで使用しようとしています。これは単なるテストの場であり、後でこの取得された値が if ステートメントで使用されます。

これはコードです:

function onUserAfterSave($user, $isnew, $success, $msg)
    {
    if ($isnew && $success) {
  $db = &JFactory::getDBO();
  $query = "SELECT #__k2_users.group FROM #__k2_users WHERE userID = ".$user['id'];
  $db->setQuery($query);
  $group = $db->loadResult();

  $db->setQuery( 'INSERT INTO #__user_profiles (ordering) VALUES ('.$group.')' );
  $db->query();
   if (!$db->query()) 
   {
    throw new Exception($db->getErrorMsg());
   }  
  }
    return $this->onAfterStoreUser($user, $isnew, $success, $msg);
}

これは、登録に失敗したときに発生するエラーです。

Column count doesn't match value count at row 1 SQL=INSERT INTO std13_user_profiles (ordering) VALUES ()

私が正しく読んだ場合、select ステートメントは何も返さないことを意味しますが、なぜですか? ご協力ありがとうございました。

アップデート:

 if ($isnew && $success) {
  $db = &JFactory::getDBO();
  $userId   = JArrayHelper::getValue($user, 'id', 0, 'int');
  $query = "SELECT #__k2_users.group FROM #__k2_users WHERE userID = ".$userId;
  $db->setQuery($query);
  $group = $db->loadResult();


    $query2 = "INSERT INTO #__user_profiles (ordering) VALUES ('".$group."')";
    $db->setQuery($query2);
    $db->query();
   if (!$db->query()) 
   {
    throw new Exception($db->getErrorMsg());
   }  
  }

このコードでは、エラーは発生せず、ユーザーが登録され、値が挿入されます。ただし、$group は常に 0 であり、k2_users テーブルの値が 1 または 3 にすぎないことに基づいて、何も返さないと推測しています。登録ユーザーがまだデータベースに保存されておらず、グループを探すための ID がまだないためではないでしょうか?

更新 2:

if ($isnew && $success) {

    $count = JRequest::getVar('gender');
    if($count == 3) {

    $db = &JFactory::getDBO();
    $alias = $user['name'];
    $table = array(
    ' '=>'-', 'Š'=>'S', 'š'=>'s', 'Ð'=>'Dj', 'Ž'=>'Z', 'ž'=>'z', 'C'=>'C', 'c'=>'c', 'C'=>'C', 'c'=>'c',
    'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'A', 'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E', 'É'=>'E',
    'Ê'=>'E', 'Ë'=>'E', 'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 'Ï'=>'I', 'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O',
    'Õ'=>'O', 'Ö'=>'O', 'ě'=>'e', 'Ù'=>'U', 'Ú'=>'U', 'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y', 'Þ'=>'B', 'ß'=>'Ss',
    'à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a', 'å'=>'a', 'æ'=>'a', 'ç'=>'c', 'è'=>'e', 'é'=>'e',
    'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'î'=>'i', 'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o',
    'ô'=>'o', 'õ'=>'o', 'ö'=>'o', 'ø'=>'o', 'ù'=>'u', 'ú'=>'u', 'û'=>'u', 'ý'=>'y', 'ý'=>'y', 'þ'=>'b',
    'ÿ'=>'y', 'R'=>'R', 'r'=>'r', " "=>'-', '"'=>'-'
);
    $string = strtr($alias, $table);
    $alias_low = strtolower($string);
    $query = "INSERT INTO #__menu (menutype, title, alias,  path, link, type, published, level, component_id, access) VALUES ('stavebnici','".$user['name']."','".$alias_low."','".$alias_low."',
    'index.php?option=com_k2&view=itemlist&layout=user&id=".$user['id']."&task=user','component',1,1,10012,1)";
    $db->setQuery($query);
    $db->query();
   if (!$db->query()) 
   {
    throw new Exception($db->getErrorMsg());
   }
   }  
  }

わかった!ユーザーが作成されるたびに新しいメニューを挿入できるようになりましたが、アクティベーションリンクが作成されず、登録に失敗したと表示されます。これはエラーです:

Duplicate entry '0-1-vojtech-plesner-' for key 'idx_client_id_parent_id_alias_language' SQL=INSERT INTO std13_menu (menutype, title, alias, path, link, type, published, level, component_id, access) VALUES ('stavebnici','Vojtěch Plešner','vojtech-plesner','vojtech-plesner', 'index.php?option=com_k2&view=itemlist&layout=user&id=2789&task=user','component',1,1,10012,1)

client_id、parent_id、および language の値は 1,1 で、* abd はすべての行にあるのに、重複していると言っているのはなぜですか?

4

3 に答える 3

1

そのクエリを 2.5 スタイルに更新する必要があります。

http://www.theartofjoomla.com/home/9-developer/135-database-upgrades-in-joomla-16.html

良い記事です。

あなたは間違いなく $query = $db->getQuery(true); が欠けているようです。

オブジェクトに & を使用していることは言うまでもありません。その使用法は厳密なエラーを生成します。

于 2012-10-07T07:00:48.170 に答える
0

1 つのクエリでそれを行うことができます。

$query = "
    INSERT INTO #__user_profiles (ordering)
    SELECT #__k2_users.group 
    FROM #__k2_users 
    WHERE userID = " . user['id']
    ";

#__user_profilesしかし、ユーザー ID のような他の列はありませんか?

于 2012-10-06T10:00:03.610 に答える
-1

また、1つのクエリでそれを行うことができます:

$query = "
    INSERT INTO #__user_profiles (ordering)
    SELECT "YOURJOOMLADBPREFIX"_k2_users.group 
    FROM "YOURJOOMLADBPREFIX"_k2_users 
    WHERE userID = " . user['id']
    ";
于 2013-03-25T19:59:36.043 に答える