php - 在外部 php 文件 Joomla 中包含 Jfactory 类

标签 php mysql joomla

我正在为 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);

现在一切都如我所愿。现在唯一的事情是:安全。我不太确定这是否是黑客证明。有人可以评论这个吗?谢谢:)

最佳答案

我相信你已经弄明白了,但也许它对其他人有用

要使用 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();

关于php - 在外部 php 文件 Joomla 中包含 Jfactory 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9459430/

相关文章:

java - mysql字符编码

sql - MySQL alter table 中 RENAME 比 DROP+ADD 更快

PHP 用户搜索,包含多个元素的表

mysql - Magento cron 作业给出错误 SQLSTATE [HY000] [2002] 无法连接到本地 MySQL 服务器

php - 如何在 MySQL 中实现 ‘Globally Unique IDs’?

php - 我想在更改数量时计算总金额

javascript - 防止用户在javascript中输入小数点前超过3个数字

php - 在 php echo 中转义 css 内联样式中的双引号

html - 使用 sprite 时在 Joomla 中隐藏菜单项

php - Joomla 升级数据库错误从 v3.1.1 到 3.1.5