Tôi đang viết một mô-đun cho Joomla, tại thời điểm này tôi thực sự cần để có thể kết nối với cơ sở dữ liệu bằng cách sử dụng Jfactory. Thông thường người ta chỉ có thể sử dụng $db = JFactory::getDBO();
, nhưng lỗi PHP cho tôi biết lớp JFactory không được bao gồm. Vì vậy, bây giờ tôi cần biết cách bao gồm lớp JFactory này. Tôi đã thử một vài gợi ý tìm thấy trên internet, thành công vắng mặt. Đây là mã (nó hoạt động hoàn hảo trên độc lập)bao gồm lớp Jfactory trong một tệp php bên ngoài, 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';
}
}
?>
Tôi hy vọng vấn đề của tôi rõ ràng với bạn. giúp đỡ của bạn sẽ được nhiều đánh giá cao.
Cố gắng 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';
}
}
?>
nhưng điều này không làm việc một trong hai.
nỗ lực 2 (thành công)
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);
Bây giờ nó là tất cả làm việc như tôi muốn. Điều duy nhất bây giờ là: an toàn. Tôi không quá chắc chắn về việc này là bằng chứng của hacker. Ai đó có thể xem lại điều này? thanks :)
Viết mô-đun ..? Vào thời điểm Joomla gọi mô-đun của bạn, JFactory phải được đưa vào. Bạn có chắc đó là một mô-đun Joomla bạn đang viết (có thể là một thành phần hoặc plugin cũng). Xem [Tạo một mô-đun đơn giản] (http://docs.joomla.org/Creating_a_simple_module). –
Xin chào, vâng tôi đang viết một mô-đun. Tôi mong đợi chính xác những gì bạn đang nói, JFactory phải được bao gồm rồi. Nhưng bằng cách nào đó nó không phải. Mã trên được gọi là AJAX. Khi sử dụng mã trên, mọi thứ đều hoạt động như tôi muốn. Nếu tôi loại bỏ các kết nối DB độc lập, không có kết nối .. Tôi đã chỉnh sửa và thêm vào mã sou trên, bạn có thể thấy nỗ lực của tôi. cảm ơn :) –
Bạn nói mã ở trên được gọi là AJAX. Bạn đang sử dụng chính xác URL nào để gọi nó? Điều này sẽ xác định xem bạn đang viết một mô-đun 'thực' (với tất cả khung công tác joomla đã được bao gồm) hay một tập lệnh độc lập cần phải tự thiết lập khung công tác. Nếu AJAX của bạn đang yêu cầu một URL như 'index.php? Option = com_yourcomponent & view = ....', nó sẽ là URL cũ. Nếu bạn đang yêu cầu một URL như '/ modules/mod_yourmodule/...', nó sẽ là URL sau. Tôi đoán nó có lẽ * là * sau này, vì bạn đề cập đến từ 'mô-đun'. Nhưng hãy xác nhận. –