Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Anfängerfragen ›

Datenspeichern aus Modul-Formular

Eingetragen von notnamed (56)
am 22.03.2012 - 10:13 Uhr in
  • Anfängerfragen
  • Drupal 7.x oder neuer

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!

AnhangGröße
inactive_user.module29.36 KB
‹ Link auf andere Seite während Wartungsarbeiten Module von Drupal 6 zu Drupal 7 ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Code solltest Du hier nicht

Eingetragen von wla (9461)
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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hochladen ist hier so eine

Eingetragen von notnamed (56)
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?

AnhangGröße
inactive_user.txt 29.41 KB
  • Anmelden oder Registrieren um Kommentare zu schreiben

Zitat: Ich suche den Punkt,

Eingetragen von Exterior (2903)
am 22.03.2012 - 13:40 Uhr
Zitat:

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.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Du mußt die default_values

Eingetragen von wla (9461)
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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Oder

Eingetragen von notnamed (56)
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:

Zitat:

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);
?>

Zitat:

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);
    }

?>

Zitat:

Fatal error: Call to undefined function db_fetch_object() in \modules\inactive_user\inactive_user.module on line 254

  • Anmelden oder Registrieren um Kommentare zu schreiben

Unter Drupal 7 gibts es kein

Eingetragen von Hyp1 (1463)
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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Das Modul funktioniert aber

Eingetragen von notnamed (56)
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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Wie kann ich bei folgender

Eingetragen von notnamed (56)
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:

Zitat:

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),
  )
);
?>

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hi am Schluss

Eingetragen von Hyp1 (1463)
am 22.03.2012 - 15:23 Uhr

Hi
am Schluss statt

Zitat:

REQUEST_TIME, $notify_time, REQUEST_TIME, $notify_time);

einfach

Zitat:

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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Sry, aber das kann ich nicht

Eingetragen von notnamed (56)
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?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hi, Du kannst an WHERE

Eingetragen von Hyp1 (1463)
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

  • Anmelden oder Registrieren um Kommentare zu schreiben

und wo würde ich entsprechend

Eingetragen von notnamed (56)
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:

Zitat:

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'))));
        }
      }


?>

  • Anmelden oder Registrieren um Kommentare zu schreiben

Zur ersten

Eingetragen von Hyp1 (1463)
am 23.03.2012 - 09:59 Uhr

Zur ersten Zeile:

Zitat:

$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???

Zitat:

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:

Zitat:

db_query("SELECT rid, name FROM {role} WHERE rid NOT IN (:rid)",
array(
':rid' =>array(1,2,3),
)
);

ist das selbe wie:

Zitat:

db_query("SELECT rid, name FROM {role} WHERE rid NOT IN (1,2,3)");

  • Anmelden oder Registrieren um Kommentare zu schreiben

Okay, ich probiere es mal so!

Eingetragen von notnamed (56)
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

Zitat:

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',...   
?>

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hi versuch es mal so und pack

Eingetragen von Hyp1 (1463)
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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Habe bei dem zweiten Ausdruck

Eingetragen von notnamed (56)
am 23.03.2012 - 10:42 Uhr

Habe bei dem zweiten Ausdruck mal alles i ein Array gepackt, wirft aber einen SQL Fehler:

Zitat:

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
       
?>

  • Anmelden oder Registrieren um Kommentare zu schreiben

Letzter Versuch, probier mal

Eingetragen von Hyp1 (1463)
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

  • Anmelden oder Registrieren um Kommentare zu schreiben

So scheint es jetzt zu gehen

Eingetragen von notnamed (56)
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:

Zitat:

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?!

  • Anmelden oder Registrieren um Kommentare zu schreiben

Du selectest in dem Statement

Eingetragen von Hyp1 (1463)
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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Entschuldigung, aber

Eingetragen von notnamed (56)
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.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hmm Merkwürdig, ich denke die

Eingetragen von Hyp1 (1463)
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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Nein neuste Drupal

Eingetragen von notnamed (56)
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.

AnhangGröße
inactive_user.txt 18.19 KB
  • Anmelden oder Registrieren um Kommentare zu schreiben

Also es funktioniert immer

Eingetragen von notnamed (56)
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>";
...
?>

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hi

Eingetragen von Hyp1 (1463)
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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Grouplist:

Eingetragen von notnamed (56)
am 26.03.2012 - 14:38 Uhr

Grouplist: "balA","blaB","bla1A","bla1B"
Wie gesagt in phpMyADmin geht es.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Folgender Code funktioniert

Eingetragen von notnamed (56)
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));
              }
?>

  • Anmelden oder Registrieren um Kommentare zu schreiben

Wie oft noch? db_fetch_object

Eingetragen von Exterior (2903)
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)

  • Anmelden oder Registrieren um Kommentare zu schreiben

Exterior schrieb Wie oft

Eingetragen von notnamed (56)
am 27.03.2012 - 08:10 Uhr
Exterior schrieb

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!

  • Anmelden oder Registrieren um Kommentare zu schreiben

Zitat:Weiterhin habe ich die

Eingetragen von Exterior (2903)
am 27.03.2012 - 09:13 Uhr
Zitat:

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) ?>?

Zitat:

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()

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Medien und andere Daten mit Feeds von Drupal 7 auf Drupal 10 migrieren
  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
Weiter

Neue Kommentare

  • Inzwischen sind wir bei
    vor 1 Tag 23 Minuten
  • Migrieren von D7 auf D8/ D10/ D11
    vor 1 Tag 16 Stunden
  • melde mich mal wieder, da ich
    vor 7 Wochen 5 Tagen
  • Hey danke
    vor 7 Wochen 6 Tagen
  • Update: jetzt gibt's ein
    vor 8 Wochen 9 Stunden
  • Hallo, im Prinzip habe ich
    vor 8 Wochen 4 Tagen
  • Da scheint die Terminologie
    vor 8 Wochen 4 Tagen
  • Kannst doch auch alles direkt
    vor 9 Wochen 2 Tagen
  • In der entsprechenden View
    vor 9 Wochen 2 Tagen
  • Dazu müsstest Du vermutlich
    vor 9 Wochen 2 Tagen

Statistik

Beiträge im Forum: 250235
Registrierte User: 20462

Neue User:

  • marouane.blel
  • capilclinic
  • Quabzibboter

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 17 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association