MyBB.de Forum

Normale Version: [Gelöst]Benutzergruppen automatisch verteilen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
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.
Eine ganz einfache If-Abfrage sollte reichen. Ohne PHP würde das aber sehr umständlich werden.
Okay, ich hab jetzt mal nen Skript gemacht.
PHP-Code:
<?php
/**
Bringt alle aus den Klassenstufen 11,12 und 13 in die Gruppe 'Oberstufe' (15)
 */

define("IN_MYBB"1);
require_once 
"./global.php";

/**    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.'&amp;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.
Eine Frage zum ersten Query:
PHP-Code:
$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?
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.

Letzten endes, werden alle User durchgearbeitet.