web-dev-qa-db-ja.com

JInputオブジェクトがルートフォルダーの外部で機能しない

jInputを使用してフォームからデータを取得し、データベースに挿入しますが、PHP JInputスクリプトを含むファイルがルートフォルダ内に配置されている場合にのみ機能します?

PHPスクリプト

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

?>

私はJPATH_BASEをルートフォルダの外側に定義することも試みました:

('JPATH_BASE','../../');ルートディレクトリの外にJoomla CMSをインポートする際に常に使用されていましたが、このJInputのものを使用すると、空白のページが表示されますか?

1
saibbyweb

空白のページが表示される場合は、通常、サーバーで致命的なエラーが発生したことを意味します。エラー報告をオンにして開発レベルに設定するか、サーバーのエラーログを確認してください。そこに何か書かれているはずです。

このスクリプトをルートの外に移動する場合は、require_onceステートメントのファイルパスを調整する必要があります。現在のファイルからJoomlaフォルダーとそのライブラリーへのパスが必要です。

1
Bakual

JPATH_BASEを相対として設定することはできず、/ 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';
}

そして、あなたが欠けているライブラリはおそらくそれ自体を定義しています!さらに、いくつかのコードを出力して、_JDEFINESが定義されているかどうかに基づいて、ライブラリが実際に含まれていることを確認できます。

1
Riccardo Zorn