Vorschlag Neues PlugIn Abfrage der E-Mailadresse / Rolle

Hast du Vorschläge, was wir an Admidio noch verbessern könnten ? Hier kannst du uns deine Vorstellung an neuen Funktionen mitteilen.
Finu
Beiträge: 17
Registriert: 24. Aug 2011, 23:46

SQL Statement

Beitrag von Finu »

Hallo Matze

Ich habe das Script auch übernommen und das läuft soweit. Ich möchte dies nun erweitern und habe aber noch eine Frage. Ich bin kein SQL Spezialist und verstehe das row1id12 in folgendem SQL Statement nicht. Ich finde row1id12 in keiner Tabelle der Datenbank

$sql = "SELECT usr_id, row1id12.usd_value
FROM ". TBL_ROLES. ", ". TBL_CATEGORIES. ", ". TBL_MEMBERS. ", ". TBL_USERS. "
LEFT JOIN adm_user_data row1id12 ON row1id12.usd_usr_id = usr_id AND row1id12.usd_usf_id = 12
WHERE rol_id = ". $rolle_nr. " AND rol_cat_id = cat_id AND cat_org_id = 1 AND mem_rol_id = rol_id AND mem_end > '". $datum. "' AND mem_usr_id = usr_id AND usr_valid = 1 AND row1id12.usd_value != ''";

Gruss Finu
matzman2000
Former team member
Beiträge: 1087
Registriert: 2. Sep 2007, 17:12
Wohnort: Itzstedt
Kontaktdaten:

Beitrag von matzman2000 »

Hallo Finu,

row1id12 ist nur ein Synonym, das durch den LET JOIN zugewiesen wird:

Code: Alles auswählen

LEFT JOIN adm_user_data row1id12 
Im Prinzip bezeichnet es also die Tabelle adm_user_data.

Gruss,
Matze
Finu
Beiträge: 17
Registriert: 24. Aug 2011, 23:46

Beitrag von Finu »

Hallo Matze

Besten Dank für die Antwort! Anhand deiner Erklärung dachte ich, dass ich auch folgendes schreiben könnte:

LEFT JOIN adm_user_data ON adm_user_data.usd_usr_id = usr_id
anstatt:
LEFT JOIN adm_user_data row1id12 ON row1id12.usd_usr_id = usr_id

Dies scheint nicht zu gehen. Wenn du eine kurze Erklärung hast bin ich dir dankbar, sonst lass es sein.

Was ich eigentlich möchte ist, dass ich die Daten von Benutzern von verschiedenen rollen kriege. Ich habe das wie folgt versucht und es scheint zu funktionieren (bei WHERE für jede Rolle alles mit OR wiederholen):

$sql = "SELECT usr_id, row1id12.usd_value
FROM ". TBL_ROLES. ", ". TBL_CATEGORIES. ", ". TBL_MEMBERS. ", ". TBL_USERS. "
LEFT JOIN adm_user_data row1id12 ON adm_user_data.usd_usr_id = usr_id AND row1id12.usd_usf_id = 12
WHERE (rol_id = ". $rolle_nr. " AND rol_cat_id = cat_id AND cat_org_id = 1 AND mem_rol_id = rol_id AND mem_end > '". $datum. "' AND mem_usr_id = usr_id AND usr_valid = 1 AND row1id12.usd_value != '')
OR (rol_id = ". $rolle_nrX. " AND rol_cat_id = cat_id AND cat_org_id = 1 AND mem_rol_id = rol_id AND mem_end > '". $datum. "' AND mem_usr_id = usr_id AND usr_valid = 1 AND row1id12.usd_value != '')";

Das wird für mehrere Rollen etwas lange. Geht das auch kürzer?

Die Abfrage dauert auch ziemlich lange, ich vermute aber dass das am User-Ojekt liegt, das für die Ausgabe hergenommen wird.

Besten Dank und Gruss
Finu
matzman2000
Former team member
Beiträge: 1087
Registriert: 2. Sep 2007, 17:12
Wohnort: Itzstedt
Kontaktdaten:

Beitrag von matzman2000 »

Naja, wenn Du mehrere Rollen abfragen willst, musst Du auch die IDs aller Rollen kennen und die Abfrage mit einem OR kombinieren.

Sinngemäss: Zeige mir alle Benutzer an, die die Rolle abc ODER xyz haben.

Du müsstest Dir also die Rollen-IDs raussuchen und die eigentliche SQL Abfrage umbauen. Und zwar dort wor die Rolle(n) abgefragt werden, ungefähr so:

IST

