Eigene Liste erstellen aus kompletter Rolle

Hast du Probleme Admidio einzurichten? Hier kannst du Fragen rund um die Einrichtung stellen.
Antworten
Tobsen086
Beiträge: 56
Registriert: 4. Jan 2007, 20:37

Eigene Liste erstellen aus kompletter Rolle

Beitrag von Tobsen086 »

Hallo!

Ich scheiter an dieser Aufgabe, auch wenn ich vermute, dass sie wohl nicht sooo schwer sein dürfte. Leider bin ich in PHP ne ziemliche Niete und verstehe nur das nötigste Basiswissen. Erstmal nen Link, wo man sehen kann, was ich erreichen will:
http://www.victoria-seelow.de/frauensp/kader.php

Dort ist eine Liste mit Namen. Bei Admidio habe ich dafür auch eine eigene Rolle und auch eine eigene Kategorie. Ist es möglich, die Daten aus Admidio auszulesen und danach eine Seite aufzubauen, dass sie so aussieht?!? Am Ende soll jeder Name ein eigener DIV-Container sein.

Hier habe ich das ganze schon etwas anders gelöst:
http://www.victoria-seelow.de/verein/vo ... rstand.php
Dort habe ich immer die bestimmte ID von der Person ausgelesen und dann die Daten "aufgeschrieben".

Nun ist aber das schwierige, dass er die ganze Rolle automatisch auflisten soll. Wie funktioniert sowas? Besten Dank schonmal,

Tobi!
Benutzeravatar
fasse
Administrator
Beiträge: 6182
Registriert: 12. Nov 2005, 16:06

Beitrag von fasse »

Hallo Tobi,

du brauchst dazu erst einmal ein SQL-Statement, welches dir die Daten ausliest:

Code: Alles auswählen

$sql = "SELECT usr_id, usr_last_name, usr_first_name, usr_phone, usr_mobile, usr_email, usr_fax
                     FROM ". TBL_ROLES. ", ". TBL_MEMBERS. ", ". TBL_USERS. "
                    WHERE rol_org_shortname = '$g_organization'
                      AND rol_id     = {0}
                      AND rol_id     = mem_rol_id
                      AND mem_valid  = 1
                      AND mem_leader = 0
                      AND mem_usr_id = usr_id
                      AND usr_valid  = 1
                    ORDER BY usr_last_name, usr_first_name ";
{0} musst du durch die ID deiner gewünschten Rolle ersetzen.

Dann musst du die Datensätze in einer Schleife durchgehen:

Code: Alles auswählen

$result = mysql_query($sql, $g_adm_con);
db_error($result);
            
while($row = mysql_fetch_array($result))
{
   ... hier kommt nun die Ausgabe für einen Datensatz rein ...
   z.B.:
   echo "<td>". $row['usr_nachname']. "</td>";
}
Ich hoffe das hilft dir schon mal weiter.

Gruß
Markus
Tobsen086
Beiträge: 56
Registriert: 4. Jan 2007, 20:37

Beitrag von Tobsen086 »

Schlichtweg: DER HAMMER! :D

Genau so hatte ich mir das gedacht.
Nun habe ich nur noch ein winziges Problem. Wie schaffe ich, dass auch die Leiterin mit in der Liste ganz normal angezeigt wird? Schaffe es grad nur, dass entweder alle Leute ohne Leiter oder eben nur der Leiter angezeigt wird. Gut,... das ist nicht sooo wichtig, da ich da ja nur das gleiche mit eben der anderen Einstellung einbauen müsste. Aber vielleicht gibt es da ja noch eine elegantere Lösung. *g*

So sieht es gerade aus:

Code: Alles auswählen

	<div class="container1">
	  <div class="texttop1">Mitglieder</div>
	  <div class="kader2 fett">Name, Vorname</div>
	  <div class="kader3 fett">Geburtstag</div>
