Εισαγωγή δεδομένων σε πίνακα κατα την εγγραφή χρήστη

Moderators: Aris Ntatsis, geof

Locked
geo78
Joomla! Apprentice
Joomla! Apprentice
Posts: 11
Joined: Sun Jul 25, 2010 11:36 pm

Εισαγωγή δεδομένων σε πίνακα κατα την εγγραφή χρήστη

Post by geo78 » Mon Jul 26, 2010 3:39 pm

Καλησπέρα,

Προσπαθώ να βρω λύση στο εξής πρόβλημα. Θέλω να κάνω insert μια γραμμή σε ένα νέο πίνακα στη βάση την ώρα που κάποιος ολοκληρώνει την εγγραφή του ως νέος user. Ενα απο τα πεδία που θα εισάγω είναι το uid του νέου χρήστη. Γνωρίζει κανεις σε ποιο αρχείο θα πρέπει να προσθέσω το INSERT query και πως πρέπει να το συντάξω?

Ευχαριστώ για την όποια βοήθεια!

Γιώργος

User avatar
tsimpo
Joomla! Guru
Joomla! Guru
Posts: 527
Joined: Thu Sep 15, 2005 5:09 am
Location: Greece
Contact:

Re: Εισαγωγή δεδομένων σε πίνακα κατα την εγγραφή χρήστη

Post by tsimpo » Mon Jul 26, 2010 5:49 pm

Θα πρέπει να φτιάξεις ένα plugin που θα κάνει την εισαγωγή του record που θέλεις, στο πίνακα σου.

Δες το topic που σου δίνω στο παρακάτω link και αν θέλεις κάτι περισσότερο είμαστε εδώ.

http://forum.joomla.org/viewtopic.php?p=1184785

Δες και αυτό:

http://docs.joomla.org/Reference:User_E ... gin_System
Joomla sites. http://www.webcase.gr Υπηρεσίες Internet, websites, Joomla! dedicated services.

geo78
Joomla! Apprentice
Joomla! Apprentice
Posts: 11
Joined: Sun Jul 25, 2010 11:36 pm

Re: Εισαγωγή δεδομένων σε πίνακα κατα την εγγραφή χρήστη

Post by geo78 » Mon Jul 26, 2010 6:58 pm

Καλησπέρα

Βασικά σε ενα φορουμ είδα οτι στο /com_user/controller.php γραμμή 340 έχει

// Lets activate this user
jimport('joomla.user.helper');
if (JUserHelper::activateUser($activation))