Code: Alles auswählen

WHERE rol_id = ". $rolle_nr. "
SOLL

Code: Alles auswählen

WHERE rol_id = ". $rolle_nr_1. " OR rol_id = ". $rolle_nr_2. "
Hab ich jetzt nicht getestet...
Finu
Beiträge: 17
Registriert: 24. Aug 2011, 23:46

Beitrag von Finu »

Das war auch meine erste Idee, das hat dann zu einer sehr langen Liste mit Mehrfach-Ausgabe aller Adressen dieser Rollen geführt. Jetzt habe ich um die OR-Verknüpfungen eine Klammer hinzugefügt. So läuft es. Also wie folgt:

...WHERE (rol_id = ". $rolle_nr_1. " OR rol_id = ". $rolle_nr_2. " ) AND rol_cat_id = cat_id AND....

Besten Dank und Gruss
Finu
muellermanu
Beiträge: 112
Registriert: 27. Feb 2009, 00:02
Wohnort: Schönau a.d. Brend
Kontaktdaten:

Re: Vorschlag Neues PlugIn Abfrage der E-Mailadresse / Rolle

Beitrag von muellermanu »

Hallo Admidio Team,

seite dem ich von der Version 2.7 auf 2.3.5 geupdatet habe funktioniert das Skript nicht mehr

Es erscheint nichts mehr!

die E-Mailadressen werden nicht mehr angezeigt!

Kann mir jemand erklären woran das liegt? Bzw. das Script abändern so das es wieder funktioniert?
Bzw. mir die Änderung mitteilen? Habe keine Ahnung von PHP

Vielen Dank für Eure Hilfe

Code: Alles auswählen

<?php 
  include_once($_SERVER['DOCUMENT_ROOT']. "/admidio/adm_program/system/common.php"); 
?> 

<?php 

// Hier Rollenname angeben 
$rolle = "Mitglieder-Kolpingsfamilie"; 

$datum = date("Y-m-d",time()); 

$sql = "SELECT rol_id 
      FROM ". TBL_ROLES. " 
      WHERE rol_name = '". $rolle. "' "; 

$result = $g_db->query($sql); 
while($row = $g_db->fetch_array($result)) 
{ 
   $rolle_nr = $row['rol_id']; 
} 

$sql = "SELECT usr_id, row1id12.usd_value 
      FROM ". TBL_ROLES. ", ". TBL_CATEGORIES. ", ". TBL_MEMBERS. ", ". TBL_USERS. " 
      LEFT JOIN adm_user_data row1id12 ON row1id12.usd_usr_id = usr_id AND row1id12.usd_usf_id = 12 
      WHERE rol_id = ". $rolle_nr. " AND rol_cat_id = cat_id AND cat_org_id = 1 AND mem_rol_id = rol_id AND mem_end > '". $datum. "' AND mem_usr_id = usr_id AND usr_valid = 1 AND row1id12.usd_value != ''"; 
        
$result = $g_db->query($sql); 

while($row = $g_db->fetch_array($result)) 
{ 
   $benutzer = new User($g_db, $row['usr_id']); 
   echo $benutzer->getValue("EMAIL"); 
   echo ", "; 
} 

?>
Gruß Manu
Benutzeravatar
Thomas-RCV
Former team member
Beiträge: 786
Registriert: 1. Aug 2011, 15:06

Re: Vorschlag Neues PlugIn Abfrage der E-Mailadresse / Rolle

Beitrag von Thomas-RCV »

Hallo Manu,

ab der Version 2.3 haben sich teilweise Varaiblenbezeichnungen geändert, dashalb geht es nicht mehr.

Du musst jetzt in deinem Script $g_db (alt) auf $gDb (neu) ändern.
Im Wiki gibt es eine Übersicht, welche Variablen sich geändert haben.

VG Thomas
muellermanu
Beiträge: 112
Registriert: 27. Feb 2009, 00:02
Wohnort: Schönau a.d. Brend
Kontaktdaten:

Re: Vorschlag Neues PlugIn Abfrage der E-Mailadresse / Rolle

Beitrag von muellermanu »

Hallo Thomas,

vielen Dank für die schnelle Antwort!

Leider funktioniert es nicht! Habe die Variable ausgetauscht siehe Code

Wo im Wiki finde ich den diese Liste?

Code: Alles auswählen

<?php
  include_once($_SERVER['DOCUMENT_ROOT']. "/admidio/adm_program/system/common.php");
?>

<?php

// Hier Rollenname angeben
$rolle = "Mitglieder";

$datum = date("Y-m-d",time());