<?php
$sql = "SELECT usr_id, usr_last_name, usr_first_name, usr_phone, usr_mobile, usr_email, usr_fax 
                     FROM ". TBL_ROLES. ", ". TBL_MEMBERS. ", ". TBL_USERS. " 
                    WHERE rol_org_shortname = '$g_organization' 
                      AND rol_id     = 4
                      AND rol_id     = mem_rol_id 
                      AND mem_valid  = 1 
                      AND mem_leader = 0
                      AND mem_usr_id = usr_id 
                      AND usr_valid  = 1 
                    ORDER BY usr_last_name, usr_first_name ";

$result = mysql_query($sql, $g_adm_con); 
db_error($result); 
            
while($row = mysql_fetch_array($result)) 
{

	  echo "<div class=\"kader2\">". $row['usr_last_name']. ", ". $row['usr_first_name']. "</div>
	  <div class=\"kader3\">--.--.----</div>";
}
?>
	  <div style="clear:both"></div>
	</div>
P.S.: Geburtstage sollen nicht angezeigt werden.

Wenn wir schon dabei sind: ist es auch möglich, nur Leute anzuzeigen, die etwas bestimmtes bei einem benutzerdefinierten Feld zu stehen haben? Meinetwegen habe ich in einem "Benutzerdefiniertem Feld" nur jung oder alt zu stehen. Und nun sollen genau wie oben die Leute ausgegeben werden, aber nur da, wo jung steht. Hoffe ich konnte ungefähr erklären, was ich meinte. Falls das heut noch jemand liest: einen schönen Abend (trotzdem sich Bremen grad beim Fußball so doof anstellt :? ).

Nachtrag:
folgendes bekomme ich, wenn ich das von mylist_prepare ausgeben lasse:

Code: Alles auswählen

SELECT usr_id, usr_last_name, usr_first_name, usr_birthday, f10.usd_value FROM adm_roles, adm_members, adm_users LEFT JOIN adm_user_data f10 ON f10.usd_usr_id = usr_id AND f10.usd_usf_id = 10 WHERE rol_org_shortname = 'Seelow' AND rol_id = 16 AND rol_valid = 1 AND mem_rol_id = rol_id AND mem_valid = 1 AND mem_leader = 0 AND mem_usr_id = usr_id AND usr_valid = 1 AND ( UPPER(f10.usd_value) LIKE ' <> ANGRIFF' ) ORDER BY usr_last_name ASC
Benutzeravatar
fasse
Administrator
Beiträge: 6182
Registriert: 12. Nov 2005, 16:06

Beitrag von fasse »

Tobsen086 hat geschrieben:Wie schaffe ich, dass auch die Leiterin mit in der Liste ganz normal angezeigt wird?
Lass einfach folgende Zeile in dem SQL-Statement weg:

Code: Alles auswählen

AND mem_leader = 0 
Tobsen086
Beiträge: 56
Registriert: 4. Jan 2007, 20:37

Beitrag von Tobsen086 »

Na wunderbar! Und meine andere Anfrage habe ich nun selbst lösen können.

VIELEN DANK!
Tobsen086
Beiträge: 56
Registriert: 4. Jan 2007, 20:37

Beitrag von Tobsen086 »

Mist! Hab doch noch ne Frage. Und zwar will ich woanders den Geburtstag auch ausgeben. Doch leider bekomme ich es nur hin, dass es YYYY-MM-TT ausgegeben wird. Es soll aber TT.MM.YYYY sein. Wir formatiere ich das um?

So sieht das jetzt aus:

Code: Alles auswählen

	  echo "<div class=\"kader2\">". $row['usr_last_name']. ", ". $row['usr_first_name']. "</div>
	  <div class=\"kader3\">". $row['usr_birthday']. "</div>";
Benutzeravatar
fasse
Administrator
Beiträge: 6182
Registriert: 12. Nov 2005, 16:06

Beitrag von fasse »

Du könntest dafür eine unserer Funktionen nehmen, falls du die common.php eingebunden hast:

Code: Alles auswählen

mysqldatetime('d.m.y', $row['usr_birthday'])
Tobsen086
Beiträge: 56
Registriert: 4. Jan 2007, 20:37

Beitrag von Tobsen086 »

Das klappt hier bisher alles wie am Schnürchen. Aber nun bin ich wieder auf ne Hürde gestoßen. Ich will ein benutzerdefiniertes Feld mit auslesen und es auch in die Tabelle mit eintragen.
Denke mir eigentlich mit $row['f10.usd_usf_id'] oder irgendeine andere Kombination in den Spitzklammern sollte es machen, aber ich hab da schon allesmögliche versucht. Es wird mir einfach nichts angezeigt. Das benutzerdefinierte Feld ist eben f10 und wird auch mit ausgelesen.

Geht das irgendwie anders? Oder muss ich was anderes in das Feld eintragen?


Schönen Abend noch,
Tobi!
skorpion
Beiträge: 18
Registriert: 3. Mai 2007, 10:47

Beitrag von skorpion »

ich hatte das selbe problem. googln half nichts, also hab ich es einfach probiert und es geht :D
hier die sql abfrage die ich mir so wie du am schirm ausgeben hab lassen (über die eigenen listen)

Code: Alles auswählen

$abfrage = "SELECT 
usr_id, 
usr_last_name, 
usr_first_name, 
f16.usd_value as funktion, 
f13.usd_value as fr1, 
f14.usd_value as fr2, 
f15.usd_value as fr3, 
f9.usd_value as oefmav, 
f10.usd_value as startnummer, 
f11.usd_value as trp1, 
f12.usd_value as trp2
 FROM adm_roles, adm_members, adm_users 
LEFT JOIN adm_user_data f16 ON f16.usd_usr_id = usr_id AND f16.usd_usf_id = 16 
LEFT JOIN adm_user_data f13 ON f13.usd_usr_id = usr_id AND f13.usd_usf_id = 13 
LEFT JOIN adm_user_data f14 ON f14.usd_usr_id = usr_id AND f14.usd_usf_id = 14 
LEFT JOIN adm_user_data f15 ON f15.usd_usr_id = usr_id AND f15.usd_usf_id = 15 
LEFT JOIN adm_user_data f9 ON f9.usd_usr_id = usr_id AND f9.usd_usf_id = 9 
LEFT JOIN adm_user_data f10 ON f10.usd_usr_id = usr_id AND f10.usd_usf_id = 10 
LEFT JOIN adm_user_data f11 ON f11.usd_usr_id = usr_id AND f11.usd_usf_id = 11 
LEFT JOIN adm_user_data f12 ON f12.usd_usr_id = usr_id AND f12.usd_usf_id = 12 
WHERE rol_org_shortname = 'MSV' AND rol_id = 2 AND rol_valid = 1 AND mem_rol_id = rol_id AND mem_valid = 1 AND mem_leader = 0 AND mem_usr_id = usr_id AND usr_valid = 1 ORDER BY usr_last_name ASC";
wie du siehst hab ich über wo fxx.usd_value steht ein "as yyy" wobei yyy für einen eindeutigen namen steht.
dann noch das statement absetzen

Code: Alles auswählen

$ergebnis = mysql_query($abfrage);
und die while schleife

Code: Alles auswählen

while($row = mysql_fetch_assoc($ergebnis))
in der while-schleife kannst dann über die selbst vergebenen namen, die werte auslesen

Code: Alles auswählen

	print $row[funktion]." ".$row[fr1];
bei mir funktioniert das supigut. hoffentlich bei dir auch
Zuletzt geändert von skorpion am 18. Okt 2007, 13:21, insgesamt 1-mal geändert.
Tobsen086
Beiträge: 56
Registriert: 4. Jan 2007, 20:37

Beitrag von Tobsen086 »

