Probleme mit Login Script (Fatal Error)

cry_baby

Mitglied
Hallo,

ich habe ein Tutorial für ein Login Script durchgemacht. Der code hierfür ist:

PHP:
<?php
    if(isset($_GET['action']) AND ("logout" == $_GET['action'])) {
        session_destroy();
        echo "<p>\n";
        echo "    Sie haben sich ausgeloggt. Um wieder in den Adminbereich\n";
        echo "    zu kommen müssen sie sich wieder Einloggen\n";
        echo "</p>\n";
    } else {
        if(isset($_POST['UserID']) AND '0' == $_POST['UserID']) {
            echo "<p>\n";
            echo "    Bitte wählen sie einen Benutzernamen aus.\n";
            echo "</p>\n";
        } else {
            if(isset($_POST['UserID'], $_POST['Password']) AND
               login_right(addslashes($_POST['UserID']),
                           addslashes($_POST['Password']))) {
                $_SESSION['ID'] = $_POST['UserID'];
            }
            if(isset($_SESSION['ID'])) {
                echo "<p>\n";
                echo "    Willkommen im Adminbereich <br />\n";
                echo "    <a href=\"index.php?section=admin&amp;".SID."\">Repeat</a>\n";
                echo "    <a href=\"index.php?section=admin&amp;action=logout&amp;".SID."\">Ausloggen</a>\n";
                echo "</p>\n";
            } else {
                if(isset($_POST['submit'])) {
                     // Der Submit-Button wurde gedrückt
                     // aber der Login ist falsch. Deshalb
                     // erstellen wir eine Fehlermeldung
                     echo "<p class=\"error\">\n";
                     echo "    Ungültiges Password.\n";
                     echo "</p>\n";
                }
                echo "<form action=\"index.php?section=admin\" method=\"post\" class=\"admin_form\">\n";
                echo "    <table>\n";
                echo "        <tr>\n";
                echo "            <th colspan=\"2\">\n";
                echo "                <h2>Adminbereich</h2>\n";
                echo "            </th>\n";
                echo "        </tr>\n";
                echo "        <tr>\n";
                echo "            <td>\n";
                echo "                <label for=\"name\">Name:</label>\n";
                echo "            </td>\n";
                echo "            <td>\n";
                $sql = "SELECT
                            `ID`,
                            `Name`
                        FROM
                            `users`
                        ORDER BY
                            `Name` ASC;";
                $result = mysql_query($sql) OR die(mysql_error());
                echo "                <select size=\"1\" name=\"UserID\" id=\"name\">\n";
                echo "                    <option value=\"0\" selected=\"selected\">Bitte wählen</option>\n";
                while($row = mysql_fetch_assoc($result)) {
                    echo "<option value=\"".$row['ID']."\">".$row['Name']."</option>\n";
                }
                echo "                </select>\n";
                echo "            </td>\n";
                echo "        </tr>\n";
                echo "        <tr>\n";
                echo "            <td>\n";
                echo "                <label for=\"password\">Password:</label>\n";
                echo "            </td>\n";
                echo "            <td>\n";
                echo "                <input type=\"password\" name=\"Password\" id=\"password\"/>\n";
                echo "            </td>\n";
                echo "        </tr>\n";
                echo "        <tr>\n";
                echo "            <td colspan=\"2\">\n";
                echo "                <input type=\"submit\" name=\"submit\" value=\"Abschicken\" />\n";
                echo "                <input type=\"reset\" name=\"submit\" value=\"Zurücksetzen\" />\n";
                echo "            </td>\n";
                echo "        </tr>\n";
                echo "    </table>\n";
                echo "</form>\n";
            }
        }
    }
?>

funktioniert soweit auch alles, bis auf wenn ich mich einlogge mit den richtigen Benutzerdaten, die über MySQL angelegt sind, bekomme ich folgende Fehlermeldung im Browser:

Fatal error: Call to undefined function: login_right() in /home/u0028564465/public_html/admin/admin.php on line 15


Kann mir irgendjemand weiterhelfen und sagen, was ich falsch gemacht habe? Ich finde den Fehler nicht...
 
Hi,
in deinem Skript wird die Funktion "login_right()" aufgerufen, welche allerdings nicht in deinem Skript vorhanden ist. Es ist wohl so gedacht, dass du diese Funktion noch schreiben musst.

Die Funktion hat zwei Übergabeparameter - BenutzerID und Passwort.
Hier mal ein ganz triviales Beispiel.

