Hallo, Gast! (Registrieren)

Letzte Ankündigung: MyBB 1.8.38 veröffentlicht (30.04.24)


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste
Variable mit Funktion verändern??
#1
Hallo,
ich glaube, ich habe ein Problem:
Ich möchte eine Variable via Funktion verändern.
Die Funktion berichtigt u.a. Fehler in den additionalgroups. Der Datenbank-Update funktioniert inzwischen wunderbar.
...Wenn ich die Standartsprache des Forums verändere und ein Mitglied "Standarteinstellung", soll er in eine entsprechende Secondary Group einsortiert werden (Für jede Sprache gibt es eine Secondary Group).
Es gibt nur eine klitze kleine Sicherheitsverletzung:
Wenn das geändert wird, ist das Mitglied beim ersten Seitenaufruf noch in der vorherigen Sec. Group, da die Variable / Array / Object oder wie auch immer ja vor dem hook global_start definiert wird (!?). Entsprechend nützt eine Datenbankänderung für diesen Aufruf noch nichts.

Inzwischen habe ich es soweit, dass ich an die Variable $mybb->user['additionalgroups'] die neue Benutzergruppe anhängen kann. Löschen geht aber irgendwie nicht.


Um folgenden Code geht es:
PHP-Code:
$languages $lang->get_languages();
$listadd = array();
foreach(
$languages as $language)
{
$query $db->query("SELECT gid FROM ".TABLE_PREFIX."usergroups WHERE title = '$language' LIMIT 1");
$row $db->fetch_array($query);
$addug explode(",",$mybb->user['additionalgroups']);
$listadd[] .= array_keys($addug$row['gid']);
}
foreach(
$listadd as $listaddg)
{
unset(
$addug[$listaddg]);
}
$mybb->user['additionalgroups'] = implode(","$addug).",".$rowgid
[Bild: Nirgendssicher.jpg]
Zitieren
#2
...Die Variable zu verändern geht anscheinend doch Big Grin Habs jetzt hin bekommen, mit einem Scriptteil, der schon funktionierte...


//EDIT:
Schade eigentlich, es funktioniert doch nicht so wie es soll

PHP-Code:
$additionalgroups $mybb->user['additionalgroups'];
        
$teile explode(","$additionalgroups);
        foreach(
$teile as $key => $value)
        {
            
$query $db->query("SELECT title FROM ".TABLE_PREFIX."usergroups WHERE gid = '$value' LIMIT 1");
            
$row $db->fetch_array($query);
            
$title $row['title'];
            
$languages $lang->get_languages();
            foreach(
$languages as $langs)
            {
                if(
$langs $title)
                   {
                    unset(
$teile[$key]);
                } else {}
            }
        }
        
$newaddgroup implode(","$teile);
        if(
$newaddgroup == "")
        {
            
$mybb->user['additionalgroups'] = $rowgid;
        }
        else
        {
            
$mybb->user['additionalgroups'] = $newaddgroup.",".$rowgid;
        } 

Damit sollen die Sec. Groups, die nicht zu den Sprachen zählen "herausgefiltert" werden, sodass die nicht gelöscht werden, sondern nur die Sprachgruppen. Leider löscht er hiermit alle Benutzergruppen.

Bitte helft mir....Confused
[Bild: Nirgendssicher.jpg]
Zitieren
#3
Leider sehe ich auch keinen Fehler wenn ich mir den Code ansehe. Versuche mal Zeile für Zeile zu debuggen, d.h. zu gucken ob der Inhalt der Variablen stimmt, etc.

Gruß,
Michael
[Bild: banner.png]
Support erfolgt NUR im Forum!
Bitte gelöste Themen als "erledigt" markieren.
Beiträge mit mangelhafter Rechtschreibung/Grammatik werden kommentarlos gelöscht.
Zitieren
#4
Scheint schonmal eine gute Analyse zu sein Smile

PHP-Code:
<?php
define
("IN_MYBB"1);
chdir($_SERVER['DOCUMENT_ROOT']."/forum/");
require_once 
"global.php";

if(!isset(
$mybb->user['language']) OR $mybb->user['language'] == "")
{
    
$userlanguage $mybb->settings['bblanguage'];
}
else
{
    
$userlanguage $mybb->user['language'];
}
$query $db->query("SELECT gid FROM ".TABLE_PREFIX."usergroups WHERE title = '".$userlanguage."' LIMIT 1");
$row $db->fetch_array($query);
$rowgid $row['gid'];

$additionalgroups $mybb->user['additionalgroups'];
echo(
"\$additionalgroups = \$mybb->user['additionalgroups']; --> ".$additionalgroups." = ".$mybb->user['additionalgroups']."<br />");

$teile explode(","$additionalgroups);
foreach(
$teile as $key => $value)
{
     echo(
"\$value = ".$value."<br />");
     
       
$query $db->query("SELECT title FROM ".TABLE_PREFIX."usergroups WHERE gid = '$value' LIMIT 1");
       
$row $db->fetch_array($query);
       
$title $row['title'];
       echo(
"\$title = ".$title."<br />");
       
       
$languages $lang->get_languages();
       foreach(
$languages as $langs)
       {
            echo(
"\$langs = ".$langs."<br />");
           if(
$langs $title)
           {
                echo(
"\$teile1 = ".implode(","$teile)."<br />");
               unset(
$teile[$key]);
               echo(
"\$teile2 = ".implode(","$teile)."<br />");
           } else {}
    }
}
$newaddgroup implode(","$teile);
echo(
"\$newaddgroup = ".$newaddgroup."<br />");

if(
$newaddgroup == "")
{
    
$mybb->user['additionalgroups'] = $rowgid;
    echo(
"\$mybb->user['additionalgroups'] = ".$mybb->user['additionalgroups']."<br />");
}
else
{
    
$mybb->user['additionalgroups'] = $newaddgroup.",".$rowgid;
    echo(
"\$mybb->user['additionalgroups']".$mybb->user['additionalgroups']."<br />");
}


/*Ausgabe*/

$additionalgroups $mybb->user['additionalgroups']; --> 2,2,8
$value 
2
$title 
Registered
$langs 
Deutsch "Du"
$teile1 2,8
$teile2 
8
$langs 
Deutsch "Sie"
$teile1 8
$teile2 
8
$langs 
English (American)
$teile1 8
$teile2 
8
$value 
8
$title 
english
$langs 
Deutsch "Du"
$teile1 8
$teile2 
=
$langs Deutsch "Sie"
$teile1 =
$teile2 =
$langs English (American)
$teile1 =
$teile2 =
$newaddgroup =
$mybb->user['additionalgroups'] = 9
?>


Das heißt, der Fehler geschieht beim ersten Mal unset(), aber warum??? Was der löschen soll ist doch mit $key eindeutig definiert!?


/EDIT:
Den ersten Fehler habe ich entdeckt:
PHP-Code:
if($langs $title
muss natürlich heißen:
PHP-Code:
if($langs == $title

Sieht schonmal denke ich besser aus als vorher, allerdings wird nun nichts mehr gelöscht Confused

^^Das auch, siehe:
PHP-Code:
$langs Deutsch "Du" 

Dann vermute ich jetzt mal ganz stumpf, dass der key davon dann deutsch_du ist, das was ich haben will...

Sorry konntet ihr nicht wissen wie ich meine Usergroups genannt habe...
[Bild: Nirgendssicher.jpg]
Zitieren
#5
Ok, dank dir für diesen wunderbaren Analyse Tipp Big Grin Nun funktioniert soweit alles, jetzt kommt komfort...
[Bild: Nirgendssicher.jpg]
Zitieren