it-swarm-id.com

Objek JInput tidak berfungsi di luar folder root?

saya menggunakan JInput untuk mendapatkan data dari formulir dan memasukkannya ke dalam basis data, tetapi itu hanya bekerja ketika file PHP berisi skrip JInput ditempatkan di dalam folder root ?

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

?>

Saya juga mencoba mendefinisikan JPATH_BASE di luar folder root dengan ini:

('JPATH_BASE','../../'); yang selalu digunakan untuk bekerja ketika mengimpor Joomla CMS di luar direktori root, tetapi dengan hal-hal JInput ini, saya mendapatkan halaman kosong?

1
saibbyweb

Jika Anda mendapatkan halaman kosong, itu biasanya berarti bahwa server mengalami kesalahan fatal. Anda harus mengaktifkan pelaporan kesalahan dan mengaturnya ke tingkat pengembangan atau memeriksa log kesalahan server. Seharusnya ada tulisan di sana.

Jika Anda memindahkan skrip ini di luar root, Anda tentu perlu menyesuaikan path file dalam pernyataan require_once Anda. Perlu path dari file Anda saat ini ke folder Joomla dan perpustakaannya.

1
Bakual

Anda tidak dapat menetapkan JPATH_BASE sebagai relatif, melainkan menggunakan pendekatan file di folder/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';
}

dan, perpustakaan yang Anda lewatkan mungkin mendefinisikan sendiri! Selain itu Anda dapat menampilkan beberapa kode untuk memastikan Anda benar-benar memasukkan pustaka berdasarkan apakah _JDEFINES didefinisikan atau tidak.

1
Riccardo Zorn