$sql = "SELECT rol_id
      FROM ". TBL_ROLES. "
      WHERE rol_name = '". $rolle. "' ";

$result = $gDb->query($sql);
while($row = $gDb->fetch_array($result))
{
   $rolle_nr = $row['rol_id'];
}

$sql = "SELECT usr_id, row1id12.usd_value
      FROM ". TBL_ROLES. ", ". TBL_CATEGORIES. ", ". TBL_MEMBERS. ", ". TBL_USERS. "
      LEFT JOIN adm_user_data row1id12 ON row1id12.usd_usr_id = usr_id AND row1id12.usd_usf_id = 12
      WHERE rol_id = ". $rolle_nr. " AND rol_cat_id = cat_id AND cat_org_id = 1 AND mem_rol_id = rol_id AND mem_end > '". $datum. "' AND mem_usr_id = usr_id AND usr_valid = 1 AND row1id12.usd_value != ''";

$result = $gDb->query($sql);

while($row = $gDb->fetch_array($result))
{
   $benutzer = new User($gDb, $row['usr_id']);
   echo $benutzer->getValue("EMAIL");
   echo ", ";
}

?>
Vielen Dank für Eure/Deine Hilfe!

VG Manu
Gruß Manu
matzman2000
Former team member
Beiträge: 1087
Registriert: 2. Sep 2007, 17:12
Wohnort: Itzstedt
Kontaktdaten:

Re: Vorschlag Neues PlugIn Abfrage der E-Mailadresse / Rolle

Beitrag von matzman2000 »

Hallo Manu,

das Auslesen der Userdaten hat sich noch ein bisschen mehr verändert. Ändere am Ende Deines Scripts die Abfrage bitte so ab:

Code: Alles auswählen

$benutzer = new User($gDb, $gProfileFields, $row['usr_id']);
Damit funktioniert es wieder.

Bitte denke daran, dass Du auf jeden Fall den Rollennamen richtig schreibst. Du fängst ein leeres Ergebnis nirgendwo ab und erhälst ansonsten einen Datenbank-Error... :wink:
Benutzeravatar
Thomas-RCV
Former team member
Beiträge: 786
Registriert: 1. Aug 2011, 15:06

Re: Vorschlag Neues PlugIn Abfrage der E-Mailadresse / Rolle

Beitrag von Thomas-RCV »

Hallo Manu,

die Änderungshistorie findest du hier:

http://www.admidio.org/dokuwiki/doku.ph ... _themes_23

@Matze: Das hatte ich leider beim Lesen übersehen :)

VG Thomas
muellermanu
Beiträge: 112
Registriert: 27. Feb 2009, 00:02
Wohnort: Schönau a.d. Brend
Kontaktdaten:

Re: Vorschlag Neues PlugIn Abfrage der E-Mailadresse / Rolle

Beitrag von muellermanu »

Hallo Ihr beiden,

vielen Dank für Eure Hilfe!

Es funktioniert wieder! :)

Für alle die es auch verwenden möchten hier das funktionsfähige Script für die Admidio Version 2.3.5

Code: Alles auswählen

<?php
  include_once($_SERVER['DOCUMENT_ROOT']. "/admidio/adm_program/system/common.php");
?>

<?php

// Hier Rollenname angeben
$rolle = "Mitglieder";

$datum = date("Y-m-d",time());

$sql = "SELECT rol_id
      FROM ". TBL_ROLES. "
      WHERE rol_name = '". $rolle. "' ";

$result = $gDb->query($sql);
while($row = $gDb->fetch_array($result))
{
   $rolle_nr = $row['rol_id'];
}

$sql = "SELECT usr_id, row1id12.usd_value
      FROM ". TBL_ROLES. ", ". TBL_CATEGORIES. ", ". TBL_MEMBERS. ", ". TBL_USERS. "
      LEFT JOIN adm_user_data row1id12 ON row1id12.usd_usr_id = usr_id AND row1id12.usd_usf_id = 12
      WHERE rol_id = ". $rolle_nr. " AND rol_cat_id = cat_id AND cat_org_id = 1 AND mem_rol_id = rol_id AND mem_end > '". $datum. "' AND mem_usr_id = usr_id AND usr_valid = 1 AND row1id12.usd_value != ''";

$result = $gDb->query($sql);

while($row = $gDb->fetch_array($result))
{
   $benutzer = new User($gDb, $gProfileFields, $row['usr_id']);
   echo $benutzer->getValue("EMAIL");
   echo ", ";
}

