Εισαγωγή δεδομένων σε πίνακα κατα την εγγραφή χρήστη
-
- Joomla! Apprentice
- Posts: 11
- Joined: Sun Jul 25, 2010 11:36 pm
Εισαγωγή δεδομένων σε πίνακα κατα την εγγραφή χρήστη
Καλησπέρα,
Προσπαθώ να βρω λύση στο εξής πρόβλημα. Θέλω να κάνω insert μια γραμμή σε ένα νέο πίνακα στη βάση την ώρα που κάποιος ολοκληρώνει την εγγραφή του ως νέος user. Ενα απο τα πεδία που θα εισάγω είναι το uid του νέου χρήστη. Γνωρίζει κανεις σε ποιο αρχείο θα πρέπει να προσθέσω το INSERT query και πως πρέπει να το συντάξω?
Ευχαριστώ για την όποια βοήθεια!
Γιώργος
Προσπαθώ να βρω λύση στο εξής πρόβλημα. Θέλω να κάνω insert μια γραμμή σε ένα νέο πίνακα στη βάση την ώρα που κάποιος ολοκληρώνει την εγγραφή του ως νέος user. Ενα απο τα πεδία που θα εισάγω είναι το uid του νέου χρήστη. Γνωρίζει κανεις σε ποιο αρχείο θα πρέπει να προσθέσω το INSERT query και πως πρέπει να το συντάξω?
Ευχαριστώ για την όποια βοήθεια!
Γιώργος
- tsimpo
- Joomla! Guru
- Posts: 527
- Joined: Thu Sep 15, 2005 5:09 am
- Location: Greece
- Contact:
Re: Εισαγωγή δεδομένων σε πίνακα κατα την εγγραφή χρήστη
Θα πρέπει να φτιάξεις ένα plugin που θα κάνει την εισαγωγή του record που θέλεις, στο πίνακα σου.
Δες το topic που σου δίνω στο παρακάτω link και αν θέλεις κάτι περισσότερο είμαστε εδώ.
http://forum.joomla.org/viewtopic.php?p=1184785
Δες και αυτό:
http://docs.joomla.org/Reference:User_E ... gin_System
Δες το 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.
-
- Joomla! Apprentice
- Posts: 11
- Joined: Sun Jul 25, 2010 11:36 pm
Re: Εισαγωγή δεδομένων σε πίνακα κατα την εγγραφή χρήστη
Καλησπέρα
Βασικά σε ενα φορουμ είδα οτι στο /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
Βασικά σε ενα φορουμ είδα οτι στο /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
-
- Joomla! Apprentice
- Posts: 11
- Joined: Sun Jul 25, 2010 11:36 pm
Re: Εισαγωγή δεδομένων σε πίνακα κατα την εγγραφή χρήστη
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 αλλα τα ίδια.
Εφτιαξα ενα 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 αλλα τα ίδια.
- tsimpo
- Joomla! Guru
- Posts: 527
- Joined: Thu Sep 15, 2005 5:09 am
- Location: Greece
- Contact:
Re: Εισαγωγή δεδομένων σε πίνακα κατα την εγγραφή χρήστη
Το να βάλεις ένα 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
Το να μην τρέχει ένα 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.
-
- Joomla! Apprentice
- Posts: 11
- Joined: Sun Jul 25, 2010 11:36 pm
Re: Εισαγωγή δεδομένων σε πίνακα κατα την εγγραφή χρήστη
UPDATE :
To plugin δουλευει αφού αλλαξα το
class plgInsert_queries_george extends JPlugin {
στο σωστό όνομα που είναι plg+User+ονομα plugin

To plugin δουλευει αφού αλλαξα το
class plgInsert_queries_george extends JPlugin {
στο σωστό όνομα που είναι plg+User+ονομα plugin



- tsimpo
- Joomla! Guru
- Posts: 527
- Joined: Thu Sep 15, 2005 5:09 am
- Location: Greece
- Contact:
Re: Εισαγωγή δεδομένων σε πίνακα κατα την εγγραφή χρήστη
Μου κάνει τρομερή εντύπωση που δεν σου έβγαζε κανένα λάθος, γιατί δεν θα έβρισκε το class ή το αρχείο...
Αλλά αφού δουλεύει ας μην ασχοληθούμε περισσότερο.
Αλλά αφού δουλεύει ας μην ασχοληθούμε περισσότερο.
Joomla sites. http://www.webcase.gr Υπηρεσίες Internet, websites, Joomla! dedicated services.
-
- Joomla! Apprentice
- Posts: 11
- Joined: Sun Jul 25, 2010 11:36 pm
Re: Εισαγωγή δεδομένων σε πίνακα κατα την εγγραφή χρήστη
Ναι δεν έβγαζε κάποιο λάθος.
Το μόνο πρόβλημα που έχω τώρα είναι οτι δεν μπορώ να βρω με ποιο τρόπο μπορω να πάρω το id του νέου εγγεγραμένου μέλους! Στο insert που κάνω το id καταχωρείται με τιμή 0!!! Αν αλλαξω σε onLoginUser παίρνει τιμή αλλά δεν είναι αυτό που χρειάζομαι.
Το μόνο πρόβλημα που έχω τώρα είναι οτι δεν μπορώ να βρω με ποιο τρόπο μπορω να πάρω το id του νέου εγγεγραμένου μέλους! Στο insert που κάνω το id καταχωρείται με τιμή 0!!! Αν αλλαξω σε onLoginUser παίρνει τιμή αλλά δεν είναι αυτό που χρειάζομαι.
-
- Joomla! Apprentice
- Posts: 11
- Joined: Sun Jul 25, 2010 11:36 pm
Re: Εισαγωγή δεδομένων σε πίνακα κατα την εγγραφή χρήστη
<?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 δεν υπάρχει στο νέο πίνακα τοτε συνεχίζει με εισαγωγή γραμμής




- tsimpo
- Joomla! Guru
- Posts: 527
- Joined: Thu Sep 15, 2005 5:09 am
- Location: Greece
- Contact:
Re: Εισαγωγή δεδομένων σε πίνακα κατα την εγγραφή χρήστη
Σχετικά με την τελική υλοποίηση δεν μπορώ να πω ότι είναι λάθος γιατί δεν ξέρω τι θέλεις να κάνεις. Σίγουρα όμως είναι εντελώς διαφορετικό να γράφεις στο δικό σου πίνακα τα στοιχεία που θέλεις όταν κάνει εγγραφή ο χρήστης από το όταν κάνει πρώτη φορά 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 πως ακριβώς γίνεται με ολόκληρο το κώδικα.
Όσον αφορά την προηγούμενη υλοποίηση που είχες κάνει που απλά δεν έγγραφε το 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.
-
- Joomla! Apprentice
- Posts: 11
- Joined: Sun Jul 25, 2010 11:36 pm
Re: Εισαγωγή δεδομένων σε πίνακα κατα την εγγραφή χρήστη
Καλημέρα,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, απλά ελέγχω πρώτα αν υπάρχει γραμμή στο νέο πίνακα, αν όχι τη καταχωρώ.
- tsimpo
- Joomla! Guru
- Posts: 527
- Joined: Thu Sep 15, 2005 5:09 am
- Location: Greece
- Contact:
Re: Εισαγωγή δεδομένων σε πίνακα κατα την εγγραφή χρήστη
Χτες το βράδυ έφτιαξα το plugin και το εγκατέστησα σε ένα joomla site μου για να το δοκιμάσω.
Σε εμένα λειτούργησε τέλεια. Έγγραψε στο δικό μου πίνακα και το id του χρήστη που μόλις είχε κάνει store και το user name του.
Μου φαινόταν εντελώς παράλογο να σου δίνει μεταβλητή $isnew για να ξέρεις αν είναι νέος χρήστης και όχι update υπάρχοντος και να μην σου δίνει το $insertId.
O κώδικας που έχω είναι ο ακόλουθος:
Ελπίζω να τα καταφέρεις να δουλέψει.
Σε εμένα λειτούργησε τέλεια. Έγγραψε στο δικό μου πίνακα και το 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.