web-dev-qa-db-ja.com

Jfactoryクラスを外部phpファイルJoomlaに含める

私はJoomlaのモジュールを書いていますが、この時点で、Jfactoryを使用してデータベースに接続できる必要があります。通常は単に$db = JFactory::getDBO();を使用できますが、PHPエラーは、JFactoryクラスが含まれていないことを示しています。したがって、このJFactoryを含める方法を知る必要があります。 class。インターネットで見つかったいくつかの提案を試しましたが、まだ成功していません。これはコードです(スタンドアロンで完全に機能します)

    <?php
// server info
$server = 'localhost';
$user = 'ss';
$pass = 'oo';
$db = 'ss';

$connection = mysql_connect($server, $user, $pass)  or die ("Could not connect to server ... \n" . mysql_error ());
 mysql_select_db($db) or die ("Could not connect to database ... \n" . mysql_error ());


if(isSet($_POST['username']))
{
$username = $_POST['username'];
$username = mysql_real_escape_string($username);
$sql_check = mysql_query("SELECT Username FROM users WHERE Username='$username'");

if(mysql_num_rows($sql_check))
{
echo '<font color="#cc0000"><STRONG>'.$username.'</STRONG> is already in use.</font>';
}
else
{
echo 'OK';
}

}

?>

私の問題があなたに明らかであることを願っています。あなたの助けは大歓迎です。

試行1

<?php

include('../../../../configuration.php');

include('../../../../libraries/joomla/factory.php');

$config =& JFactory::getConfig();

// server info
$server2 = $Host;
$user2 = $user;
$pass2 = $password;
$db2 = $db;

$connection = mysqli_connect($server2, $user2, $pass2)  or die ("Could not connect to server ... \n" . mysqli_error ());
 mysqli_select_db($db2) or die ("Could not connect to database ... \n" . mysqli_error ());


if(isSet($_POST['username']))
{
$username = $_POST['username'];
$username = mysql_real_escape_string($username);
$sql_check = mysql_query("SELECT username FROM #__users WHERE username='$username'");

if(mysql_num_rows($sql_check))
{
echo '<font color="#cc0000"><STRONG>'.$username.'</STRONG> is already in use.</font>';
}
else
{
echo 'OK';
}

}
?>

しかし、これも機能していません。

試行2(成功)

include('../../../../configuration.php');
$jc = new JConfig();
$table = 'users';
$users = $jc->dbprefix . $table;
// connect to the database
$mysqli = new mysqli($jc->Host, $jc->user, $jc->password, $jc->db);

今ではすべてが私が望むように機能しています。唯一のことは今です:安全。これがハッカーの証拠であるかどうかはよくわかりません。誰かがこれをレビューできますか?ありがとう:)

12
Maarten Hartman

あなたはそれを理解していると確信していますが、多分それは他の誰かのために役立つでしょう

Joomlaデータベースクラスを使用するには(推奨されないことがわかっている場合でも:))、最初に次のような3つの定数を定義する必要があります。

define( '_JEXEC', 1 );
define( 'DS', DIRECTORY_SEPARATOR );
define( 'JPATH_BASE', $_SERVER[ 'DOCUMENT_ROOT' ] );

次に、次のような3つのファイルを含める必要があります。

require_once( JPATH_BASE . DS . 'includes' . DS . 'defines.php' );
require_once( JPATH_BASE . DS . 'includes' . DS . 'framework.php' );
require_once( JPATH_BASE . DS . 'libraries' . DS . 'joomla' . DS . 'factory.php' );
$mainframe =& JFactory::getApplication('site');

編集

次のような2つのファイルのみを含めることができます。

define( 'JPATH_BASE', $_SERVER[ 'DOCUMENT_ROOT' ] ); // define JPATH_BASE on the external file
require_once( JPATH_BASE . DS . 'libraries' . DS . 'import.php' ); // framework
require_once( JPATH_BASE . DS . 'configuration.php' ); // config file

最後に、次のようなjoomlaクラスを使用します。

$db = JFactory::getDBO();
30
stef

最近、_libraries/joomla/factory.php_が削除されたため、require_once ( JPATH_BASE .DS.'libraries'.DS.'joomla'.DS.'factory.php' );を使用するすべてのスクリプトが失敗していました。 これはここで受け入れられ、最も賛成された回答でまだ使用されているので、更新する時が来ました...

JDatabaseFactoryクラスが提供し、すでに含まれているため、JFactory::getDBO();を介してJoomlaデータベース関数を使用するためにJFactoryクラスはもう必要ありません。

これらの5行で十分です

_define('_JEXEC', 1);
define('JPATH_BASE', dirname(__FILE__));
define('DS', DIRECTORY_SEPARATOR);
require_once JPATH_BASE.DS.'includes'.DS.'defines.php';
require_once JPATH_BASE.DS.'includes'.DS.'framework.php';
_

あなたは例えばすることができるでしょうこれも:

_$db =& JFactory::getDBO();
$query = "SELECT ...";
$db->setQuery($query);
$db->query();
_
3
Esa Jokinen

Joomlaのデータベース情報にアクセスするには、( "configuration.php")を含める必要があります。このjoomla configuaraionファイルには、データベースアクセスのすべての情報が含まれています。

このフォルダ「joomlaRootFolder/libraries/joomla /factory.php」で定義されているクラスJFactory

1
yogeshK