{

Εδώ έχω προσθέσει

$db =& JFactory::getDBO();
$user =& JFactory::getUser();

$query = "INSERT INTO test1 (id_user, field_ok1, field_ok2) VALUES('. $userid .',0,0)";
$db->setQuery( $query );
$db->query();

Το δοκίμασα αλλα οταν πατάω στο "Δημιουργία νέου λογαριασμού" εξαφανίζεται το site
Στο νέο πίνακα προσπαθώ να καταχωρήσω το id του νέου user και "0" για τα 2 πεδία boolean


Tsimpo σε ευχαριστώ πολύ για το reply και τις πληροφορίες/links

geo78
Joomla! Apprentice
Joomla! Apprentice
Posts: 11
Joined: Sun Jul 25, 2010 11:36 pm

Re: Εισαγωγή δεδομένων σε πίνακα κατα την εγγραφή χρήστη

Post by geo78 » Mon Jul 26, 2010 9:10 pm

UPDATE :

Εφτιαξα ενα plugin(php, xml) το οποίο και έκανα install OK.

Στο php έχω:

<?php
/**
* @version $Id: example.php 14401 2010-01-26 14:10:00Z louis $
* @package Joomla
* @subpackage JFramework
* @copyright Copyright (C) 2005 - 2010 Open Source Matters. All rights reserved.
* @license GNU/GPL, see LICENSE.php
* Joomla! is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
* See COPYRIGHT.php for copyright notices and details.
*/

// Check to ensure this file is included in Joomla!
defined('_JEXEC') or die( 'Restricted access' );

jimport('joomla.plugin.plugin');

/**
* Example User Plugin
*
* @package Joomla
* @subpackage JFramework
* @since 1.5
*/
class plgInsert_queries_george extends JPlugin {


/**
* Example store user method
*
* Method is called after user data is stored in the database
*
* @param array holds the new user data
* @param boolean true if a new user is stored
* @param boolean true if user was succesfully stored in the database
* @param string message
*/
function onAfterStoreUser($user, $isnew, $success, $msg)
{
global $mainframe;

// convert the user parameters passed to the event
// to a format the external application

$args = array();
$args['userkodikos'] = $user['id'];
$args['boolean1'] = 0;
$args['boolean2'] = 0;
$args['boolean3'] = 0;
$args['boolean4'] = 0;
$args['boolean5'] = 0;
$args['boolean6'] = 0;
$args['boolean7'] = 0;
$args['boolean8'] = 0;
$args['boolean9'] = 0;
if ($isnew)
{

$db =& JFactory::getDBO();
$db->insertObject('#__weblista', $args);
}

}


}


Δυστηχώς δεν γίνεται κανένα insert μετά την εγγραφή και activate νέου user. Εκανα και disable το Alpharegistration αλλα τα ίδια.

User avatar
tsimpo
Joomla! Guru
Joomla! Guru
Posts: 527
Joined: Thu Sep 15, 2005 5:09 am
Location: Greece
Contact:

Re: Εισαγωγή δεδομένων σε πίνακα κατα την εγγραφή χρήστη

Post by tsimpo » Tue Jul 27, 2010 6:41 am

Το να βάλεις ένα query να τρέχει μέσα σε αρχείο του Joomla δεν είναι σωστός τρόπος γιατί πειράζεις αρχεία του πυρήνα, που μπορεί να αλλάζουν ακόμα και σε κάθε αναβάθμιση του Joomla, και να πρέπει να προσθέτεις το δικό σου κώδικα κάθε φορά.

Το να μην τρέχει ένα plug-in χωρίς να υπάρχει κάποιο μήνυμα λάθους είναι δύσκολο να εντοπιστεί.

Βεβαιώσου ότι το Plug-in είναι ενεργό από το σύστημα διαχείρισής του Joomla.

Επίσης δες λίγο το κώδικα που χρησιμοποιείς για το Insert.
Εγώ θα έκανα:

$db =& JFactory::getDBO();
$query = "/* some valid sql string */";
$db->setQuery($query);
$result = $db->query();

http://docs.joomla.org/How_to_use_the_d ... our_script
Joomla sites. http://www.webcase.gr Υπηρεσίες Internet, websites, Joomla! dedicated services.

geo78
Joomla! Apprentice
Joomla! Apprentice
Posts: 11
Joined: Sun Jul 25, 2010 11:36 pm

Re: Εισαγωγή δεδομένων σε πίνακα κατα την εγγραφή χρήστη

Post by geo78 » Tue Jul 27, 2010 2:14 pm

UPDATE :
To plugin δουλευει αφού αλλαξα το
class plgInsert_queries_george extends JPlugin {

στο σωστό όνομα που είναι plg+User+ονομα plugin :D :D :D

User avatar
tsimpo
Joomla! Guru
Joomla! Guru
Posts: 527
Joined: Thu Sep 15, 2005 5:09 am
Location: Greece
Contact:

Re: Εισαγωγή δεδομένων σε πίνακα κατα την εγγραφή χρήστη

Post by tsimpo » Wed Jul 28, 2010 12:38 pm

Μου κάνει τρομερή εντύπωση που δεν σου έβγαζε κανένα λάθος, γιατί δεν θα έβρισκε το class ή το αρχείο...

Αλλά αφού δουλεύει ας μην ασχοληθούμε περισσότερο.
Joomla sites. http://www.webcase.gr Υπηρεσίες Internet, websites, Joomla! dedicated services.

geo78
Joomla! Apprentice
Joomla! Apprentice
Posts: 11
Joined: Sun Jul 25, 2010 11:36 pm

Re: Εισαγωγή δεδομένων σε πίνακα κατα την εγγραφή χρήστη

Post by geo78 » Wed Jul 28, 2010 6:50 pm

Ναι δεν έβγαζε κάποιο λάθος.

Το μόνο πρόβλημα που έχω τώρα είναι οτι δεν μπορώ να βρω με ποιο τρόπο μπορω να πάρω το id του νέου εγγεγραμένου μέλους! Στο insert που κάνω το id καταχωρείται με τιμή 0!!! Αν αλλαξω σε onLoginUser παίρνει τιμή αλλά δεν είναι αυτό που χρειάζομαι.

geo78
Joomla! Apprentice
Joomla! Apprentice
Posts: 11
Joined: Sun Jul 25, 2010 11:36 pm

Re: Εισαγωγή δεδομένων σε πίνακα κατα την εγγραφή χρήστη

Post by geo78 » Wed Jul 28, 2010 8:15 pm

<?php

/**
* @version $Id: example.php 14401 2010-01-26 14:10:00Z louis $
* @package Joomla
* @subpackage JFramework
* @copyright Copyright (C) 2005 - 2010 Open Source Matters. All rights reserved.
* @license GNU/GPL, see LICENSE.php
* Joomla! is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
* See COPYRIGHT.php for copyright notices and details.
*/

// Check to ensure this file is included in Joomla!
defined('_JEXEC') or die( 'Restricted access' );
jimport('joomla.plugin.plugin');

class plgUserInsert_query_web_tables extends JPlugin {


function onLoginUser($user, $isnew, $success, $msg)
{

global $mainframe;


$user =& JFactory::getUser();
$kodikos = $user->get('id');


$onoma_array->id_user = $kodikos;
$onoma_array->onoma_pediou1 = 0;
$onoma_array->onoma_pediou2 = 0;
$onoma_array->onoma_pediou_kleidi = 'NULL';
$o_pinakas_mou = '#__opinakasmou';


$exists = 0;
$database =& JFactory::getDBO();
$q = "SELECT count(*) as total FROM #__opinakasmou WHERE id_user = '" . $kodikos . "'";
$database->setQuery( $q );
$exists = $database->loadResult();

if($exists == 0)
{
$db =& JFactory::getDBO();
$db->setQuery($q);
$db->insertObject($o_pinakas_mou, $onoma_array, 'onoma_pediou_kleidi');
}

}


}

Λοιπον αυτό είναι το τελικό Plugin. Αν το user_id δεν υπάρχει στο νέο πίνακα τοτε συνεχίζει με εισαγωγή γραμμής 8) 8) 8) 8)

