Я пишу модуль для Joomla, в этот момент мне действительно нужно иметь возможность подключиться к базе данных с помощью Jfactory. Обычно можно просто использовать $db = JFactory::getDBO();
, но ошибка PHP говорит мне, что класс JFactory не включен. Теперь мне нужно знать, как включить этот класс JFactory. Я пробовал пару предложений, найденных в Интернете, но пока не был успешным. Это код (он отлично работает на автономном уровне)включают класс Jfactory во внешний php-файл, Joomla
<?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 называет ваш модуль, JFactory должен быть включен уже. Вы уверены, что это модуль Joomla, который вы пишете (может быть, компонент или плагин). См. [Создание простого модуля] (http://docs.joomla.org/Creating_a_simple_module). –
Привет, да, я пишу модуль. Я ожидал точно, что вы говорите, JFactory должен быть включен уже. Но почему-то это не так. Вышеупомянутый код вызывается AJAX. При использовании вышеуказанного кода все работает так, как я хочу. Если я удалю автономное соединение с БД, просто нет соединения. Я отредактировал и добавил выше код, который вы можете увидеть в моей попытке. спасибо :) –
Вы говорите, что приведенный выше код вызывается AJAX. Точно, какой URL-адрес вы используете для его вызова? Это определит, записываете ли вы «настоящий» модуль (со всеми включенными рамками Joomla) или автономный скрипт, который должен сам выполнять настройку фреймворка. Если ваш AJAX запрашивает URL-адрес, например «index.php? Option = com_yourcomponent & view = ....», он будет первым. Если вы запрашиваете URL-адрес, например '/ modules/mod_yourmodule/...', это будет последний. Я предполагаю, что это, вероятно, * * последнее, поскольку вы упоминаете слово «модуль». Но, пожалуйста, подтвердите. –