Benutzer bearbeiten

tacef

Mitglied
Hallo

Ich hab wieder mal ein kleines Problem und zwar mit meiner Benutzerverwaltung:

Ich kann einen Benutzer erstellen und löschen aber bearbeiten funktioniert nicht.

Ich kann den benutzer auswählen und sobald ich auf den bearbeiten button klicke, komm ich wieder auf die auswähl seite.

PHP:
else {
            echo "<form ".
                 "action=\"index.php?p=admin&amp;site=user&amp;action=edit\" ".
                 "method=\"post\" ".
                 "class=\"formular\">\n";
            echo "    <p>\n";
            echo "        Benutzer bearbeiten\n";
            echo "    </p>\n";
            echo "    <ol>\n";
            echo "        <li>\n";
            echo "            <label for=\"name\">Benutzer</label>\n";
            $sql = "SELECT
                        Name, ID
                    FROM
                        users
                    ORDER BY
                        Name ASC;";
            $result = mysql_query($sql) OR die(mysql_error());
            echo "                <select id=\"name\" name=\"uid\">\n";
            echo "                    <option value=\"0\" selected=\"selected\">Bitte einen User wählen</option>\n";
            while($row = mysql_fetch_assoc($result)) {
                echo "<option value=\"".$row['ID']."\">".$row['Name']."</option>\n";
            }
            echo "                </select>\n";
            echo "        </li>\n";
            echo "        <li>\n";
            echo "            <input type=\"submit\" name=\"submit\" value=\"Benutzer auswählen\" />\n";
            echo "            <input type=\"reset\" name=\"submit\" value=\"Zurücksetzen\" />\n";
            echo "            <input type=\"hidden\" name=\"".session_name()."\" ".
                                                    "value=\"".session_id()."\" />\n";
            echo "        </li>\n";
            echo "    <ol>\n";
            echo "</form>\n";
            echo "<p>\n";
            echo "    <a href=\"index.php?p=admin&amp;".SID."\">\n";
            echo "        Zurück zum Adminbereich\n";
            echo "    </a>\n";
            echo "</p>\n";
        }
Das ist der Teil der funktion der nicht will. Kann aber bei Bedarf den ganzen Code posten.

Ich hab da die ganze Nacht dran gewerkelt und versucht den fehler zu finden, find ihn aber nicht.
 