PHP:
// ganz simples kleines beispiel :-)
function login_right( $userid, $password ) {
  
  // Hole das Passwort des Benutzer mit der id -> $userid aus der Datenbank
  $sql = "SELECT password FROM usertable WHERE userid=".$userid;
  $query = mysql_query( $sql );
  $data = mysql_fetch_array( $query );
  
  // Ist das Passwort richtig?
  if( $password == $data["password"] ){
    // Ja
    return true;  
  }
  else{
    // Nein
    return false;
  }
  
}

Gruß Manuel
 
dazu habe ich aber die config.php

PHP:
<?php
    include 'constant.php';
    include 'variablen.php';
    include 'functions.php';
?>

und in der functions.php steht das:

PHP:
<?php
    function login_right($id, $pass)
    {
        $sql = "SELECT
                    COUNT(*) as Anzahl
                FROM
                    users
                WHERE
                    ID = '".$id."' AND
                    Password = MD5('".$pass."');";
        $result = mysql_query($sql) OR die(mysql_error());
        $row = mysql_fetch_assoc($result);
        mysql_free_result($result);
        return $row['Anzahl'];
    }
?>

also hab ich das login_right doch definiert...
 
Wichtig ist das die Includes davor kommen und nicht danach.
Und das die Pfade von den Includes richtig sind.
 
Arbeite bei notwendigen Skriptdateien lieber mit der require- oder require_once-Anweisung, um sicherzustellen, dass sie tatsächlich eingebunden sind.
 
Ich glaube ich bräuchte doch nochmal eure Hilfe...

Die Fehlermeldungen habe ich mittlerweile in den Griff bekommen. Habe auch verstanden was ich falsch gemacht habe, dank euren Erklärungen.

Allerdings habe ich jetzt das Problem:

Einloggen mit falschem Passwort erzeugt die richtige Fehlermeldung.
Einloggen ohne Benutzernamen erzeugt auch die richtige Fehlermeldung.

Allerdings, wenn ich mich mit richtigem Namen und Passwort einlogge, passiert gar nichts. Er zeigt mir dann wieder nur das Login an.

Der Code schaut momentan so aus:

PHP:
<?php
    if(isset($_GET['action']) AND ("logout" == $_GET['action'])) {
        session_destroy();
        echo "<p>\n";
        echo "    Sie haben sich ausgeloggt. Um wieder in den Adminbereich\n";
        echo "    zu kommen müssen Sie Sich wieder Einloggen\n";
        echo "</p>\n";
    } else {
        if(isset($_POST['UserID']) AND '0' == $_POST['UserID']) {
            echo "<p>\n";
            echo "    Bitte wählen Sie einen Benutzernamen aus.\n";
            echo "</p>\n";
        } else {
            if(isset($_POST['UserID'], $_POST['Password']) AND
               login_right(addslashes($_POST['UserID']),
                           addslashes($_POST['Password']))) {
                $_SESSION['ID'] = $_POST['UserID'];
            }
            if(isset($_SESSION['ID'])) {
                echo "<p>\n";
                echo "    Willkommen im Adminbereich <br />\n";
                echo "    <a href=\"index.php?section=admin&amp;".SID."\">Repeat</a>\n";
                echo "    <a href=\"index.php?section=admin&amp;action=logout&amp;".SID."\">Ausloggen</a>\n";
                echo "</p>\n";
            } else {
                if(isset($_POST['submit'])) {
                     echo "<p class=\"error\">\n";
                     echo "    Ungültiges Password.\n";
                     echo "</p>\n";
                }
                echo "<form action=\"index.php?section=admin\" method=\"post\" class=\"admin_form\">\n";
                echo "    <table>\n";
                echo "        <tr>\n";
                echo "            <th colspan=\"2\">\n";
                echo "                <h2>Adminbereich</h2>\n";
                echo "            </th>\n";
                echo "        </tr>\n";
                echo "        <tr>\n";
                echo "            <td>\n";
                echo "                <label for=\"name\">Name:</label>\n";
                echo "            </td>\n";
                echo "            <td>\n";
                $sql = "SELECT
                            `ID`,
                            `Name`
                        FROM
                            `users`
                        ORDER BY
                            `Name` ASC;";
                $result = mysql_query($sql) OR die(mysql_error());
                echo "                <select size=\"1\" name=\"UserID\" id=\"name\">\n";
                echo "                    <option value=\"0\" selected=\"selected\">Bitte wählen</option>\n";
                while($row = mysql_fetch_assoc($result)) {
                    echo "<option value=\"".$row['ID']."\">".$row['Name']."</option>\n";
                }
                echo "                </select>\n";
                echo "            </td>\n";
                echo "        </tr>\n";
                echo "        <tr>\n";
                echo "            <td>\n";
                echo "                <label for=\"password\">Password:</label>\n";
                echo "            </td>\n";
                echo "            <td>\n";
                echo "                <input type=\"password\" name=\"Password\" id=\"password\"/>\n";
                echo "            </td>\n";
                echo "        </tr>\n";
                echo "        <tr>\n";
                echo "            <td colspan=\"2\">\n";
                echo "                <input type=\"submit\" name=\"submit\" value=\"Abschicken\" />\n";
                echo "                <input type=\"reset\" name=\"submit\" value=\"Zurücksetzen\" />\n";
                echo "            </td>\n";
                echo "        </tr>\n";
                echo "    </table>\n";
                echo "</form>\n";
            }
        }
    }