?>
VG Manu
Gruß Manu
muellermanu
Beiträge: 112
Registriert: 27. Feb 2009, 00:02
Wohnort: Schönau a.d. Brend
Kontaktdaten:

Re: Vorschlag Neues PlugIn Abfrage der E-Mailadresse / Rolle

Beitrag von muellermanu »

Hallo Leute,

ich muß mal wieder nerven! :D

Ich möchte das Script nun auch auf unserer neuen website welche mit Joomla 3.3 betrieben werden soll einsetzen, aber wenn ich die entsprechende Seite aufrufe bleibt die Seite einfach weiß!

Ich habe schon folgendes probiert:
1. Plugin Sourcer installiert! Das folgende Script dann in einen Beitrag eingefügt

Code: Alles auswählen

{source}
[[?php
include_once($_SERVER['DOCUMENT_ROOT']. "/admidio/adm_program/system/common.php");
?]]

[[?php

// Hier Rollenname angeben
$rolle = "Mitglieder";

$datum = date("Y-m-d",time());

$sql = "SELECT rol_id
FROM ". TBL_ROLES. "
WHERE rol_name = '". $rolle. "' ";

$result = $gDb->query($sql);
while($row = $gDb->fetch_array($result))
{
$rolle_nr = $row['rol_id'];
}

$sql = "SELECT usr_id, row1id12.usd_value
FROM ". TBL_ROLES. ", ". TBL_CATEGORIES. ", ". TBL_MEMBERS. ", ". TBL_USERS. "
LEFT JOIN adm_user_data row1id12 ON row1id12.usd_usr_id = usr_id AND row1id12.usd_usf_id = 12
WHERE rol_id = ". $rolle_nr. " AND rol_cat_id = cat_id AND cat_org_id = 1 AND mem_rol_id = rol_id AND mem_end > '". $datum. "' AND mem_usr_id = usr_id AND usr_valid = 1 AND row1id12.usd_value != ''";

$result = $gDb->query($sql);

while($row = $gDb->fetch_array($result))
{
$benutzer = new User($gDb, $gProfileFields, $row['usr_id']);
echo $benutzer->getValue("EMAIL");
echo ", ";
}

?]]
{/source}
Die aufgerufene Seite welche nur für registrierte Benutzer zugänglich ist bleibt aber leider Leer (Weiß)

2. Test mit den Komponente Jumi! Neue Komponente angelegt mit Originalscript

Code: Alles auswählen

<?php
  include_once($_SERVER['DOCUMENT_ROOT']. "/admidio/adm_program/system/common.php");
?>

<?php

// Hier Rollenname angeben
$rolle = "Mitglieder";

$datum = date("Y-m-d",time());

$sql = "SELECT rol_id
      FROM ". TBL_ROLES. "
      WHERE rol_name = '". $rolle. "' ";

$result = $gDb->query($sql);
while($row = $gDb->fetch_array($result))
{
   $rolle_nr = $row['rol_id'];
}

$sql = "SELECT usr_id, row1id12.usd_value
      FROM ". TBL_ROLES. ", ". TBL_CATEGORIES. ", ". TBL_MEMBERS. ", ". TBL_USERS. "
      LEFT JOIN adm_user_data row1id12 ON row1id12.usd_usr_id = usr_id AND row1id12.usd_usf_id = 12
      WHERE rol_id = ". $rolle_nr. " AND rol_cat_id = cat_id AND cat_org_id = 1 AND mem_rol_id = rol_id AND mem_end > '". $datum. "' AND mem_usr_id = usr_id AND usr_valid = 1 AND row1id12.usd_value != ''";

$result = $gDb->query($sql);

while($row = $gDb->fetch_array($result))
{
   $benutzer = new User($gDb, $gProfileFields, $row['usr_id']);
   echo $benutzer->getValue("EMAIL");
   echo ", ";
}

?>
Ebenfalls bleibt der Bildschirm weiß!

3. Habe dann ein einfaches script probiert

Code: Alles auswählen

<?php setlocale (LC_TIME, "de_DE"); echo strftime("%c"); ?>
das hat funktioniert!

Kann mir bitte jemand helfen wie ich das in Joomla 3.3 hin bekomme :!: :?:

Vielen Dank
Gruß Manuel
Gruß Manu
muellermanu
Beiträge: 112
Registriert: 27. Feb 2009, 00:02
Wohnort: Schönau a.d. Brend
Kontaktdaten:

Re: Vorschlag Neues PlugIn Abfrage der E-Mailadresse / Rolle

Beitrag von muellermanu »

Hallo,