User avatar
tsimpo
Joomla! Guru
Joomla! Guru
Posts: 527
Joined: Thu Sep 15, 2005 5:09 am
Location: Greece
Contact:

Re: Εισαγωγή δεδομένων σε πίνακα κατα την εγγραφή χρήστη

Post by tsimpo » Thu Jul 29, 2010 6:42 am

Σχετικά με την τελική υλοποίηση δεν μπορώ να πω ότι είναι λάθος γιατί δεν ξέρω τι θέλεις να κάνεις. Σίγουρα όμως είναι εντελώς διαφορετικό να γράφεις στο δικό σου πίνακα τα στοιχεία που θέλεις όταν κάνει εγγραφή ο χρήστης από το όταν κάνει πρώτη φορά login.

Όσον αφορά την προηγούμενη υλοποίηση που είχες κάνει που απλά δεν έγγραφε το id του χρήστη που μόλις είχε κάνει store το Joomla:

Αν δεις στο link που σου έστειλα στο πρώτο μου post στο http://docs.joomla.org/Reference:User_E ... gin_System 5.3.7 onAfterStoreUser

λέει ότι "$user - An associative array of the columns in the user table."

Επίσης δες και στο topic http://forum.joomla.org/viewtopic.php?p ... 6#p2206676 του forum πως ακριβώς γίνεται με ολόκληρο το κώδικα.
Joomla sites. http://www.webcase.gr Υπηρεσίες Internet, websites, Joomla! dedicated services.

geo78
Joomla! Apprentice
Joomla! Apprentice
Posts: 11
Joined: Sun Jul 25, 2010 11:36 pm

Re: Εισαγωγή δεδομένων σε πίνακα κατα την εγγραφή χρήστη

Post by geo78 » Thu Jul 29, 2010 9:16 am

tsimpo wrote:Σχετικά με την τελική υλοποίηση δεν μπορώ να πω ότι είναι λάθος γιατί δεν ξέρω τι θέλεις να κάνεις. Σίγουρα όμως είναι εντελώς διαφορετικό να γράφεις στο δικό σου πίνακα τα στοιχεία που θέλεις όταν κάνει εγγραφή ο χρήστης από το όταν κάνει πρώτη φορά login.

Όσον αφορά την προηγούμενη υλοποίηση που είχες κάνει που απλά δεν έγγραφε το id του χρήστη που μόλις είχε κάνει store το Joomla:

Αν δεις στο link που σου έστειλα στο πρώτο μου post στο http://docs.joomla.org/Reference:User_E ... gin_System 5.3.7 onAfterStoreUser

λέει ότι "$user - An associative array of the columns in the user table."

Επίσης δες και στο topic http://forum.joomla.org/viewtopic.php?p ... 6#p2206676 του forum πως ακριβώς γίνεται με ολόκληρο το κώδικα.
Καλημέρα,

Αυτό που ήθελα να κάνω είναι το ακριβώς ίδιο με το topic http://forum.joomla.org/viewtopic.php?p ... 6#p2206676. Οποτε γίνεται νέα έγγραφη να καταχωρείτε 1 (Μόνο 1 για κάθε user) γραμμή σε πίνακα που έχω φτιάξει.

Αλλο post με παρομοιο insert στο onAfterStoreUser δεν έχω βρεί.

