Userdaten auslesen...
Eingetragen von Tiega (8)
am 14.12.2010 - 14:29 Uhr in
am 14.12.2010 - 14:29 Uhr in
Hey Leute,
ich hatte mal erwähnt das ich die Drupal Userdatenbank mit einer Externen Datenbank synchronisieren möchte. Hab mich daraufhin etwas mit Hooks beschäftigt.
Bis jetzt bin ich aber nicht weit gekommen.... da ich nicht weiß wie ich an die Daten komme die übergeben werden sollen....
Google spuckt mir nur zb. "$user->name" aus, ich such wahrscheinlich nach dem falschen^^
<?php
// $Id $
/**
*@file
*Synchronisiert die Userdaten der Drupal Datenbank mit der Datenbank
*/
function datenbank_Sync() {
include("db_connect.php");
$timestamp = time();
$datum = date("Y-m-d",$timestamp);
$sql = "INSERT INTO user (username, password, firstname, lastmane, email, ) VALUES ('$user->name', '$user->passwort')";
}
/**
* Implementierung von hook_user().
*/
function Sync_user($op, &$edit, &$account, $category = NULL) {
if($op == 'register') {
datenbank_Sync();
}
}
?>
Viele Grüße
- Anmelden oder Registrieren um Kommentare zu schreiben
hook_user
am 14.12.2010 - 14:45 Uhr
Hallo.
<?php
$sql = "INSERT INTO user (username, password, firstname, lastmane, email, ) VALUES ('$user->name', '$user->passwort')";
?>
Das kann schonmal nicht funktionieren und ist zudem noch eine Sicherheitslücke.
Verwende besser [api:db_set_active] zum Wechseln der Datenbankverbindung. Weiterhin solltest Du den SQL-String korrigieren:
(username, password, firstname, lastmane, email)
und die Werte wie in [api:db_query] gezeigt übergeben.<?php
function Sync_user($op, &$edit, &$account, $category = NULL) {
if($op == 'register') {
datenbank_Sync();
}
}
?>
Wie in der Dokumentation zu [api:hook_user] zu lesen ist, enthält der Parameter
$edit
sämtliche Formularwerte und$account
den zu bearbeitenden Benutzeraccount. Über diese Variablen bekommst Du also die Daten.hth,
Stefan
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
ja der code war noch garnicht
am 14.12.2010 - 16:42 Uhr
ja der code war noch garnicht fertig :) trotzdem danke.
Jetzt hab ich in PHP noch nie mit Objekten gearbeitet xD
mach ich das so richtig? laut meinen tests nicht :(
<?php
// $Id $
/**
*@file
*Synchronisiert die Drupal-Datenbank mit der Datenbank.
*/
function sync_db(&$account) {
db_set_active('test');
$timestamp = time();
$datum = date("Y-m-d",$timestamp);
$sql = "INSERT INTO test2 (username, password, firstname, lastname, email, created) VALUES ('&$account->name', '&$account->pass', '', '', '&$account->mail', 'datum')";
db_query($sql);
}
/**
* Implementierung von hook_user().
*/
function sync_user($op, &$edit, &$account, $category = NULL) {
if($op == 'register') {
sync_db(&$account);
}
}
?>
Viele Grüße
PHP
am 15.12.2010 - 08:39 Uhr
Hallo.
mach ich das so richtig? laut meinen tests nicht :(
Was kommen denn für Fehlermeldungen?
<?php function sync_db(&$account) { ?>
Das
&
beim Parameter benötigst Du nur, wenn Du die Werte in der übergebenen Variable selbst auch ändern möchtest (dann wird die Variable als Referenz übergeben). Das kann also weg.<?php db_set_active('test'); ?>
Hast Du die Verbindungsdaten in die settings.php eingetragen?
<?php
$sql = "INSERT INTO test2 (username, password, firstname, lastname, email, created) VALUES ('&$account->name', '&$account->pass', '', '', '&$account->mail', 'datum')";
db_query($sql);
?>
Das kann so nicht funktionieren.
<?php
$firstname = '???';
$lastname = '???';
$sql = "INSERT INTO {test2} (username, password, firstname, lastname, email, created) VALUES ('%s', '%s', '%s', '%s', '%s', %d)";
$success = db_query($sql, $account->name, $account->pass, $firstname, $lastname, $account->mail, $timestamp);
?>
<?php sync_db(&$account); ?>
Auch hier ist das
&
überflüssig.hth,
Stefan
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Danke, Ja ich hab die andere
am 15.12.2010 - 10:00 Uhr
Danke,
Ja ich hab die andere DB in die settings.php eingetragen.
ich hab den Code jetzt wie folgt angepasst.
<?php
// $Id $
/**
*@file
*Synchronisiert die Drupal-Datenbank mit der Datenbank.
*/
/**
* Implementierung von hook_user().
*/
function dbsync_user($op, &$edit, &$account, $category = NULL) {
if($op == 'register'){
sync_db();
}
}
function sync_db() {
db_set_active('test');
$firstname = '';
$lastname = '';
$sql = "INSERT INTO {test2} (username, password, firstname, lastname, email, created) VALUES ('%s', '%s', '%s', '%s', '%s', %d)";
$success = db_query($sql, $account->name, $account->pass, $firstname, $lastname, $account->mail, $timestamp);
}
?>
Er schreibt jetzt auch bei jeder Registration einen Eintrag in die DB doch die sind leer :(
Liebe Grüße
Parameter
am 15.12.2010 - 09:59 Uhr
Er schreibt jetzt auch bei jeder Registration einen Eintrag in die DB doch die sind leer :(
Du solltest ja auch nicht gleich den ganzen Parameter entfernen, sondern nur das
&
davor.<?php
/**
* Implementierung von hook_user().
*/
function dbsync_user($op, &$edit, &$account, $category = NULL) {
if($op == 'register'){
sync_db($account); // <-- Parameter übergeben!
}
}
function sync_db($account) {
db_set_active('default');
$firstname = '';
$lastname = '';
$sql = "INSERT INTO {test2} (username, password, firstname, lastname, email, created) VALUES ('%s', '%s', '%s', '%s', '%s', %d)";
$success = db_query($sql, $account->name, $account->pass, $firstname, $lastname, $account->mail, $timestamp);
}
?>
hth,
Stefan
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Die sind dann aber trotzdem
am 15.12.2010 - 10:02 Uhr
Die sind dann aber trotzdem leer.
debug
am 15.12.2010 - 10:08 Uhr
Och Mensch.
Ich schrieb doch weiter oben schon, dass
$edit
die abgeschickten Formulardaten und$account
die Daten des Benutzerobjekts beinhalten. Da das ein neuer Benutzer ist, kann in$account
noch nicht allzuviel an Daten enthalten sein, oder?Wie ich ebenfalls weiter oben schrieb, musst Du Dir aus
$edit
und$account
die von Deiner Funktion benötigten Daten zusammensuchen.Dabei hilfreich ist das Modul [do:devel Devel].
Stefan
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Dort kannst Du Dir mit
am 15.12.2010 - 10:31 Uhr
Dort kannst Du Dir mit folgendem Code die entsprechenden Daten ausgeben lassen:
<?php
dpm($account);
dpm($edit);
?>
sense-design | online solutions | Do not hack core!
Drupalcenter Verhaltensregeln | Threads bitte auf [gelöst] stellen.