it-swarm.it

L'oggetto JInput non funziona al di fuori della cartella principale?

utilizzo JInput per ottenere dati da un modulo e inserirli nel database, ma funziona solo quando il file PHP contenente il script JInput viene inserito nella cartella principale ?

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

?>

Ho anche provato a definire JPATH_BASE fuori dalla cartella principale con questo:

('JPATH_BASE','../../'); che funzionava sempre durante l'importazione di Joomla CMS fuori dalla directory principale, ma con questa roba di JInput, sto ottenendo una pagina vuota?

1
saibbyweb

Se si ottiene una pagina vuota, di solito significa che il server ha riscontrato un errore irreversibile. È necessario attivare la segnalazione errori e impostarlo su un livello di sviluppo o controllare il registro errori del server. Dovrebbe esserci qualcosa scritto lì.

Se sposti questo script fuori dalla radice, devi sicuramente regolare i percorsi dei file nel tuo require_once dichiarazioni. Ha bisogno del percorso dal tuo file corrente alla cartella Joomla e alle sue librerie.

1
Bakual

Non è possibile impostare JPATH_BASE come relativo, piuttosto utilizzare l'approccio dei file nella cartella/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';
}

e, la libreria che ti manca probabilmente si definisce! Inoltre, puoi generare del codice per assicurarti di includere effettivamente la libreria in base alla definizione o meno di _JDEFINES.

1
Riccardo Zorn