Datenspeichern aus Modul-Formular

am 22.03.2012 - 10:13 Uhr in
Hallo,
ich baue gerade eine Modul für mich um.
Nun habe ich zwei Tabellen und ein größeres Formular.
(Siehe anhang)
In welcher Funktion, kann ich nun die eingegeben Daten abfangen / eingeben?
Danke euch!
Anhang | Größe |
---|---|
inactive_user.module | 29.36 KB |
- Anmelden oder Registrieren um Kommentare zu schreiben
Code solltest Du hier nicht
am 22.03.2012 - 11:28 Uhr
Code solltest Du hier nicht hochladen, denn da kommt man nicht heran. Drupal verhindert den Zugriff auf Code-Dateien im files-Verzeichnis. Wenn Du hier Hilfe zu Code haben möchtest, lade den bei pastebin hoch in stelle hier nur einen Link dazu ein.
Beste Grüße
Werner
Hochladen ist hier so eine
am 22.03.2012 - 13:40 Uhr
Hochladen ist hier so eine Sache - Firmenfirewall
Deswegen leider etwas lang hier:
Ich suche den Punkt, wo die Einstellungen in der Datenbank gesichert werden...
und somit mein eignebautes Form (user_groups) entsrpechend in der db speichern und auslesen kann.
Beim auslesen müsste das Form so edeitiert werden, das die einträge die bisher ausgewählt waren, wieder automatisch ausgwählt werden. Bzw. wie kann ich ausgewählte Daten auslesen, muss ich diese garnicht selbst speichern und einlesen?
Zitat: Ich suche den Punkt,
am 22.03.2012 - 13:40 Uhr
Ich suche den Punkt, wo die Einstellungen in der Datenbank gesichert werden...
und somit mein eignebautes Form (user_groups) entsrpechend in der db speichern und auslesen kann.
Da kannst du entweder eine eigene Submit-Funktion statt System_settings_form verwenden oder das Ding mit hook_form_alter nachbearbeiten.
Du mußt die default_values
am 22.03.2012 - 14:30 Uhr
Du mußt die default_values anders setzen. Im form_state-Array sind die bereits eingegebenen Values zu finden. Du setzt aber immer explizit das default_value über variable_get. Du mußt also prüfen, ob der Wert bereits in
form_state['values']
zu finden ist und nur wenn der noch nicht gesetzt ist auf variable_get zurückgreifen.Beste Grüße
Werner
Oder
am 22.03.2012 - 14:33 Uhr
Oder variable_get('inactive_user_groups', 0) nutzen :-)
Nun versuche ich entsprechend der Auswahl andere Daten auszulesen.
Allerdings bekomme ich je nach versuch verschiedene Fehler:
<?php
$grouplist = variable_get('inactive_user_groups', 0);
$result = db_query("SELECT tid FROM {taxonomy_term_data} WHERE name IN $grouplist");
var_dump($result);
/*while ($group = db_fetch_object($result)){
var_dump($group);
}*/
?>
Somit:
DOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Array' at line 1: SELECT tid FROM {taxonomy_term_data} WHERE name IN Array; Array ( ) in get_group_number() (Zeile 252 von modules\inactive_user\inactive_user.module).
<?php
$grouplist = variable_get('inactive_user_groups', 0);
$result = db_query("SELECT tid FROM taxonomy_term_data WHERE name IN $grouplist");
var_dump($result);
?>
PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Array' at line 1: SELECT tid FROM taxonomy_term_data WHERE name IN Array; Array ( ) in get_group_number() (Zeile 252 von \modules\inactive_user\inactive_user.module).
<?php
$grouplist = variable_get('inactive_user_groups', 0);
$result = db_query("SELECT tid FROM taxonomy_term_data WHERE name IN ('test1', 'test2')");
var_dump($result);
while ($group = db_fetch_object($result)){
var_dump($group);
}
?>
Fatal error: Call to undefined function db_fetch_object() in \modules\inactive_user\inactive_user.module on line 254
Unter Drupal 7 gibts es kein
am 22.03.2012 - 14:34 Uhr
Unter Drupal 7 gibts es kein db_fetch_object
siehe hier:
http://drupal.org/update/modules/6/7#dbtng
Gruss
Das Modul funktioniert aber
am 23.03.2012 - 09:42 Uhr
Das Modul funktioniert aber unter Drupal 7 und nutzt die funktion auch...
Oder funktioniert das Modul nicht? Inactive User
description = Automatic handling of inactive users
core = 7.x
Wie kann ich bei folgender
am 23.03.2012 - 09:44 Uhr
Wie kann ich bei folgender Zeile ein WHERE name IN $array einfügen?:
Die richtige Lösung scheint folgende zu sein - http://drupal.org/update/modules/6/7#dbtng:
If you want multiple options with the IN you need to add en array with all the elements
<?php
$result = db_query("SELECT rid, name FROM {role} WHERE rid NOT IN (:rid)", array(
':rid' =>array(1,2,3),
)
);
?>
Hi am Schluss
am 22.03.2012 - 15:23 Uhr
Hi
am Schluss statt
REQUEST_TIME, $notify_time, REQUEST_TIME, $notify_time);
einfach
REQUEST_TIME, $notify_time, REQUEST_TIME, $notify_time) AND taxonomy_term_data.Name IN ('Gruppe1', 'Gruppe2') ;
natürlich muss du taxonomy_term_data joinen
so sollte es gehen.
Gruss
Sry, aber das kann ich nicht
am 22.03.2012 - 15:27 Uhr
Sry, aber das kann ich nicht glauben, hinter Parametern willst du wieder mit SQL anfangen?
Ist es wirklich so? Kannst du bitte an diesem beispiel dies kompett nachbauen, auch mit Join?
Wie sieht das ganze vorallem mit den Klammern bei den Tabellen aus?
{tabellenname}.attr?
Hi, Du kannst an WHERE
am 22.03.2012 - 15:40 Uhr
Hi,
Du kannst an WHERE Klauseln beliebig viele AND und OR an hängen.
Die Klammern bewirken, falls in den Einstellungen ein Datenbank Präfix
gesetzt wurde , z.B: db1_
Dann wird {node}.nid in db_query durch db1_node.nid
ersetzt.
LG
und wo würde ich entsprechend
am 23.03.2012 - 09:46 Uhr
und wo würde ich entsprechend das Array mit übergeben?
<?php
$result = db_query('SELECT {users}.uid, {users}.name, {users}.mail, {users}.access, {users}.created FROM {users} LEFT JOIN {field_revision_field_taxgroup} ON {users}.uid = {field_revision_field_taxgroup}.entity_id LEFT JOIN {taxonomy_term_data} ON {field_revision_field_taxgroup}.field_taxgroup_tid = {taxonomy_term_data}.tid WHERE (({users}.access <> 0 AND {users}.login <> 0 AND {users}.access < (%d - %d)) OR ({users}.login = 0 AND {users}.created < (%d - %d))) AND {users}.uid <> 1 AND taxonomy_term_data.Name IN (%d)', REQUEST_TIME, $notify_time, REQUEST_TIME, $notify_time, $grouplist);
?>
Leider bekomme ich nun den Fehler wie von euch angekündigt, obwohl es sich um ein Modul 7.x-dev handelt:
Fatal error: Call to undefined function db_fetch_object()
Wie kann ich das lösen?!:
<?php
$users = db_fetch_object(db_query('SELECT uid FROM {inactive_users} WHERE uid <> :uid', array(':uid' => 1)));
?>
Das ist nur eine Beispiel-Zeile - wie sollte diese richtig bei Drupal 7 aussehen?
http://drupal.org/update/modules/6/7#dbtng
Habe somit aus erstens zweitens gemacht - ist das richtig?:
1.:
<?php
$users = db_fetch_object(db_query('SELECT uid FROM {inactive_users} WHERE uid <> :uid', array(':uid' => 1)));
if ($users) {
foreach ($users as $uid) {
$u = db_fetch_object(db_query('SELECT access, name FROM {users} WHERE uid = :uid', array(':uid' => $uid)));
if ($u->access > REQUEST_TIME - 604800) {
// user activity in last week, remove from inactivity table
db_query('DELETE FROM {inactive_users} WHERE uid = %d', $uid);
db_delete('inactive_users')
->condition('uid', $uid)
->execute();
watchdog('user', 'recent user activity: %user removed from inactivity list', array('%user' => $u->name), WATCHDOG_NOTICE, l(t('edit user'), "user/$uid/edit", array('query' => array('destination' => 'admin/user/user'))));
}
}
}
?>
2.:
<?php
$result = db_query('SELECT uid FROM {inactive_users} WHERE uid <> :uid', array(':uid' => 1));
foreach ($result as $uid) {
if ($u->access > REQUEST_TIME - 604800) {
db_query('DELETE FROM {inactive_users} WHERE uid = %d', $uid);
db_delete('inactive_users')
->condition('uid', $uid)
->execute();
watchdog('user', 'recent user activity: %user removed from inactivity list', array('%user' => $u->name), WATCHDOG_NOTICE, l(t('edit user'), "user/$uid/edit", array('query' => array('destination' => 'admin/user/user'))));
}
}
?>
Zur ersten
am 23.03.2012 - 09:59 Uhr
Zur ersten Zeile:
$result = db_query('SELECT {users}.uid, {users}.name, {users}.mail, {users}.access, {users}.created FROM {users} LEFT JOIN {field_revision_field_taxgroup} ON {users}.uid = {field_revision_field_taxgroup}.entity_id LEFT JOIN {taxonomy_term_data} ON {field_revision_field_taxgroup}.field_taxgroup_tid = {taxonomy_term_data}.tid WHERE (({users}.access <> 0 AND {users}.login <> 0 AND {users}.access < (%d - %d)) OR ({users}.login = 0 AND {users}.created < (%d - %d))) AND {users}.uid <> 1 AND taxonomy_term_data.Name IN (%d)', REQUEST_TIME, $notify_time, REQUEST_TIME, $notify_time, $grouplist);
Hier übergibst du eine Dezimal Variabale an ein Varchar Feld und dann noch als Array???
taxonomy_term_data.Name IN (%d)',
Das müsste eine Komma separierte String Variable IN (%s) sein, welche
Komma separierte Termnamen enthält.
Du kannst mit $commalist=implode(',',$array); in einer Zeile aus einem array eine Komma separierte liste machen.
Zum Fehler unknown Function db_fetch_object:
Lass das einfach weg in Drupal 7
$result=db_query("DEIN QEURY");
/ Drupal 7
foreach ($result as $record) {
// Do stuff with $record, which is an object
}
Gruss
PS:
Dieser Code:
db_query("SELECT rid, name FROM {role} WHERE rid NOT IN (:rid)",
array(
':rid' =>array(1,2,3),
)
);
ist das selbe wie:
db_query("SELECT rid, name FROM {role} WHERE rid NOT IN (1,2,3)");
Okay, ich probiere es mal so!
am 23.03.2012 - 10:20 Uhr
Okay, ich probiere es mal so! (Dauert nen kleinen moment)
In der Zwischenzeit bekomme ich in folgender Zeile diesen Fehler
Recoverable fatal error: Argument 2 passed to db_query() must be an array, integer given
<?php
$result = db_query('SELECT uid, name, mail, access, created FROM {users} WHERE ((access <> 0 AND login <> 0 AND access < (%d - %d)) OR (login = 0 AND created < (%d - %d))) AND uid <> 1', REQUEST_TIME, $notify_time, REQUEST_TIME, $notify_time);
//bei beiden das gleiche:
$result = db_query('SELECT * FROM {users} LEFT JOIN {field_revision_field_taxgroup} ON {users}.uid = {field_revision_field_taxgroup}.entity_id LEFT JOIN {taxonomy_term_data} ON {field_revision_field_taxgroup}.field_taxgroup_tid = {taxonomy_term_data}.tid WHERE (({users}.access <> 0 AND {users}.login <> 0 AND {users}.access < (%d - %d)) OR ({users}.login = 0 AND {users}.created < (%d - %d))) AND status <> 0 AND {users}.uid <> 1 AND taxonomy_term_data.Name IN (%s)', REQUEST_TIME, $notify_time, REQUEST_TIME, $notify_time, $grouplist);
//grouplist is a string e.g. 'test1','test2',...
?>
Hi versuch es mal so und pack
am 23.03.2012 - 10:37 Uhr
Hi versuch es mal so und pack alle Args in ein Array:
$result = db_query('SELECT uid, name, mail, access, created FROM {users} WHERE ((access <> 0 AND login <> 0 AND access < (%d - %d)) OR (login = 0 AND created < (%d - %d))) AND uid <> 1',array( REQUEST_TIME, $notify_time, REQUEST_TIME, $notify_time));
LG
Habe bei dem zweiten Ausdruck
am 23.03.2012 - 10:42 Uhr
Habe bei dem zweiten Ausdruck mal alles i ein Array gepackt, wirft aber einen SQL Fehler:
PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%d - %d)) OR (users.login = 0 AND users.created < (%d - %d))) AND users.uid <> 1' at line 1: SELECT {users}.uid, {users}.name, {users}.mail, {users}.access, {users}.created FROM {users} LEFT JOIN {field_revision_field_taxgroup} ON {users}.uid = {field_revision_field_taxgroup}.entity_id LEFT JOIN {taxonomy_term_data} ON {field_revision_field_taxgroup}.field_taxgroup_tid = {taxonomy_term_data}.tid WHERE (({users}.access <> 0 AND {users}.login <> 0 AND {users}.access < (%d - %d)) OR ({users}.login = 0 AND {users}.created < (%d - %d))) AND {users}.uid <> 1 AND taxonomy_term_data.Name IN (%s); Array ( [0] => 1332495638 [1] => 604800 [2] => 1332495638 [3] => 604800 [4] => 'test1','test2','test3','test4' ) in inactive_user_cron()
<?php
$result = db_query('SELECT {users}.uid, {users}.name, {users}.mail, {users}.access, {users}.created FROM {users} LEFT JOIN {field_revision_field_taxgroup} ON {users}.uid = {field_revision_field_taxgroup}.entity_id LEFT JOIN {taxonomy_term_data} ON {field_revision_field_taxgroup}.field_taxgroup_tid = {taxonomy_term_data}.tid WHERE (({users}.access <> 0 AND {users}.login <> 0 AND {users}.access < (%d - %d)) OR ({users}.login = 0 AND {users}.created < (%d - %d))) AND {users}.uid <> 1 AND taxonomy_term_data.Name IN (%s)', array(REQUEST_TIME, $notify_time, REQUEST_TIME, $notify_time, $grouplist)); //grouplist is a list as a string
?>
Letzter Versuch, probier mal
am 23.03.2012 - 11:01 Uhr
Letzter Versuch, probier mal die Argumente mit namen zu versehen:
$result = db_query('SELECT {users}.uid, {users}.name, {users}.mail, {users}.access, {users}.created FROM {users} LEFT JOIN {field_revision_field_taxgroup} ON {users}.uid = {field_revision_field_taxgroup}.entity_id LEFT JOIN {taxonomy_term_data} ON {field_revision_field_taxgroup}.field_taxgroup_tid = {taxonomy_term_data}.tid WHERE (({users}.access <> 0 AND {users}.login <> 0 AND {users}.access < (:req_time1-:not_time1)) OR ({users}.login = 0 AND {users}.created < (:req_time2 - :not_time2))) AND {users}.uid <> 1 AND taxonomy_term_data.Name IN (:list)', array(':req_time1'=>REQUEST_TIME, ':not_time1'=>$notify_time,':req_time2'=>REQUEST_TIME, ':not_time2'=>$notify_time, ':list'=>$grouplist)); //grouplist is a list as a string
Gruss
So scheint es jetzt zu gehen
am 23.03.2012 - 11:20 Uhr
So scheint es jetzt zu gehen also nicht mehr %d sondern immer :name und im Array diesen definieren.
<?php
$result = db_query('SELECT uid, name, mail, access, created FROM {users} WHERE ((access <> 0 AND login <> 0 AND access < (:request_time - :notify_time)) OR (login = 0 AND created < (:request_time - :notify_time))) AND uid <> 1', array(':request_time' => REQUEST_TIME, ':notify_time' => $notify_time));
?>
Hab es also von hier übernommen:
http://api.drupal.org/api/drupal/includes!database!database.inc/function/db_query/7
Wenn ich mir nun result ausgebe kommt folgendes:
Result:object(DatabaseStatementBase)#102 (2) {
["dbh"]=> object(DatabaseConnection_mysql)#2 (15) {
["shutdownRegistered":protected]=> bool(false)
["target":protected]=> string(7) "default"
["key":protected]=> string(7) "default"
["logger":protected]=> NULL
["transactionLayers":protected]=> array(0) { }
["driverClasses":protected]=> array(7) {
["SelectQuery"]=> string(11) "SelectQuery"
["InsertQuery"]=> string(17) "InsertQuery_mysql"
["DatabaseSchema"]=> string(20) "DatabaseSchema_mysql"
["DeleteQuery"]=> string(11) "DeleteQuery"
["UpdateQuery"]=> string(11) "UpdateQuery"
["MergeQuery"]=> string(10) "MergeQuery"
["DatabaseTransaction"]=> string(19) "DatabaseTransaction"
}
["statementClass":protected]=> string(21) "DatabaseStatementBase"
["transactionSupport":protected]=> bool(true)
["transactionalDDLSupport":protected]=> bool(false)
["temporaryNameIndex":protected]=> int(0)
["connectionOptions":protected]=> array(7) {
["database"]=> string(19) "xxxxx"
["username"]=> string(10) "xxxxx"
["password"]=> string(16) "xxxxx"
["host"]=> string(9) "localhost"
["port"]=> string(0) ""
["driver"]=> string(5) "mysql"
["prefix"]=> array(1) { ["default"]=> string(0) "" }
}
["schema":protected]=> object(DatabaseSchema_mysql)#327 (4) {
["connection":protected]=> *RECURSION*
["placeholder":protected]=> int(0)
["defaultSchema":protected]=> string(6) "public"
["uniqueIdentifier":protected]=> string(23) "4f6c485d928d93.76210758"
}
["prefixes":protected]=> array(1) { ["default"]=> string(0) "" }
["prefixSearch":protected]=> array(2) { [0]=> string(1) "{" [1]=> string(1) "}" }
["prefixReplace":protected]=> array(2) { [0]=> string(0) "" [1]=> string(0) "" } }
["queryString"]=> string(515) "SELECT users.uid, users.name, users.mail, users.access, users.created FROM users LEFT JOIN field_revision_field_taxgroup ON users.uid = field_revision_field_taxgroup.entity_id LEFT JOIN taxonomy_term_data ON field_revision_field_taxgroup.field_taxgroup_tid = taxonomy_term_data.tid WHERE ((users.access <> 0 AND users.login <> 0 AND users.access < (:request_time - :notify_time)) OR (users.login = 0 AND users.created < (:request_time - :notify_time))) AND users.uid <> 1 AND taxonomy_term_data.Name IN (:grouplist)" }
Aber in die Schleife geht er nicht
<?php
foreach ($result as $user) {
echo "found user"; ...
?>
Sollte an der Stelle die :name nicht schon ersetzt sein?!
Du selectest in dem Statement
am 23.03.2012 - 11:24 Uhr
Du selectest in dem Statement diese Felder uid, name, mail, access, created
Du kannst nur Felder ansprechen die auch selected wurde, und :name wurde bereits im db_query ersetzt.
foreach ($result as $user) {
echo $user->uid.'<br>';
echo $user->name.'<br>';
echo $user->email.'<br>';
};
Gruss
Entschuldigung, aber
am 23.03.2012 - 14:08 Uhr
Entschuldigung, aber villeicht verstehe ich dich nicht. Das was du mir sagen willst weiß ich schon und php allgemein mit MySQL kann ich eigentlich schon ;-)
Dies war einfach nur ein Echo, ich wollte ausdrücken, dass dieser nicht in die Schleife geht.
Ob da nun nen var_dump, print_r oder echt steht ist doch egal.
Seht ihr nen Fehler in dem MySQL Tag oder sollte wie oben schon gefragt, bei der Ausgabe die :name nicht schon längst ersetzt sein?
Das würde erklären warum er nichts findet!
Ich möchte alle User, die länger als z.B. 3 Wochen sich nicht eingeloggt haben und User die sich noch nie eingeloggt haben (aufgrund einer migration notwendig)
eine Mail schreiben.
Hmm Merkwürdig, ich denke die
am 23.03.2012 - 14:32 Uhr
Hmm Merkwürdig,
ich denke die Parameter sollten erseztt sein im result.
ausserdem solltest du als result ein array von objekten bekommen
und nicht die connection.
Probier mal dieses Statement:
$uid = 1;
$result = db_query('SELECT n.nid, n.title, n.created
FROM {node} n WHERE n.uid = :uid', array(':uid' => $uid));
// Result is returned as a iterable object that returns a stdClass object on each iteration
foreach ($result as $record) {
// Perform operations on $record->title, etc. here.
// in this example the available data would be mapped to object properties:
// $record->nid, $record->title, $record->created
}
Ist das eine ältere Druapl 7 Version?
LG
Nein neuste Drupal
am 23.03.2012 - 15:47 Uhr
Nein neuste Drupal Version.
Bei deinem MySQL sieht die ausgabe genau so aus, und die ausgabe von $recorde ist auch anständig,
also scheint es so als wenn er wirklich keine Datensätze für meine Abfrage findet.
Ist dieser den von der Logik her richtig?
Wie oben Beschrieben, alle User anzuschreiben, die sich entweder drei wochen nicht angemeldet haben oder noch nie angemeldet waren?!
Habe noch mal die Ganze Datei angehangen.
Also es funktioniert immer
am 26.03.2012 - 13:30 Uhr
Also es funktioniert immer noch nicht.
Nehme ich den MySQL Code und probiere es selbst über phpMyAdmin aus, bekomme ich genau das was ich möchte.
Aber ich komme da einfach nicht rein:
<?php
$result = db_query('SELECT {users}.uid, {users}.name, {users}.mail, {users}.access, {users}.created FROM {users} LEFT JOIN {field_revision_field_taxgroup} ON {users}.uid = {field_revision_field_taxgroup}.entity_id LEFT JOIN {taxonomy_term_data} ON {field_revision_field_taxgroup}.field_taxgroup_tid = {taxonomy_term_data}.tid WHERE (({users}.access <> 0 AND {users}.login <> 0 AND {users}.access < (:request_time - :notify_time)) OR ({users}.login = 0 AND {users}.created < (:request_time - :notify_time))) AND {users}.uid <> 1 AND taxonomy_term_data.Name IN (:grouplist)', array(':request_time' => REQUEST_TIME, ':notify_time' => $notify_time, ':grouplist' => $grouplist)); //grouplist is a list as a string
echo '<br />grouplist: '.$grouplist.'<br/>';
echo "<br />REQUEST_TIME: ".REQUEST_TIME;
echo '<br />notify_time: '.$notify_time.'<br/>';
var_dump($result);
//while ($user = db_fetch_object($result)) {
foreach ($result as $user) {
echo "<strong>found user</strong>";
...
?>
Hi
am 26.03.2012 - 14:29 Uhr
also wenn das per phpMyAdmin funktioniert ist das Statment wohl richtig.
Das einzige was ich mir noch vorstellen kann ist evtl folgendes:
$grouplist muss wie folgt übergeben werden ' "String1","String2","String3" ' .
Das heisst $grouplist ist ein String und KEIN Array!
Das Statemen muss die folgende ausgabe haben
taxonomy_term_data.Name IN ("'String1","String2","String3")
Achte darauf dass der String die Anführungszeichen für jedes Element
enthält.
Das hier wäre falsch:
taxonomy_term_data.Name IN (String1,String2,String3)
Gruss
Grouplist:
am 26.03.2012 - 14:38 Uhr
Grouplist: "balA","blaB","bla1A","bla1B"
Wie gesagt in phpMyADmin geht es.
Folgender Code funktioniert
am 27.03.2012 - 07:41 Uhr
Folgender Code funktioniert auch einbahn frei:
<?php
echo '<br />#####################################<br />';
$request_time = REQUEST_TIME;
mysql_connect("localhost", "xyz","xyz") or die ("Keine Verbindung moeglich");
mysql_select_db("dev") or die ("Die Datenbank existiert nicht.");
$mysqlstring = "SELECT users.uid, users.name, users.mail, users.access, users.created FROM users LEFT JOIN field_revision_field_taxgroup ON users.uid = field_revision_field_taxgroup.entity_id LEFT JOIN taxonomy_term_data ON field_revision_field_taxgroup.field_taxgroup_tid = taxonomy_term_data.tid WHERE ((users.access <> 0 AND users.login <> 0 AND users.access < ($request_time - $notify_time)) OR (users.login = 0 AND users.created < ($request_time - $notify_time))) AND users.uid <> 1 AND taxonomy_term_data.Name IN ($grouplist)";
$ergebnis = mysql_query($mysqlstring) or die (mysql_error());;
while($row = mysql_fetch_object($ergebnis))
{
print_r($row);
echo '<br />';
}
echo '<br />#####################################<br />';
?>
Dieser allerdings nach wie vor nicht:
<?php
$result = db_query('SELECT {users}.uid, {users}.name, {users}.mail, {users}.access, {users}.created FROM {users} LEFT JOIN {field_revision_field_taxgroup} ON {users}.uid = {field_revision_field_taxgroup}.entity_id LEFT JOIN {taxonomy_term_data} ON {field_revision_field_taxgroup}.field_taxgroup_tid = {taxonomy_term_data}.tid WHERE (({users}.access <> 0 AND {users}.login <> 0 AND {users}.access < (:request_time - :notify_time)) OR ({users}.login = 0 AND {users}.created < (:request_time - :notify_time))) AND {users}.uid <> 1 AND taxonomy_term_data.Name IN (:grouplist)', array(':request_time' => REQUEST_TIME, ':notify_time' => $notify_time, ':grouplist' => $grouplist)); //grouplist is a list as a string
foreach ($result as $user) {
echo "<strong>found user</strong>";
print_r($user);
//...
}
?>
Diese Alternative geht auch:
<?php
$request_time = REQUEST_TIME;
$result = db_query("SELECT {users}.uid, {users}.name, {users}.mail, {users}.access, {users}.created FROM {users} LEFT JOIN {field_revision_field_taxgroup} ON {users}.uid = {field_revision_field_taxgroup}.entity_id LEFT JOIN {taxonomy_term_data} ON {field_revision_field_taxgroup}.field_taxgroup_tid = {taxonomy_term_data}.tid WHERE (({users}.access <> 0 AND {users}.login <> 0 AND {users}.access < ($request_time - $notify_time)) OR ({users}.login = 0 AND {users}.created < ($request_time - $notify_time))) AND {users}.uid <> 1 AND taxonomy_term_data.Name IN ($grouplist)"); //grouplist is a list as a string
?>
Wobei ich jetzt den Fehler bekomme:
Fatal error: Call to undefined function db_fetch_object() in \modules\inactive_user\inactive_user.module on line 348
<?php
348:if ($user->uid && !db_fetch_object(db_query('SELECT uid FROM {inactive_users} WHERE uid = :uid AND notified_admin = 1', array(':uid' => $user->uid))) && ($user->created < (REQUEST_TIME - $notify_time))) {
db_query('UPDATE {inactive_users} SET notified_admin = 1 WHERE uid = :uid', $user->uid);
if (!db_affected_rows()) {
// must create a new row
@db_query('INSERT INTO {inactive_users} (uid, notified_admin) VALUES (:uid, 1)', array(':uid' => $user->uid));
}
?>
Wie oft noch? db_fetch_object
am 27.03.2012 - 08:02 Uhr
Wie oft noch?
db_fetch_object
gibt es in Drupal 7 nicht. Diese Stelle kann also gar nicht funktionieren. Außer, irgendjemand hat eine Funktion, die so heißt, bei euch implementiert, was ziemlich sinnfrei wäre.Zeig uns mal die Stelle, an der
$grouplist
belegt wird. Was genau steht da drin? (Bitte mit Code-Beispiel)Exterior schrieb Wie oft
am 27.03.2012 - 08:10 Uhr
Wie oft noch?
db_fetch_object
gibt es in Drupal 7 nicht. Diese Stelle kann also gar nicht funktionieren. Außer, irgendjemand hat eine Funktion, die so heißt, bei euch implementiert, was ziemlich sinnfrei wäre.Zeig uns mal die Stelle, an der
$grouplist
belegt wird. Was genau steht da drin? (Bitte mit Code-Beispiel)Das ist mir klar, deswegen fragte ich nach der alternative wie ich in einem Ausdruck dieses ohne Schleife ersetzen kann.
Weiterhin habe ich die Ausgabe von grouplist oft genug hier gezeigt:
<?php
function get_selectedgroups_asString(){
//var_dump(variable_get('inactive_user_groups', 0));
$groups = get_selectedgroups();
if(in_array('disabled', $groups, true) OR in_array("0", $groups, true)){
return false;
}
$groupstring = '\''.$groups[0].'\'';
for( $i = 1; $i < count ($groups); $i++){
$groupstring .= ',\''.$groups[$i].'\'';
}
//$groupstring = implode(',', $groups);
//echo $groupstring; // 'abc1','abc2',...
return $groupstring;
}
//False wird von der aufrufenden methode abgefangen!
?>
Wenn es doch wie oben gezeigt, in der Funktion mit direkter übergabe klappt, liegt es doch offensichtlich an der Paramter übergabe. Da ich allerdigns keine vertiefte Ahnung von Drupal habe mache ich es nun eben so... Was allerdings nicht der Sinn von Paramtern sein sollte!
Zitat:Weiterhin habe ich die
am 27.03.2012 - 09:13 Uhr
Weiterhin habe ich die Ausgabe von grouplist oft genug hier gezeigt:
Da dieser Thread aber ziemlich unübersichtlich und deine Beiträge mitunter etwas wirr sind, frage ich lieber nochmal nach und habe die benötigten Informationen da zusammengetragen, wo ich sie erwarte.
Daher - auch auf die Gefahr hin, dass du diese Frage hier schon irgendwo beantwortet hast: Hast du schonmal versucht, die Gruppen als Parameter nicht als String (
"'1', '2', '3', '4'"
), sondern als Array zu übergeben? Also mit<?php ':grouplist' => array(1, 2, 3, 4) ?>
?Das ist mir klar, deswegen fragte ich nach der alternative wie ich in einem Ausdruck dieses ohne Schleife ersetzen kann.
Probier's mit
fetchField()
<?php
if ( ($user->uid) && (!db_query('SELECT uid FROM {inactive_users} WHERE uid = :uid AND notified_admin = 1', array(':uid' => $user->uid))->fetchField()) && ($user->created < (REQUEST_TIME - $notify_time))) { /* Mach etwas */ }
?>
Siehe fetchField()