benutzerdefinierbares Menü

oernilein

Mitglied
Hallo, ich habe ein Problem und komme irgendwie nicht weiter.
Ich habe ein Menü mit 5 Standardeinträgen. Weiterhin gibt es eine Datenbank mit 300 anderen Menüauswahlpunkten.

Nun möchte ich, dass sich jeder User sein persönliches Menü zusammenstellen kann und das dieses bei jedem login dann wieder erscheint.

Wie könnt ich das Problem angehen?
Danke für eine Anregung und Eure Hilfe...
 
Hallo,
du könntest einfach eine weitere Tabelle anlegen, in der du die Menüpunkte und die Userid
speicherst, somit weißt du genau, welcher User welche Menüpunkte haben möchte.

mfg
forsterm
 
Du hast in der Datenbank 2 dafür wesentliche Tabellen --> User und Menüs. Nun machst du eine 3. (Zwischentabelle) und nennst user_menues zum Beispiel.

Dort speicherst du dann welche Menüs der Benutzer alle hat. Also ein Datensatz z.B. User 3 hat Menü 6. Natürlich kann so ein User auch mehrere Menüs auswählen.

Zum bearbeiten welche Menüs man selber hat machst du einfach eine Seite und listest alle vorhandenen Menüs auf. Hinten eine Checkbox wo er anklicken will ob er dieses Menü abonieren will oder nicht.

Bei weitere Fragen, einfach fragen. Hoffe ich konnte Dir soweit mal helfen.
 
Hi,

also ich hab ne lösung für mein Login system geschrieben.

ich würd in der Tabelle wo die User drinne sind ne neue Spalte machen,
in dieser Spalte werden dann die anderen Menüpunkte via ID durch , getrennt gespeichert.

Beim Anzeigen des Menüs werden dann die Daten der neuen Spalte ausgelesen,
mittels explode am , getrennt und das daraus entstehende array mit foreach durchlaufen.

Für jede ID in foreach wird der entsprechende Menüpunkt gehohlt und ausgegeben.

Hoffe das hilft dir.

MfG
paddz

[EDIT]
oha hab wohl mal wieder viel zu kompliziert gedacht ^^

naja für meine Rechteverteilung wollt ich nicht noch ne neue Tabelle machen,
doch für deinen Zewck ist die Lösung von aquasonic die beste.
[/EDIT]
 
Zuletzt bearbeitet:
@all

Vielen Dank für die schnelle Hilfe!!

@paddz

Auch wenn es vielleicht komplizierter ist: Das leuchtet mir aber sofort ein:
So kann ich bei der Registrierung gleich die unbedingt benötigten Menüeinträge einbinden und jeder kann sie später sich selber zusammenstellen.

Da ich in PHP nicht so sehr fit bin gäbe es vielleicht die Möglichkeit das mir jemand helfen könnte bei der Seite wo der user das mittels checkbox auswählen kann?

Ich weiß nicht so genau wie man das dann in eine DB einträgt.
 
Hallo,
ok, wenn du den Lösungsvorschlag von paddz verwenden willst, dann sollte das ungefähr so funktionieren:
PHP:
<?php
    require('connect.php');
    if (isset($_POST['menu'])){
        $user_menu = implode('|', $_POST['menu']);
        
        $sql = 'UPDATE user SET menu = "'.$user_menu.'" WHERE userid = "'.intval($userid).'"';
        $query = mysql_query($sql) or die(mysql_error());

        echo 'Dein Menü wurde nun angepasst.';
        exit;
    }
?>
<html>
    <head>
        <title>Menü auswählen</title>
    </head>
    <body>
        <form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>">
            <p><input type="checkbox" name="menu[]" value="1">&nbsp;Menüpunkt1</p>
            <p><input type="checkbox" name="menu[]" value="2">&nbsp;Menüpunkt2</p>
            <p><input type="checkbox" name="menu[]" value="3">&nbsp;Menüpunkt3</p>
            <p><input type="checkbox" name="menu[]" value="4">&nbsp;Menüpunkt4</p>
            <p><input type="submit" value="Menüpunkte hinzufügen" name="addmenu"></p>
        </form>
    </body>
</html>
Das heißt, du benötigst in der Tabelle wo die Informationen zu den einzelnen Usern gespeichert sind eine weitere Spalte - in meinem Beispiel namens menu.
Darin werden die Ids der Menüpunkte durch ein "|" getrennt gespeichert.
In $userid muss natürlich die Id des aktuellen Users stehen, kann z.B. auch eine Sessionvariable sein.
So ich hoffe, das hilft dir ein wenig weiter, wenn nicht, dann frag einfach noch mal.

mfg
forsterm
 
Super, funktioniert einwandfrei. Wenn mir jetzt noch jemand ein klitzekleines Beispiel geben kann wie es per Foreach schleife auslesen kann, dann bin ich super glücklich.

Desweiteren wäre es toll, wenn mir jemand das obige beispiel so drehen kann, das Menüpunkte die schon in der db drin sind ,schon aktiviert dastehen.
 
Zuletzt bearbeitet:
Code:
foreach (array_expression as $value)
    statement
foreach (array_expression as $key => $value)
    statement

Also z.B.

PHP:
<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as $value) {
   $value = $value * 2;
}
// $arr is now array(2, 4, 6, 8)
?>

Ein kurzer Blick auf php.net würde deine und meine Arbeit erleichtern. Dieses Beispiel ist übrigens auch von dort ;)
 
oernilein hat gesagt.:
Desweiteren wäre es toll, wenn mir jemand das obige beispiel so drehen kann, das Menüpunkte die schon in der db drin sind ,schon aktiviert dastehen.
Hallo,
das sollte so funktionieren:
PHP:
<?php
    require('connect.php');
    if (isset($_POST['menu'])){
        $user_menu = implode('|', $_POST['menu']);
        
        $sql = 'UPDATE user SET menu = "'.$user_menu.'" WHERE userid = "'.intval($userid).'"';
        $query = mysql_query($sql) or die(mysql_error());

        echo 'Dein Menü wurde nun angepasst.';
        exit;
    } else {
        $query = mysql_query('SELECT * FROM user WHERE userid = "'.intval($userid).'"') or die(mysql_error());
        $user = mysql_fetch_object($query);
        $user_menu = explode('|', $user->menu);
        
        $sql = 'SELECT * FROM menu';
        $query = mysql_query($sql) or die(mysql_error());
?>
<html>
    <head>
        <title>Menü auswählen</title>
    </head>
    <body>
        <form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>">
            <?php
                while ($ds = mysql_fetch_object($query)){
                    $checked = in_array($ds->id, $user_menu) ? 'checked="checked"' : '';
                    echo '<p><input type="checkbox"'.$checked.' name="menu[]" value="'.$ds->id.'">&nbsp;'.$ds->title.'</p>';
                }
            ?>
            <p><input type="submit" value="Menüpunkte hinzufügen" name="addmenu"></p>
        </form>
    </body>
</html>
<?php } ?>
In der Tabelle menu stehen die ganzen verfügbaren Kategorien.

mfg
forsterm
 
Zurück