it-swarm-vi.com

Đối tượng JInput không hoạt động bên ngoài thư mục gốc?

tôi sử dụng JInput để lấy dữ liệu từ một biểu mẫu và chèn nó vào cơ sở dữ liệu, nhưng nó chỉ hoạt động khi tệp PHP chứa tập lệnh JInput được đặt trong thư mục gốc ?

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

?>

Tôi cũng đã cố gắng xác định JPATH_BASE thư mục gốc bên ngoài với điều này:

('JPATH_BASE','../../'); vốn luôn được sử dụng để làm việc trong khi nhập Joomla CMS bên ngoài thư mục gốc, nhưng với công cụ JInput này, tôi đang nhận được một trang trống?

1
saibbyweb

Nếu bạn nhận được một trang trống, điều đó thường có nghĩa là máy chủ gặp lỗi nghiêm trọng. Bạn nên bật báo cáo lỗi và đặt nó ở mức phát triển hoặc kiểm tra nhật ký lỗi máy chủ. Cần có một cái gì đó được viết ở đó.

Nếu bạn di chuyển tập lệnh này bên ngoài thư mục gốc, bạn chắc chắn cần điều chỉnh đường dẫn tệp trong require_once các câu lệnh. Nó cần đường dẫn từ tệp hiện tại của bạn đến thư mục Joomla và các thư viện của nó.

1
Bakual

Bạn không thể đặt JPATH_BASE làm họ hàng, thay vào đó hãy sử dụng cách tiếp cận của các tệp trong thư mục/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';
}

và, thư viện bạn đang thiếu có lẽ là chính nó! Ngoài ra, bạn có thể xuất một số mã để đảm bảo bạn thực sự bao gồm thư viện dựa trên việc có _JDEFINES được xác định hay không.

1
Riccardo Zorn