PHP:
<?php
    $rights = getRights();
    if(!in_array("Admin", $rights)) {
        no_rights();
    } else {
        switch(@$_GET['action']) {
            case "add":
                if(isset($_POST['submit'])) {
                    if(!preg_match('/^\w+$/', trim($_POST['name']))) {
                        echo "<p>\n";
                        echo "    Bitte geben sie einen Name aus alphanumerischen Zeichen ein.\n";
                        echo "</p>\n";
                        echo "<p>\n";
                        echo "    <a href=\"index.php?p=admin&amp;site=user&amp;action=add&amp;".SID."\">\n";
                        echo "        Zurück zum Formular\n";
                        echo "    </a>\n";
                        echo "</p>\n";
                    } elseif(trim($_POST['email']) == "") {
                        echo "<p>\n";
                        echo "    Bitte geben sie eine Emailadresse an.\n";
                        echo "</p>\n";
                        echo "<p>\n";
                        echo "    <a href=\"index.php?p=admin&amp;site=user&amp;action=add&amp;".SID."\">\n";
                        echo "        Zurück zum Formular\n";
                        echo "    </a>\n";
                        echo "</p>\n";
                    } else {
                        $password = substr(md5(microtime()),0,8); // zufallspassword erstellen
                        $sql = "INSERT INTO
                                    users(Name, Email, Password)
                                VALUES
                                    ('".trim($_POST['name'])."',
                                     '".addslashes(trim($_POST['email']))."',
                                     MD5('".$password."'));";
                        $result = mysql_query($sql) OR die(mysql_error());
                        if(isset($_POST['send'])) {// Login-Daten per Email schicken
                            $mailbody  = "Zugangsdaten zur Homepage:\n";
                            $mailbody .= "Name: ".trim($_POST['name'])."\n";
                            $mailbody .= "Password: ".$password."\n";
                            $mailbody .= "Bitte loggen sie sich ein und ändern sie das Password.\n";
                            if(mail(trim($_POST['email']), "Zugangsdaten", $mailbody)) {
                                echo "<p>\n";
                                echo "    Account wurde hinzugefügt und die Zugangsdaten wurden zum\n";
                                echo "    Benutzer geschickt.\n";
                                echo "</p>\n";
                                echo "<p>\n";
                                echo "    <a href=\"index.php?p=admin&amp;".SID."\">\n";
                                echo "        Zurück zum Adminbereich\n";
                                echo "    </a>\n";
                                echo "</p>\n";
                            } else {
                                echo "<p>\n";
                                echo "    Account wurde hinzugefügt, doch es konnte keine Email\n";
                                echo "    verschickt werden.\n";
                                echo "</p>\n";
                                echo "<p>\n";
                                echo "    Logindaten <br />\n";
                                echo "    Name: ".trim($_POST['name'])."<br />\n";
                                echo "    Password: ".$password."<br />\n";
                                echo "</p>\n";
                                echo "<p>\n";
                                echo "    <a href=\"index.php?p=admin&amp;".SID."\">\n";
                                echo "        Zurück zum Adminbereich\n";
                                echo "    </a>\n";
                                echo "</p>\n";
                            }
                        } else {
                            echo "<p>\n";
                            echo "    Account wurde hinzugefügt.\n";
                            echo "</p>\n";
                            echo "<p>\n";
                            echo "    Logindaten <br />\n";
                            echo "    Name: ".trim($_POST['name'])."<br />\n";
                            echo "    Password: ".$password."<br />\n";
                            echo "</p>\n";
                            echo "<p>\n";
                            echo "    <a href=\"index.php?p=admin&amp;".SID."\">\n";
                            echo "        Zurück zum Adminbereich\n";
                            echo "    </a>\n";
                            echo "</p>\n";
                        }
                    }
                } else {
                    echo "<form ".
                         "action=\"index.php?p=admin&amp;site=user&amp;action=add\" ".
                         "method=\"post\" ".
                         "class=\"formular\">\n";
                    echo "    <p>\n";
                    echo "        Neuen Benutzer hinzufügen\n";
                    echo "    </p>\n";
                    echo "    <ol>\n";
                    echo "        <li>\n";
                    echo "            <label for=\"name\">Name</label>\n";
                    echo "            <input type=\"text\" name=\"name\" id=\"name\" />\n";
                    echo "        </li>\n";
                    echo "        <li>\n";
                    echo "            <label for=\"email\">Emailadresse</label>\n";
                    echo "            <input type=\"text\" name=\"email\" id=\"email\" />\n";
                    echo "        </li>\n";
                    echo "        <li>\n";
                    echo "            <label for=\"send\">\n";
                    echo "                Zugangsdaten per Email zuschicken lassen\n";
                    echo "            </label>\n";
                    echo "            <input type=\"checkbox\" name=\"send\" id=\"send\" />\n";
                    echo "        </li>\n";
                    echo "        <li>\n";
                    echo "            <input type=\"submit\" name=\"submit\" value=\"Benutzer hinzufügen\" />\n";
                    echo "            <input type=\"reset\" name=\"submit\" value=\"Zurücksetzen\" />\n";
                    echo "            <input type=\"hidden\" name=\"".session_name()."\" ".
                                                            "value=\"".session_id()."\" />\n";
                    echo "        </li>\n";
                    echo "    <ol>\n";
                    echo "</form>\n";
                    echo "<p>\n";
                    echo "    <a href=\"index.php?p=admin&amp;".SID."\">\n";
                    echo "        Zurück zum Adminbereich\n";
                    echo "    </a>\n";
                    echo "</p>\n";
                }
                break;

                case 'edit':
        if(isset($_POST['submit']) AND "Benutzer auswählen" == $_POST['submit']) {
            if(!$_POST['uid']) {
                echo "<p class=\"error\">\n";
                echo "    Bitte wählen sie einen Benutzer aus<br />\n";
                echo "    <a href=\"index.php?p=admin&amp;site=user&amp;action=edit\">\n";
                echo "        Zurück zum Formular\n";
                echo "    </a>\n";
                echo "</p>\n";
            } else {
                $_SESSION['uid'] = $_POST['uid']; // Die UserID in der Session speichern.
                $rights = getRights($_SESSION['uid']); // Die Rechte vom User holen
                $sql = "SELECT
                            Name
                        FROM
                            users
                        WHERE
                            ID = '".$_SESSION['uid']."';";
                $result = mysql_query($sql) OR die(mysql_error());
                $Name = mysql_result($result, 0);
                echo "<form ".
                     "action=\"index.php?p=admin&amp;site=user&amp;action=edit\" ".
                     "method=\"post\" ".
                     "class=\"formular\">\n";
                echo "    <p>\n";
                echo "        Benutzer ".$Name." bearbeiten\n";
                echo "    </p>\n";
                echo "    <ol>\n";
                echo "        <li>\n";
                echo "            Rechte:\n";
                $allRights = array();
                $allRights[] = "Admin";
                $allRights[] = "News";
                // .. und weitere
                sort($allRights);
                echo "            <ul>\n";
                foreach($allRights as $value) {
                    echo "<li>\n";
                    echo "    <input id=\"".$value."\" type=\"checkbox\" name=\"rights[]\"";
                    if(in_array($value, $rights)) {
                        echo " checked=\"checked\"";
                    }
                    echo " value=\"".$value."\" />\n";
                    echo "    <label for=\"".$value."\">".$value."</label><br />\n";
                }
                echo "            </ul>\n";
                echo "        </li>\n";
                echo "        <li>\n";
                echo "            <input type=\"submit\" name=\"submit\" value=\"Rechte speichern\" />\n";
                echo "            <input type=\"reset\" name=\"submit\" value=\"Zurücksetzen\" />\n";
                echo "            <input type=\"hidden\" name=\"".session_name()."\" ".
                                                            "value=\"".session_id()."\" />\n";
                echo "    </ol>\n";
                echo "</form>\n";
                echo "<p>\n";
                echo "    <a href=\"index.php?p=admin&amp;".SID."\">\n";
                echo "        Zurück zum Adminbereich\n";
                echo "    </a>\n";
                echo "</p>\n";
            }
        } elseif(isset($_POST['submit']) AND "Rechte speichern" == $_POST['submit']) {
            if(!isset($_POST['rights'])) {
                echo "<p class=\"error\">\n";
                echo "    Sie müssen mindestens ein Recht angeben.\n";
                echo "</p>\n";
            } else {
                $sql = "DELETE FROM
                            user_rights
                        WHERE
                            UserID = '".$_SESSION['uid']."';";
                mysql_query($sql) OR die(mysql_error());
                // alle Vorhandenen Rechte löschen
                // und nun die angewählten hinzufügen
                foreach($_POST['rights'] as $right) {
                    $sql = "INSERT INTO
                                user_rights(userID, Recht)
                            VALUES
                                ('".$_SESSION['uid']."',
                                 '".$right."');";
                    mysql_query($sql) OR die(mysql_error());
                }
                echo "<p>\n";
                echo "    Die Rechte wurden gespeichert.\n";
                echo "</p>\n";
                echo "<p>\n";
                echo "    <a href=\"index.php?p=admin&amp;".SID."\">\n";
                echo "        Zurück zum Adminbereich\n";
                echo "    </a>\n";
                echo "</p>\n";
            }
        } else {
            echo "<form ".
                 "action=\"index.php?p=admin&amp;site=user&amp;action=edit\" ".
                 "method=\"post\" ".
                 "class=\"formular\">\n";
            echo "    <p>\n";
            echo "        Benutzer bearbeiten\n";
            echo "    </p>\n";
            echo "    <ol>\n";
            echo "        <li>\n";
            echo "            <label for=\"name\">Benutzer</label>\n";
            $sql = "SELECT
                        Name, ID
                    FROM
                        users
                    ORDER BY
                        Name ASC;";
            $result = mysql_query($sql) OR die(mysql_error());
            echo "                <select id=\"name\" name=\"uid\">\n";
            echo "                    <option value=\"0\" selected=\"selected\">Bitte einen User wählen</option>\n";
            while($row = mysql_fetch_assoc($result)) {
                echo "<option value=\"".$row['ID']."\">".$row['Name']."</option>\n";
            }
            echo "                </select>\n";
            echo "        </li>\n";
            echo "        <li>\n";
            echo "            <input type=\"submit\" name=\"submit\" value=\"Benutzer auswählen\" />\n";
            echo "            <input type=\"reset\" name=\"submit\" value=\"Zurücksetzen\" />\n";
            echo "            <input type=\"hidden\" name=\"".session_name()."\" ".
                                                    "value=\"".session_id()."\" />\n";
            echo "        </li>\n";
            echo "    <ol>\n";
            echo "</form>\n";
            echo "<p>\n";
            echo "    <a href=\"index.php?p=admin&amp;".SID."\">\n";
            echo "        Zurück zum Adminbereich\n";
            echo "    </a>\n";
            echo "</p>\n";
        }
        break;

            case 'del':
        if(isset($_POST['submit'])) {
            if(!$_POST['uid']) { // gucken ob == 0 ist
                echo "<p class=\"error\">\n";
                echo "    Bitte wählen sie einen Benutzer aus<br />\n";
                echo "    <a href=\"index.php?p=admin&amp;site=user&amp;action=del\">\n";
                echo "        Zurück zum Formular\n";
                echo "    </a>\n";
                echo "</p>\n";
            } else {
                $sql = "DELETE FROM
                            user_rights
                        WHERE
                            UserID = '".$_POST['uid']."';";
                mysql_query($sql) OR die(mysql_error());
                $sql = "DELETE FROM
                            users
                        WHERE
                            ID = '".$_POST['uid']."';";
                mysql_query($sql) OR die(mysql_error());
                echo "<p>\n";
                echo "    Der User wurde gelöscht.\n";
                echo "</p>\n";
                echo "<p>\n";
                echo "    <a href=\"index.php?p=admin&amp;".SID."\">\n";
                echo "        Zurück zum Adminbereich\n";
                echo "    </a>\n";
                echo "</p>\n";
            }
        } else {
            echo "<form ".
                 "action=\"index.php?p=admin&amp;site=user&amp;action=del\" ".
                 "method=\"post\" ".
                 "class=\"formular\">\n";
            echo "    <p>\n";
            echo "        Benutzer löschen\n";
            echo "    </p>\n";
            echo "    <ol>\n";
            echo "        <li>\n";
            echo "            <label for=\"name\">Benutzer</label>\n";
            $sql = "SELECT
                        Name, ID
                    FROM
                        users
                    ORDER BY
                        Name ASC;";
            $result = mysql_query($sql) OR die(mysql_error());
            echo "                <select id=\"name\" name=\"uid\">\n";
            echo "                    <option value=\"0\" selected=\"selected\">Bitte einen User wählen</option>\n";
            while($row = mysql_fetch_assoc($result)) {
                echo "<option value=\"".$row['ID']."\">".$row['Name']."</option>\n";
            }
            echo "                </select>\n";
            echo "        </li>\n";
            echo "        <li>\n";
            echo "            <input type=\"submit\" name=\"submit\" value=\"Benutzer löschen\" />\n";
            echo "            <input type=\"reset\" name=\"submit\" value=\"Zurücksetzen\" />\n";
            echo "            <input type=\"hidden\" name=\"".session_name()."\" ".
                                                    "value=\"".session_id()."\" />\n";
            echo "        </li>\n";
            echo "    <ol>\n";
            echo "</form>\n";
            echo "<p>\n";
            echo "    <a href=\"index.php?p=admin&amp;".SID."\">\n";
            echo "        Zurück zum Adminbereich\n";
            echo "    </a>\n";
            echo "</p>\n";
        }
        break;

            default:
                echo "<p>\n";
                echo "    Bitte benutzen sie nur einen Link aus dem Adminmenu.\n";
                echo "    <a href=\"index.php?p=admin&amp;".SID."\">\n";
                echo "        Zurück zum Adminbereich\n";
                echo "    </a>\n";
                echo "</p>\n";
                break;
        }
    }
