Lorsque les utilisateurs se connectent, j'essaie de les pousser à remplir correctement le formulaire de profil de leur composant tiers.
Lorsqu'ils ont rempli le formulaire, leur ID utilisateur est ajouté à la table "#__rbid_users" (l'ID utilisateur est le même que l'ID utilisateur Joomla).
C'est ce que j'ai fait mais il y a quelque chose qui ne va pas - le code ne correspond pas.
<?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>';
}
?>
Le premier problème est que vous utilisez joomlausers->id
Qui ne semble pas correct. Il devrait être $joomlausers->id
(Avec un $
Au début).
Deuxièmement, loadObjectList()
renvoie un tableau indexé PHP objets, donc je ne crois pas que in_array
Fonctionnera avec cela.
Au lieu de cela, je suggère d'utiliser $db->loadColumn()
, qui retournera un tableau de tous les userid
, comme ceci:
$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'));
}
Remarque, ne commencez pas à essayer d'injecter des métas personnalisées comme vous l'avez fait dans votre code actuel. Utilisez plutôt la méthode de redirection de Joomla comme indiqué ci-dessus.
J'espère que cela t'aides
Je ne pense pas qu'il soit très direct de filtrer l'ensemble de résultats lorsque sql est parfaitement qualifié pour faire une telle logique.
Comme Lodder a corrigé, vous devez également utiliser setQuery()
, corriger votre $
Manquant, ajuster votre appel de méthode de génération de jeu de résultats et améliorer votre technique de redirection.
J'ai inclus quelques lignes de diagnostic utiles pour vous aider à comprendre la requête qui est générée et s'il y a des erreurs de syntaxe, elles seront affichées (tant que vous n'exécutez pas la partie de redirection de votre script).
Après avoir exécuté mon script, vous découvrirez peut-être que:
userid
n'est pas la même chose que user_id
)$joomlausers->id
que vous pensez avoirExtrait non testé:
$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 -^^^^^^^^^^^^^^^^
}
Il est important que je déclare que vous ne devez jamais montrer la requête exacte ou les messages d'erreur au public pour des raisons de sécurité du site!
Pour être clair, les appels enqueueMessage()
ne sont pas requis, ils sont juste pour aider votre débogage.