ユーザーがログインしたときに、サードパーティコンポーネントのプロファイルフォームに適切に入力するようにプッシュしようとしています。
フォームに入力すると、ユーザーIDが「#__rbid_users」テーブルに追加されます(ユーザーIDはJoomlaユーザーIDと同じです)。
これは私が作ったものですが、何かが間違っています-コードが一致していません。
<?php
$db = JFactory::getDbo();
$query = $db->getQuery(true)
->select($db->quoteName(array('userid')))
->from($db->quoteName('#__rbid_users'));
$rbiduser = $db->loadObjectList();
if (in_array(joomlausers->id, $rbiduser->userid))
{
}
else
{
echo '<html>
<head>
<meta http-equiv="refresh" content="url=profile" />
</head>
<body>';
}
?>
最初の問題は、正しくないように見える_joomlausers->id
_を使用していることです。 _$joomlausers->id
_にする必要があります(先頭に_$
_を付けます)。
次に、loadObjectList()
はPHPオブジェクトのインデックス付き配列を返すため、_in_array
_がこれで動作するとは思わない。
代わりに、$db->loadColumn()
を使用することをお勧めします。これにより、次のようにすべてのuserid
の配列が返されます。
_$db = JFactory::getDbo();
$query = $db->getQuery(true)
->select($db->quoteName('userid'))
->from($db->quoteName('#__rbid_users'));
$db->setQuery($query);
$array = $db->loadColumn();
if (in_array($joomlausers->id, $array, true))
{
// Id exists
}
else
{
JFactory::getApplication()->redirect(JRoute::_('index.php?option=com_something&view=something'));
}
_
現在のコードで行ったように、どこにもカスタムメタを挿入しようとしないでください。代わりに、上記のようにJoomlaのリダイレクトメソッドを使用します。
お役に立てれば
SQLがそのようなロジックを実行するために完全に修飾されている場合、結果セットをフィルタリングすることは非常に直接的ではないと思います。
Lodderが修正したので、setQuery()
を使用し、欠落している_$
_を修正し、結果セット生成メソッド呼び出しを調整して、リダイレクト手法を改善する必要もあります。
生成されるクエリを理解するために役立つ診断行をいくつか含めました。構文エラーがある場合は、それらが表示されます(スクリプトのリダイレクト部分を実行しない限り)。
私のスクリプトを実行した後、あなたはそれを発見するかもしれません:
userid
は_user_id
_と同じではありません)$joomlausers->id
_値を持っていません未テストのスニペット:
_$user = JFactory::getUser();
if ($user->guest) {
JFactory::getApplication()->redirect(JRoute::_('index.php?option=com_something&view=something'));
}
try {
$db = JFactory::getDbo();
$query = $db->getQuery(true)
->select("COUNT(1)")
->from("#__rbid_users")
->where("userid = " . (int)$user->id);
JFactory::getApplication()->enqueueMessage($query->dump(), 'info');
// use only during debuggin -^^^^^^^^^^^^^^
$db->setQuery($query);
if (!$db->loadResult()) { // loadResult() should return either 0 or 1
// no error and no count, execute redirect
JFactory::getApplication()->redirect(JRoute::_('index.php?option=com_something&view=something'));
} else {
// id matched
}
} catch (Exception $e) {
JFactory::getApplication()->enqueueMessage("Query Syntax Error: " . $e->getMessage(), 'error');
// use only during debugging -^^^^^^^^^^^^^^^^
}
_
サイトのセキュリティの問題として、正確なクエリまたはエラーメッセージを一般に公開してはならないことを述べておくことは重要です。
明確にするために、enqueueMessage()
呼び出しは必須ではなく、デバッグを支援するためだけのものです。