我正在为Joomla编写一个模块,此时我真的需要能够使用Jfactory连接到数据库。通常可以简单地使用$db = JFactory::getDBO();
,但PHP错误告诉我不包括JFactory类。 所以现在我需要知道如何包含这个JFactory类。我已经尝试了在互联网上找到的一些建议,但没有成功。这是代码(它在独立时非常完美)
<?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);
现在它正在按我的意愿行事。现在唯一的事情就是:安全。我不太确定这是黑客证明。有人可以评论一下吗?谢谢:))
答案 0 :(得分:29)
我确信你弄清楚了,但也许对其他人有用
要使用joomla数据库类(即使你知道不推荐:),你需要首先定义三个常量,如:
define( '_JEXEC', 1 );
define( 'DS', DIRECTORY_SEPARATOR );
define( 'JPATH_BASE', $_SERVER[ 'DOCUMENT_ROOT' ] );
然后你需要包含三个文件,例如:
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');
修改
您只能包含两个文件:
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();
答案 1 :(得分:2)
最近,libraries/joomla/factory.php
已被删除,导致使用require_once ( JPATH_BASE .DS.'libraries'.DS.'joomla'.DS.'factory.php' );
的所有脚本失败。 因为它仍被用于公认的&amp;最热烈的答案在这里,是时候更新......
您不再需要JDatabaseFactory
类来通过JFactory::getDBO();
使用Joomla数据库函数,因为JFactory
类提供了它们并且已经包含在内。
这五行足够:
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();
答案 2 :(得分:1)
要访问Joomla的数据库信息,您应该包含(“configuration.php”)。这个joomla configuaraion文件包含数据库访问的所有信息。
在此文件夹“joomlaRootFolder / libraries / joomla / factory.php”中定义的类JFactory