in Anknüpfung der letzten Fage bin ich immer noch nicht weitergekommen, da wir nun entgültig auf Joomla umsteigen möchten bitte ich um Eure Hilfe!

Wenn ich den nachfolgenden Code in Joomla 3.7.1 eingebe mit Hilfe des Editors-Kein (TinyMCE löschte den Code immer wieder raus trotz Einstellung also Zulassung von Scripet und iframe etc. und Konfiguration Textfilter-Keine Filterung)

Code: Alles auswählen

<?php
  include_once($_SERVER['DOCUMENT_ROOT']. "/admidio/adm_program/system/common.php");
?>

<?php

// Hier Rollenname angeben
$rolle = "Mitglieder";

$datum = date("Y-m-d",time());

$sql = "SELECT rol_id
      FROM ". TBL_ROLES. "
      WHERE rol_name = '". $rolle. "' ";

$result = $gDb->query($sql);
while($row = $gDb->fetch_array($result))
{
   $rolle_nr = $row['rol_id'];
}

$sql = "SELECT usr_id, row1id12.usd_value
      FROM ". TBL_ROLES. ", ". TBL_CATEGORIES. ", ". TBL_MEMBERS. ", ". TBL_USERS. "
      LEFT JOIN adm_user_data row1id12 ON row1id12.usd_usr_id = usr_id AND row1id12.usd_usf_id = 12
      WHERE rol_id = ". $rolle_nr. " AND rol_cat_id = cat_id AND cat_org_id = 1 AND mem_rol_id = rol_id AND mem_end > '". $datum. "' AND mem_usr_id = usr_id AND usr_valid = 1 AND row1id12.usd_value != ''";

$result = $gDb->query($sql);

while($row = $gDb->fetch_array($result))
{
   $benutzer = new User($gDb, $gProfileFields, $row['usr_id']);
   echo $benutzer->getValue("EMAIL");
   echo ", ";
}

?>
Es wird dann folgendes ausgegeben:

Code: Alles auswählen

query($sql); while($row = $gDb->fetch_array($result)) { $rolle_nr = $row['rol_id']; } $sql = "SELECT usr_id, row1id12.usd_value FROM ". TBL_ROLES. ", ". TBL_CATEGORIES. ", ". TBL_MEMBERS. ", ". TBL_USERS. " LEFT JOIN adm_user_data row1id12 ON row1id12.usd_usr_id = usr_id AND row1id12.usd_usf_id = 12 WHERE rol_id = ". $rolle_nr. " AND rol_cat_id = cat_id AND cat_org_id = 1 AND mem_rol_id = rol_id AND mem_end > '". $datum. "' AND mem_usr_id = usr_id AND usr_valid = 1 AND row1id12.usd_value != ''"; $result = $gDb->query($sql); while($row = $gDb->fetch_array($result)) { $benutzer = new User($gDb, $gProfileFields, $row['usr_id']); echo $benutzer->getValue("EMAIL"); echo ", "; } ?>
Über eine Ausgelagerte Datei und aufruf über ein Wraper-Modul funktioniert die Ausgabe aber da der zugriff nur für bestimmte Benutzergruppen erfolgen darf ist mir der Zugriff zu unsicher, da die Datei auf dem Server direkt über die URL dann aufgerufen werden kann!

Hoffe ich konnte das Problem einigermaßen beschreiben und es gibt diesmal eine Antwort!

Vielen Dank
Gruß Manu
muellermanu
Beiträge: 112
Registriert: 27. Feb 2009, 00:02
Wohnort: Schönau a.d. Brend
Kontaktdaten:

Re: Vorschlag Neues PlugIn Abfrage der E-Mailadresse / Rolle

Beitrag von muellermanu »

Habe jetzt das Plugin DirectPHP installiert!

Wenn ich jetzt das Script einfüge wird dieser nicht entfernt beim speichern kommt aber folgende Fehlermeldung
Call to a member function info() on null

Kann dann nur zum Kontrollzentrum zurück das Script wird aber abgespeichert!

Wenn die Seite im Frontend aufgerufen wird erscheint ebenfalls der Fehler
Call to a member function info() on null

Kann mir jemand bitte helfen?

Vielen Dank
Gruß Manu
muellermanu
Beiträge: 112
Registriert: 27. Feb 2009, 00:02
Wohnort: Schönau a.d. Brend
Kontaktdaten:

Re: Vorschlag Neues PlugIn Abfrage der E-Mailadresse / Rolle

Beitrag von muellermanu »

Schade das hier keiner eine Idee hat! :roll:
Gruß Manu
Antworten