28.03.2007, 15:58 (Dieser Beitrag wurde zuletzt bearbeitet: 11.09.2007, 11:04 von Jan.)
Hallo,
ich habe in meinem Forum das Profilfeld "Klasse". Jetzt möchte ich alle die dort entweder 11,12 oder 13 angegeben haben, in die Benutzergruppe "Oberstufe" stellen. Wie kann ich das hinbekommen, ohne das ihre bisherigen Gruppen verloren gehen?
Geht das nur mit SQL, oder muss ich auch PHP verwenden?
Es soll nur eine einmalige Sache sein.
/** Letzten User auswählen */ if($_GET == '') { $lastid = 0; } else { $lastid = $_GET['lastid']; }
/** Die Userfields auslesen */ $query = $db->query("SELECT * FROM ".TABLE_PREFIX."userfields WHERE ufid > '".$lastid."' ORDER BY ufid LIMIT 0,5"); while($userfields = $db->fetch_array($query)) /** Für jeden User ausführen */ {
$lastid = $userfields['ufid'];
/** Abfrage der User Infos */ $query = $db->query("SELECT * FROM ".TABLE_PREFIX."users WHERE uid = '".$userfields['ufid']."'LIMIT 0,1"); while($users = $db->fetch_array($query)) /** Für jeden User ausführen */ {
$name = $users['username'];
/** Prüfen ob der User in der Klassenstufe 11,12 oder 13 ist */ if(($userfields['fid5'] == '11') || ($userfields['fid5'] == '12') || ($userfields['fid5'] == '13')) { /** Prüfen ob der User alle Angaben gemacht hat */ if(($userfields['fid7'] == '') || ($userfields['fid8'] == '')) { $adresse = 'no'; } if(($userfields['fid7'] == "UNBEKANNT") || ($userfields['fid8'] == "LEER")) { $adresse = 'no'; } if(($userfields['fid7'] == "BITTE EINGEBEN") || ($userfields['fid8'] == "BITTE EINGEBEN")) { $adresse = 'no'; } if($userfields['ufid'] == "15") { $adresse = 'no'; }
/** Der User hat alle Angaben gemacht, bringen wir ihn nun in die Gruppe */ if($adresse != 'no') { $gruppe = $users['additionalgroups']; /** Seine alten Gruppen speichern */ $test = preg_split("/,/",$gruppe); /** Seine Gruppen trennen */ foreach($test as $i) /** Für jeden Gruppe prüfen */ { if ($i == '15') /** Ist der User schon in der Gruppe? */ { $stop = 'stop'; } } /** der User ist nicht in der Gruppe, geben wir im die neue Gruppe dazu */ if ($stop != 'stop') { $gruppe .= ',15'; $otto = array('additionalgroups' => $gruppe); /** Daten wieder in die Datenbank schreiben */ $db->update_query(TABLE_PREFIX."users", $otto, 'uid = '.$userfields['ufid']); echo 'Der User '.$users['username'].' wurde der Gruppe \'Oberstufe\' hinzugefügt'; } } } } print 'Wir sind jetzt bei User '.$userfields['ufid'].' - '.$name; } print('<hr /><br /><a href="gruppe.php?'.SID.'&lastid='.$lastid.'">Weiter</a>'); ?>
Leider wird die erste Schleife nicht 5 mal durchlaufen. Warum?
Sonst funktioniert ja alles. Aber es wird immer nur ein User bearbeitet, statt 5.
$query = $db->query("SELECT * FROM ".TABLE_PREFIX."userfields WHERE ufid > '".$lastid."' ORDER BY ufid LIMIT 0,5");
Was soll das WHERE ufid > '".$lastid."'? Warum liest du nicht einfach alle Felder mit der ID der Klasse auf einmal aus?
Gruß,
Michael Support erfolgt NUR im Forum!
Bitte gelöste Themen als "erledigt" markieren.
Beiträge mit mangelhafter Rechtschreibung/Grammatik werden kommentarlos gelöscht.
Okay, hab es fertig.
Stelle es jetzt einfach mal hier rein.
Werde es eventuell noch anpassen, und dann in ein Plug-In verpacken.
@Michael, weil ich immer 15 bearbeiten will, da ich das ganze noch etwas überprüfen möchte.
Und so kann ich das Script leicht auf andere Gruppen erweitern.