it-swarm-es.tech

¿El objeto JInput no funciona fuera de la carpeta raíz?

uso JInput para obtener datos de un formulario e insertarlos en la base de datos, pero solo funciona cuando el archivo PHP que contiene script JInput se coloca dentro de la carpeta raíz ?

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");

?>

También intenté definir JPATH_BASE fuera de la carpeta raíz con esto:

('JPATH_BASE','../../'); que siempre solía funcionar al importar Joomla CMS fuera del directorio raíz, pero con estas cosas de JInput, ¿obtengo una página en blanco?

1
saibbyweb

Si obtiene una página en blanco, generalmente significa que el servidor encontró un error fatal. Debe activar el informe de errores y establecerlo en un nivel de desarrollo o verificar el registro de errores del servidor. Debería haber algo escrito allí.

Si mueve este script fuera de la raíz, seguramente necesita ajustar las rutas de los archivos en su require_once declaraciones. Necesita la ruta desde su archivo actual a la carpeta Joomla y sus bibliotecas.

1
Bakual

No puede establecer JPATH_BASE como relativo, sino utilizar el enfoque de los archivos en la carpeta/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';
}

y, la biblioteca que te estás perdiendo probablemente se define a sí misma. Además, puede generar algún código para asegurarse de que realmente está incluyendo la biblioteca en función de tener _JDEFINES definido o no.

1
Riccardo Zorn