Το θεμα είναι οτι η λύση που έχει γράψει δεν δούλευε σε μένα μιας και έφερνε τιμή 0 όπως ανέφερα. Απ ότι κατάλαβα, στο onAfterStoreUser δεν μπορώ να πάρω το id του user αφού είναι Guest και Guest = 0. Με το που έκανα την αλλαγή σε onLoginUser πήρα το id, απλά ελέγχω πρώτα αν υπάρχει γραμμή στο νέο πίνακα, αν όχι τη καταχωρώ.

User avatar
tsimpo
Joomla! Guru
Joomla! Guru
Posts: 527
Joined: Thu Sep 15, 2005 5:09 am
Location: Greece
Contact:

Re: Εισαγωγή δεδομένων σε πίνακα κατα την εγγραφή χρήστη

Post by tsimpo » Fri Jul 30, 2010 8:58 am

Χτες το βράδυ έφτιαξα το plugin και το εγκατέστησα σε ένα joomla site μου για να το δοκιμάσω.

Σε εμένα λειτούργησε τέλεια. Έγγραψε στο δικό μου πίνακα και το id του χρήστη που μόλις είχε κάνει store και το user name του.

Μου φαινόταν εντελώς παράλογο να σου δίνει μεταβλητή $isnew για να ξέρεις αν είναι νέος χρήστης και όχι update υπάρχοντος και να μην σου δίνει το $insertId.

O κώδικας που έχω είναι ο ακόλουθος:

Code: Select all

<?xml version="1.0" encoding="utf-8"?>
<install version="1.5" type="plugin" group="user">
	<name>Add Rec</name>
	<author>TEST Project</author>
	<creationDate>2010</creationDate>
	<copyright></copyright>
	<license></license>
	<authorEmail></authorEmail>
	<authorUrl></authorUrl>
	<version>1.0</version>
	<description>An example user synchronisation plugin</description>
	<files>
		<filename plugin="addrec">addrec.php</filename>
	</files>
	<params/>
</install>

Code: Select all

<?php
/**
 * @version		$Id: example.php 14401 2010-01-26 14:10:00Z louis $
 * @package		Joomla
 * @subpackage	JFramework
 * @copyright	Copyright (C) 2005 - 2010 Open Source Matters. All rights reserved.
 * @license		GNU/GPL, see LICENSE.php
 * Joomla! is free software. This version may have been modified pursuant
 * to the GNU General Public License, and as distributed it includes or
 * is derivative of works licensed under the GNU General Public License or
 * other free or open source software licenses.
 * See COPYRIGHT.php for copyright notices and details.
 */

// Check to ensure this file is included in Joomla!
defined('_JEXEC') or die( 'Restricted access' );

jimport('joomla.plugin.plugin');

/**
 * Example User Plugin
 *
 * @package		Joomla
 * @subpackage	JFramework
 * @since 		1.5
 */
class plgUserAddrec extends JPlugin {

	/**
	 * Constructor
	 *
	 * For php4 compatability we must not use the __constructor as a constructor for plugins
	 * because func_get_args ( void ) returns a copy of all passed arguments NOT references.
	 * This causes problems with cross-referencing necessary for the observer design pattern.
	 *
	 * @param object $subject The object to observe
	 * @param 	array  $config  An array that holds the plugin configuration
	 * @since 1.5
	 */
	function plgUserAddrec(& $subject, $config)
	{
		parent::__construct($subject, $config);
	}


	/**
	 * Example store user method
	 *
	 * Method is called after user data is stored in the database
	 *
	 * @param 	array		holds the new user data
	 * @param 	boolean		true if a new user is stored
	 * @param	boolean		true if user was succesfully stored in the database
	 * @param	string		message
	 */
	function onAfterStoreUser($user, $isnew, $success, $msg)
	{
		global $mainframe;

		// convert the user parameters passed to the event
		// to a format the external application

		$args = array();
		$args['username']	= $user['username'];
		$args['email'] 		= $user['email'];
		$args['fullname']	= $user['name'];
		$args['password']	= $user['password'];

		if ($isnew)
		{
			$database =& JFactory::getDBO();
			$thequery = "INSERT INTO `#__userstest` (`id`, `name`) VALUES (" . $user['id'] . ", '". $user['username']."' )";

			$database->setQuery($thequery);
			if (!$database->query()) {
                print("<font color=\"red\">SQL error: " . $database->stderr(true) . "</font><br />");
			}
		}
	}


}
Ελπίζω να τα καταφέρεις να δουλέψει.
Joomla sites. http://www.webcase.gr Υπηρεσίες Internet, websites, Joomla! dedicated services.


Locked

Return to “Greek Forum”