Support > Database

Παράλληλη εγγραφή σε δεύτερη database

(1/2) > >>

jimmyz:
Χαίρετε, Χριστός Ανέστη!

Παρακαλώ πολύ για την βοήθειά σας:

Στον ίδιο σέρβερ που φιλοξενεί την Elxis εγκατάστασή μου, τρέχω παράλληλα μια υπηρεσία instant messenging. Θα ήθελα οι χρήστες της σελίδας, με την εγγραφή τους, να αποκτούν ταυτόχρονα και λογαριασμό χρήστη στον instant messenger. Θα πρέπει λοιπόν, κατά την εγγραφή στο Elxis, το όνομα χρήστη και ο κωδικός, (σε plain text) να γράφονται παράλληλα και στην database του messenger (είναι τα μόνα που χρειάζονται).
Επιπροσθέτως, κατά την ανάκτηση ενός ξεχασμένου κωδικού, όταν ενημερώνεται το πεδίο pword στο elx_users, να γίνεται η αλλαγή και στην δεύτερη database. Ομοίως και κατά την αλλαγή του κωδικού από τον ίδιο το χρήστη.

Μπορείτε να με βοηθήσετε;

datahell:
Είναι πολύ εύκολο να συνδεθείς σε μία δεύτερη βάση και να κάνεις αυτό που θες. Ωστόσο επειδή πρόκειται για custom-ιά θα πρέπει να τροποποιήσεις τις default επεκτάσεις του Elxis που σημαίνει ότι σε μία αναβάθμιση μπορεί να τις χάσεις αν υπερκαλυφθούν τα αρχεία.

Σύνδεση στη δεύτερη βάση (αλλάξε host αν χρειάζεται καθώς και username/password)
$params = array(
   'dbtype' => 'mysql',
   'host' => 'localhost',
   'port' => 0,
   'dbname' => 'my_other_database',
   'username' => 'db_username',
   'password' => 'db_pass'
);
$db2 = new elxisDatabase($params);

Μετά εκτελείς τα queries ως συνήθως:
$sql = "INSERT INTO ".$db2->quoteId('my_table')." VALUES (NULL, 'blah', 'blah', 'blah')";
$stmt = $db2->prepare($sql);
$stmt->execute();

components/com_user/controllers/account.php
Μετά τη γραμμή 237:
if ($ok === true) {
Συνδέσου στη βάση db2
Και εκτέλεσε το INSERT στη δεύτερη βάση. Όλα τα στοιχεία του χρήστη είναι διαθέσιμα στη μεταβλητή $row. Επειδή το password το έχει το Elxis κρυπτογραφημένο θα το πάρεις ως plain text από τη μεταβλητή $pword. Κάπως έτσι:

$sql = "INSERT INTO ".$db2->quoteId('my_table')." VALUES (NULL, ".$db2->quote($row->uname).", ".$db2->quote($pword).")";
$stmt = $db2->prepare($sql);
$stmt->execute();

Το id του χρήστη είναι αυτό: $row->uid

jimmyz:
Ευχαριστώ για την άμεση απάντηση.  :)

components/com_user/controllers/account.php, πάνω και κάτω από την 237:

--- Code: --- $params = array(
   'dbtype' => 'mysql',
   'host' => 'localhost',
   'port' => 0,
   'dbname' => 'etest',
   'username' => 'db2user',
   'password' => 'db2pass'
);
$db2 = new elxisDatabase($params);


if ($ok === true) {

$sql = "INSERT INTO ".$db2->quoteId('my_table')." VALUES (NULL, ".$db2->quoteId($row->uname).", ".$db2->quoteId($pword).")";
$stmt = $db2->prepare($sql);
$stmt->execute();
--- End code ---

Για username TEST1, γράφει σωστά τον νέο χρήστη στην db του elxis, καμία εγγραφή στην etest, δίνει HTTP ERROR 500 και στο log καταφράφει:

--- Code: ---Uncaught exception 'PDOException' with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'TEST1' in 'field list'' in /var/www/mysite.gr/includes/libraries/elxis/database/statement.class.php:41
Stack trace:
#0 /var/www/mysite.gr/includes/libraries/elxis/database/statement.class.php(41): PDOStatement->execute(NULL)
#1 /var/www/mysite.gr/components/com_user/controllers/account.php(255): elxisPDOStatement->execute()
#2 /var/www/mysite.gr/components/com_user/user.php(61): accountUserController->register()
#3 /var/www/mysite.gr/includes/libraries/elxis/document.class.php(1183): userRouter->route()
#4 /var/www/mysite.gr/includes/libraries/elxis/document.class.php(953): elxisDocument->renderComponent()
#5 /var/www/mysite.gr/includes/loader.php(245): elxisDocument->make()
#6 /var/www/mysite.gr/index.php(18): require('/var/www/mysit...')
#7 {main}
  thrown
--- End code ---

 
 
Ακόμη και αν αλλάξω σε
$sql = "INSERT INTO db2table (uname, pword) VALUES (TEST1, TEST2)";
παίρνω το ίδιο σφάλμα, νομίζει οτι το username που θέλει ο χρήστης, είναι στήλη στο table!

Δοκίμασα, να αφαιρέσω τα ", αλλά δεν είχα τύχη.

Τί προτείνετε;

michalis1984:
Τα values δεν πρέπει να είναι σε quotes? 'value'

$sql = "INSERT INTO db2table (uname, pword) VALUES ('TEST1', 'TEST2')";

έτσι δουλεύει;


Here are some syntax rules to follow:

The SQL query must be quoted in PHP
String values inside the SQL query must be quoted
Numeric values must not be quoted
The word NULL must not be quoted
Source: https://www.w3schools.com/php/php_mysql_insert.asp

jimmyz:
Αυτό λειτουργεί.
$sql = "INSERT INTO my_table (uname, pword) VALUES ('TEST1', 'TEST2')";

Πώς όμως πρέπει να γίνει το
$sql = "INSERT INTO ".$db2->quoteId(my_table)." VALUES (NULL, ".$db2->quoteId($row->uname).", ".$db2->quoteId($pword).")";

Navigation

[0] Message Index

[#] Next page

Go to full version