2012-02-27 11 views
10

मैं जूमला के लिए एक मॉड्यूल लिख रहा हूं, इस बिंदु पर मुझे वास्तव में जेफैक्टरी का उपयोग करके डेटाबेस से कनेक्ट करने में सक्षम होना चाहिए। आम तौर पर कोई भी $db = JFactory::getDBO(); का उपयोग कर सकता है, लेकिन PHP त्रुटि मुझे बताती है कि जेएफटीसी कक्षा शामिल नहीं है। तो अब मुझे यह जानना होगा कि इस जेएफटीसी कक्षा को कैसे शामिल किया जाए। मैंने इंटरनेट पर कुछ सुझावों की कोशिश की है, अनुपस्थित सफलता, अभी तक। यह कोड है (यह स्टैंडअलोन पर सही काम करता है)में बाहरी php फ़ाइल में जफैक्टरी क्लास शामिल है, जूमला

<?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

मॉड्यूल लिखना ..? जब तक जूमला आपके मॉड्यूल को कॉल करता है तब तक जेएफटीसी को पहले से ही शामिल किया जाना चाहिए। क्या आप सुनिश्चित हैं कि यह एक जूमला मॉड्यूल है जिसे आप लिख रहे हैं (एक घटक या प्लगइन भी हो सकता है)। देखें [एक साधारण मॉड्यूल बनाना] (http://docs.joomla.org/Creating_a_simple_module)। –

+0

हैलो, हाँ मैं एक मॉड्यूल लिख रहा हूँ। मुझे उम्मीद है कि आप क्या कह रहे हैं, जेएफटीसी को पहले से ही शामिल किया जाना चाहिए। लेकिन किसी भी तरह यह नहीं है। उपरोक्त कोड AJAX द्वारा बुलाया जा रहा है। उपर्युक्त कोड का उपयोग करते समय, सबकुछ काम कर रहा है जैसा मैं चाहता हूं। अगर मैं स्टैंडअलोन डीबी कनेक्शन को हटा देता हूं, तो बस कोई कनेक्शन नहीं है .. मैंने संपादित किया है और उपर्युक्त कोड sou जोड़ा है, आप मेरा प्रयास देख सकते हैं। धन्यवाद :) –

+1

आप कहते हैं कि उपरोक्त कोड AJAX द्वारा बुलाया गया है। वास्तव में आप इसे कॉल करने के लिए किस यूआरएल का उपयोग कर रहे हैं, यद्यपि? यह परिभाषित करेगा कि क्या आप 'असली' मॉड्यूल लिख रहे हैं (सभी जूमला फ्रेमवर्क पहले से ही शामिल हैं) या एक स्टैंडअलोन स्क्रिप्ट जिसे फ्रेमवर्क सेटअप स्वयं करने की आवश्यकता है। यदि आपका AJAX 'index.php? विकल्प = com_yourcomponent & view = ....' जैसे यूआरएल का अनुरोध कर रहा है, तो यह पूर्व होगा। यदि आप '/ मॉड्यूल/mod_yourmodule/...' जैसे यूआरएल का अनुरोध कर रहे हैं तो यह बाद वाला होगा। मैं अनुमान लगा रहा हूं कि यह संभवतः * है * बाद वाला, क्योंकि आप 'मॉड्यूल' शब्द का उल्लेख करते हैं। लेकिन कृपया पुष्टि करें। –

उत्तर

27

मुझे यकीन है कि आप इसे समझ से बाहर हूँ, लेकिन शायद यह किसी और

का उपयोग करने के लिए उपयोगी होगा जूमला डेटाबेस वर्ग (भले ही आप जानते हैं कि अनुशंसित नहीं है :)) की जरूरत है, की तरह, तीन स्थिरांक को परिभाषित करने के पहले:

:

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 

अंत में की तरह, जूमला वर्ग का उपयोग करें:

$db = JFactory::getDBO(); 
+0

एक साल बाद मुझे इसकी आवश्यकता है, आपका समाधान मेरा से बेहतर है, धन्यवाद :) –

+0

हे, धन्यवाद :), मुझे इसकी भी आवश्यकता है – flatronka

+0

धन्यवाद! मुझे भी ये चाहिए! – arniotaki

1

जूमला की डेटाबेस जानकारी तक पहुंचने के लिए, आपको ("config.php") शामिल करना चाहिए। यह जूमला कॉन्फ़िगरेशन फ़ाइल में डेटाबेस पहुंच की सभी जानकारी शामिल है।

वर्ग JFactory इस फोल्डर में परिभाषित "joomlaRootFolder/पुस्तकालयों/Joomla/factory.php"

+0

हैलो, आपके उत्तर के लिए धन्यवाद। मैंने इसे अपनी फाइल में जोड़ा: इसमें शामिल करें ('../../../../ config.php'); में शामिल हैं ('../../../../ पुस्तकालय/जूमला/factory.php'); $ डीबी = और जेएफटीसी :: getDBO(); फाइलें ठीक तरह से शामिल हैं लेकिन अभी भी कोई कनेक्शन नहीं है। –

1

हाल ही में, libraries/joomla/factory.php हटा दिया गया है, जो पैदा कर रहा था विफल होने के लिए require_once (JPATH_BASE .DS.'libraries'.DS.'joomla'.DS.'factory.php'); का उपयोग करने वाली सभी स्क्रिप्ट्स। इस के रूप में अभी भी स्वीकार कर लिया & सबसे upvoted जवाब यहाँ में प्रयोग किया जाता है, यह एक अद्यतन करने के लिए समय आ गया है ...

आप JFactory::getDBO(); के माध्यम से जूमला डेटाबेस कार्यों का उपयोग करने के लिए के रूप में JFactory वर्ग उन्हें प्रदान करता है अब और JDatabaseFactory वर्ग की जरूरत नहीं है और पहले से ही शामिल हो जाता है।

इन पांच लाइनों पर्याप्त हैं:

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(); 
संबंधित मुद्दे