?>

Hier bitte.
 
An Deiner Stelle würde ich nicht auf den Wert von $_POST['submit'] zugreifen um zwischen Auswahl und Edit zu unterscheiden.

Erstelle ein hidden field und gib ihm den wert 'save' oder 'select' und entscheide damit.

"Benutzer auswählen" enthält Leerzeichen und Umlaute. Das wird automatisch URL en-/decoded und wer weiss was dabei rausgekommen ist.

Oder ändere die Action Anweisung im Formular und hänge noch einen GET Parameter ran.

Defacto ist "if(isset($_POST['submit']) AND "Benutzer auswählen" == $_POST['submit'])" NICHT true
 
Also ich würde dir empfehlen den ganzen Kram zu löschen und alles neu zu schreiben. Das ganze ist meiner Meinung nach voll daneben. Du solltest die Formulate etc nicht per echo ausgeben. Zudem musst du, wenn du die Rechte eines Nutzers änders nicht erst seinen Eintrag löschen und neu erstellen, sondern du kannst einfach den Update befehl nutzeen.
MfG, Andy
 
Ich denke es wäre deutlich geschickter, wenn du dass ungefähr so machen würdest. Habe das ganze nur mal kurz skizziert, aber es sollte klar werden, wie ich das meine.
PHP:
<?php
    // get user-rights
    $rights = getRights();
    
    // user has no access
    if( !in_array("Admin", $rights) ) 
    {
        no_rights();
    }
    
    // add new user
    if( isset($_POST['submit'])) && ($_POST['action'] == 'add') )
    {
    }
    
    // edit user
    elseif( isset($_POST['submit'])) && ($_POST['action'] == 'edit') )
    {
    }
    
    // delete user
    elseif( isset($_POST['submit'])) && ($_POST['action'] == 'del') )
    {
    }
    
    // standard screen
    else
    {
?>
        <table>
        <caption>Create User</caption>
        <form action="<?= $_SERVER['PHP_SELF']; ?>" method="post">
            <tr>
                <th>Name</th>
                <td><input type="text" name="name" value="<?= $_POST['name']; ?>" /></td>
            </tr>
            <tr>
                <th>Password</th>
                <td><input type="password" name="password" value="<?= $_POST['password']; ?>" /></td>
            </tr>
            <tr>
                <th>Email</th>
                <td><input type="text" name="mail" value="<?= $_POST['mail']; ?>" /></td>
            </tr>
            <tr>
                <th><input type="hidden" name="action" value="edit" /></th>
                <td>
                    <input type="submit" name="submit" value="Submit" />
                    <input type="reset" name="reset" value="Reset" />
                </td>
            </tr>
        </form>
        </table>
<?php
    }
?>
MfG, Andy
 
Zurück