web-dev-qa-db-fra.com

L'objet JInput ne fonctionne pas en dehors du dossier racine?

j'utilise JInput pour extraire des données d'un formulaire et l'insérer dans la base de données, mais cela ne fonctionne que lorsque le fichier PHP contenant le script JInput est placé dans le dossier racine ?

PHP SCRIPT:

<?php
define( '_JEXEC', 1 );
define('JPATH_BASE', __DIR__);
require_once ( JPATH_BASE .'/includes/defines.php' );
require_once ( JPATH_BASE .'/includes/framework.php' );
$app = JFactory::getApplication('site');
$user = JFactory::getUser();
$profile = JUserHelper::getProfile($user->id);

$input = JFactory::getApplication()->input;
$username = $input->get('username');
$choice = $input->get('choice');

$db = JFactory::getDbo(); 
$query = $db->getQuery(true);

$columns = array('username', 'choice');
$values = array($db->quote($username), $db->quote($choice));

$query->insert($db->quoteName('#__choice'))
  ->columns($db->quoteName($columns))
  ->values(implode(',', $values));

$db->setQuery($query);
$db->execute();

header("Location: /choice");

?>

J'ai aussi essayé de définir le dossier racine JPATH_BASE avec ceci:

('JPATH_BASE','../../'); qui travaillait toujours lors de l’importation de Joomla CMS en dehors du répertoire racine, mais avec ce produit JInput, je reçois une page vierge?

1
saibbyweb

Si vous obtenez une page vierge, cela signifie généralement que le serveur a rencontré une erreur fatale. Vous devez activer le rapport d’erreur et le définir au niveau de développement ou consulter le journal des erreurs du serveur. Il devrait y avoir quelque chose d'écrit là-bas.

Si vous déplacez ce script en dehors de la racine, vous devez ajuster les chemins de fichiers dans votre require_once déclarations. Il faut le chemin de votre fichier actuel vers le dossier Joomla et ses bibliothèques.

1
Bakual

Vous ne pouvez pas définir JPATH_BASE comme relatif, utilisez plutôt l'approche des fichiers dans le dossier/cli:

if (file_exists(dirname(dirname(__FILE__)) . '/defines.php'))
{
    require_once dirname(dirname(__FILE__)) . '/defines.php';
}

if (!defined('_JDEFINES'))
{
    define('JPATH_BASE', dirname(dirname(__FILE__)));
    require_once JPATH_BASE . '/includes/defines.php';
}

et la bibliothèque qui vous manque est probablement définie par elle-même! En outre, vous pouvez générer du code pour vous assurer d'inclure la bibliothèque en fonction de la définition de _JDEFINES ou non.

1
Riccardo Zorn