?>

Die Testseite befindet sich auf http://admin.feuerwehr-sonnefeld.de/

Das Login ist Name=test PW=test

Vielleicht kann mir jemand weiterhelfen? Vielen Dank im Voraus.
 
Hallo,
so da bin ich wieda ^^

Hab dein Code mal kopiert und so geändert das es ohne Datenbank funktioniert.
Beim mir läufts. Probier das hier doch mal bei dir aus.. wenn es funktioniert dann stimmt vermutlich was mit der Funktion "login_right" nicht. Wenn es nicht funktioniert dann haste ein Problem mit Sessions.

PHP:
<?php
define( "SID" , "mysid23424" );

function login_right( $user_id , $password ) {

    if( $password == "test" ) {
        return 1;
    }
    else{
        return 0;
    }

}

    if(isset($_GET['action']) AND ("logout" == $_GET['action'])) {
        session_destroy();
        echo "<p>\n";
        echo "    Sie haben sich ausgeloggt. Um wieder in den Adminbereich\n";
        echo "    zu kommen müssen Sie Sich wieder Einloggen\n";
        echo "</p>\n";
    } else {
        if(isset($_POST['UserID']) AND '0' == $_POST['UserID']) {
            echo "<p>\n";
            echo "    Bitte wählen Sie einen Benutzernamen aus.\n";
            echo "</p>\n";
        } else {
            if(isset($_POST['UserID'], $_POST['Password']) AND
               login_right(addslashes($_POST['UserID']),
                           addslashes($_POST['Password']))) {
                $_SESSION['ID'] = $_POST['UserID'];
            }
            if(isset($_SESSION['ID'])) {
                echo "<p>\n";
                echo "    Willkommen im Adminbereich <br />\n";
                echo "    <a href=\"index.php?section=admin&amp;".SID."\">Repeat</a>\n";
                echo "    <a href=\"index.php?section=admin&amp;action=logout&amp;".SID."\">Ausloggen</a>\n";
                echo "</p>\n";
            } else {
                if(isset($_POST['submit'])) {
                     echo "<p class=\"error\">\n";
                     echo "    Ungültiges Password.\n";
                     echo "</p>\n";
                }
                echo "<form action=\"".$_SERVER["PHP_SELF"]."\" method=\"post\" class=\"admin_form\">\n";
                echo "    <table>\n";
                echo "        <tr>\n";
                echo "            <th colspan=\"2\">\n";
                echo "                <h2>Adminbereich</h2>\n";
                echo "            </th>\n";
                echo "        </tr>\n";
                echo "        <tr>\n";
                echo "            <td>\n";
                echo "                <label for=\"name\">Name:</label>\n";
                echo "            </td>\n";
                echo "            <td>\n";
                echo "                <select size=\"1\" name=\"UserID\" id=\"name\">\n";
                echo "                    <option value=\"0\" selected=\"selected\">Bitte wählen</option>\n";
                echo "                    <option value=\"1\">Test</option>\n";
                echo "                </select>\n";
                echo "            </td>\n";
                echo "        </tr>\n";
                echo "        <tr>\n";
                echo "            <td>\n";
                echo "                <label for=\"password\">Password:</label>\n";
                echo "            </td>\n";
                echo "            <td>\n";
                echo "                <input type=\"password\" name=\"Password\" id=\"password\"/>\n";
                echo "            </td>\n";
                echo "        </tr>\n";
                echo "        <tr>\n";
                echo "            <td colspan=\"2\">\n";
                echo "                <input type=\"submit\" name=\"submit\" value=\"Abschicken\" />\n";
                echo "                <input type=\"reset\" name=\"submit\" value=\"Zurücksetzen\" />\n";
                echo "            </td>\n";
                echo "        </tr>\n";
                echo "    </table>\n";
                echo "</form>\n";
            }
        }
    }
?>

Gruß manuel
 
Zuletzt bearbeitet:
Zurück