Boah... das hört sich erstmal super an. Jetzt bin ich richtig heiß wieder nach Haus zu kommen, um das ganze zu probieren. Werde, wenn ich heut noch nach Haus komme, heute ne Antwort posten, ansonsten melde ich mich morgen wieder zu Wort.

Besten Dank schonmal, für den neuen Anstoß! :o
skorpion
Beiträge: 18
Registriert: 3. Mai 2007, 10:47

Beitrag von skorpion »

bitte. du kannst dir hier das ergebnis anschauen
alle die, die in der rolle vorstand sind
alle, die in der rolle mitglieder sind
es geht wunderbar.
ein tip an die entwickler.
zum speichern solcher eignen listen, braucht man sich ja im prinzip nur die sql abfrage in einer db abspeichern. dann noch die spaltennamen und ein feld, wo die liste beschrieben ist. fertig sind die abgespeicherten eigenen listen. im prinzip hab ich und tobsen086 auch nichts anderes gemacht.
Benutzeravatar
fasse
Administrator
Beiträge: 6182
Registriert: 12. Nov 2005, 16:06

Beitrag von fasse »

Hi Scorpion,

gespeicherte Listen wird es in einer zukünftigen Version geben. Allerdings würde ich es dann schon etwas komplexer ablegen, da man solche gespeicherten Listen später auch noch bearbeiten bzw. ergänzen will.

Gruß
Fasse
Tobsen086
Beiträge: 56
Registriert: 4. Jan 2007, 20:37

Beitrag von Tobsen086 »

Neues Script, neues Glück...
Sachlage ist die gleiche, wie am Anfang des Threads. Ich würde gern aus der Datenbank Name, Vorname und Geburtstag auslesen und diese Sachen dann wiedergeben. Folgender Code funtioniert dafür nicht:

Code: Alles auswählen

<?php

$sql = "SELECT mem_leader, usr_id, row1id17.usd_value, row4id18.usd_value, row7id26.usd_value 
		FROM ". adm_roles. ", ". adm_categories .", ". adm_members .", ". adm_users ."
		LEFT JOIN adm_user_data row1id17 ON row1id17.usd_usr_id = usr_id AND row1id17.usd_usf_id = 17
		LEFT JOIN adm_user_data row4id18 ON row4id18.usd_usr_id = usr_id AND row4id18.usd_usf_id = 18
		LEFT JOIN adm_user_data row7id26 ON row7id26.usd_usr_id = usr_id AND row7id26.usd_usf_id = 26
		WHERE rol_id = 8
		AND rol_valid = 1
		AND rol_cat_id = cat_id
		AND cat_org_id = 1
		AND mem_rol_id = rol_id
		AND mem_valid = 1
		AND mem_usr_id = usr_id
		AND usr_valid = 1
		ORDER BY mem_leader DESC , row1id17.usd_value ASC";

$result = $g_db->query($sql);
            
while($row = $g_db->fetch_array($result)) 
{
	  echo "	  <div class=\"kader2\">". $row['row1id17']. ", ". $row['row1id18']. "</div>
	  <div class=\"kader3\">". mysqldatetime('d.m.y', $row['row1id26']). "</div>
";
}
?>
Außerdem habe ich am Anfang der Datei die "common.php" eingebunden. Mir scheint es aber so, als wenn gar kein Kontakt mit der Datenbank aufgebaut wird. Muss ich noch woanders etwas verändern?!
Tobsen086
Beiträge: 56
Registriert: 4. Jan 2007, 20:37

Beitrag von Tobsen086 »

Hmm... nun scheint es zu gehen. Hab es sogar hinbekommen noch ein ganz anderes Feld und mit einer Bedingung nur das auszugeben, was ich will. Dafür musste ich aber als erstes die Sachen umbennen. Zum Beispiel:

Code: Alles auswählen

[...]row1id17.usd_value as name, row4id18.usd_value as vname, row7id26.usd_value as gtag,[...]
Ist das so korrekt oder ist das so ein schlechter Weg?!
Antworten