• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Passwortreset funktioniert nicht

hallojs

Mitglied
Hallo,

ich bin gerade dabei einen PHP-Script zu schreiben, der ein Passwort, welches in einer MySql-DB hinterlegt ist zu ändern. Dazu bekommt der Benutzer eine E-Mail mit einem entsprechenden Link. Soweit funktioniert alles. Jedoch funktioniert der PHP-Script nicht, der mit Hilfe des Links das Passwort zurück setzen soll. Leider finde ich meinen Fehler auch nicht selber. Kann mir vielleicht jemand helfen?

Hier mein Script:
PHP:
<?php
error_reporting( E_ALL );

?>

<!DOCTYPE html>
<html>

<head>
    <title>...</title>

    <meta charset="UTF-8">
    <meta name="description" content="">
    <meta name="author" content="">
    <meta name="keywords" content="">

    <link href="..." type="text/css" rel="stylesheet">

    <link rel="shortcut icon" href="data/img/favicon.png" type="image/png" />
    <link rel="icon" href="data/img/favicon.png" type="image/png" />
</head>

<body>
    <div id="wrapper">
    <div id="content_container">
    <h1>...</h1>
<?php
if ( isset($_POST['passwort']) &&
     empty($_POST['passwort']) == FALSE &&

     isset($_POST['passwortbe']) &&
     empty($_POST['passwortbe']) == FALSE &&

     isset($_POST['hidden']) &&
     $_POST['hidden'] == "v" )
{
    if ( $_POST['passwort'] == $_POST['passwortbe'] &&
         strlen( $_POST['passwort'] ) >= 4 )
    {
        require_once ('konfiguration.php');

        $db_link = mysqli_connect ( MYSQL_HOST,
                                    MYSQL_BENUTZER,
                                    MYSQL_KENNWORT,
                                    MYSQL_DATENBANK );

        if ( $db_link )
        {
            $emailadresse = $_GET['mail'];
            $kontrollzahl = $_GET['id'];

            $passwort = $_POST['passwort'];

            $sql = "UPDATE benutzerdaten
                    SET passwort = '$passwort'
                    WHERE emailadresse = '$emailadresse'
                    AND kontrollzahl ='$kontrollzahl'";

            $erg = mysqli_query($db_link, $sql);

            ?>
            <p>Du hast dein Passwort erfolgreich geändert.</p>
            <?php

        }
        else
        {
            // In diesem Fall E-Mail mit Fehlerprotokoll an Entwickler
        }
    }
    else
    {
        if ( strlen($_POST['passwort']) < 4 )
        {
            ?>
            <p class="fehlermel">Dein Passwort ist zu kurz. Bitte gib ein Passwort mit min. 4 Zeichen an.</p>
            <?php
        }

        if ( $_POST['passwort'] !== $_POST['passwortbe'] )
        {
            ?>
            <p class="fehlermel">Deine Passwortangaben stimmen nicht überein!</p>
            <?php
        }

    }
}
?>
<div id="eing_fenst">
<h2>Passwort zurücksetzen</h2>

<form action="passwort_reset.php">

<input type="password" name="passwort" size="20" maxlength="30"
placeholder="Neues Passwort" class="input_eing" />

<input type="hidden" name="hidden" value="v" />

<input type="password" name="passwortbe" size="20" maxlength="30"
placeholder="Neues Passwort" class="input_eing" />

<input type="submit" name="Zurücksetzen" value="Zurücksetzen"
id="green_submitbutton" />

</form>
</div>
</div>
<div id="footer">
    <p>...</p>
</div>
</div>
</body>
</html>
<?php
?>
 
Werbung:
Jedoch funktioniert der PHP-Script nicht
Das ist keine Problembeschreibung! :(

Richtig debuggen

1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
3. Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
4. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
5. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
6. Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
7. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.
 
Schade, ich habe diese Schritt für Schritt Anleitung zum Debuggen nun schon häufiger in diesem Forum gelesen und natürlich habe ich, als Anfänger, auch alles mir erdenklich probiert. Jedoch ist es mir nicht gelungen den Fehler zu finden. Wenn, mir hier aufgrund dessen nicht geholfen werden, dass ich selber es nicht geschafft habe den Fehler weiter ein zu grenzen, dann entschuldige ich mich für diesen unnötigen Forumeintrag und werde an dieser Stelle leider aufgeben müssen.
Schade, aber trotzdem danke!

Grüße hallojs
 
Werbung:
Schade, ich habe diese Schritt für Schritt Anleitung zum Debuggen nun schon häufiger in diesem Forum gelesen und natürlich habe ich, als Anfänger, auch alles mir erdenklich probiert.
Punkt 1:
Zusätzlich zu error_reporting(E_ALL) solltest auch noch ini_set('display_errors', true) am Anfang des Scriptes schreiben.

Punkt 2:
Um MySQL-Fehler abzufangen gibt es die Funktion mysqli_error() (sehe ich in deinem Script nicht!).

Diese zwei Punkte hast du nicht beachtet beim debuggen.

Punkt 3:
Dein Script ist anfällig für SQL-Injections!
 
Hallo CPCoder,

danke für deine Antwort! Punkt 1 und 2 habe ich umgesetzt, hat mir leider aber nicht weiter geholfen. Punkt 3 ist mir bewusst, mir geht es allerdings erstmal nur um die Funktion meines Scriptes und um die zu testen, probiere ich den Code immer möglichst einfach zu halten. Spricht etwas dagegen? Hast du vielleicht eine Idee wo es harkt?

Grüße hallojs
 
Entweder du übermittelst Daten per GET oder per POST an dein Script, aber nicht beides!

Lass dir mal dein SQL-Query vor der Ausführung per echo ausgeben.
 
Werbung:
Schade, ich habe diese Schritt für Schritt Anleitung zum Debuggen nun schon häufiger in diesem Forum gelesen
Anscheinend aber nicht richtig.
und natürlich habe ich, als Anfänger, auch alles mir erdenklich probiert.
Hast du definitv nicht.
Jedoch ist es mir nicht gelungen den Fehler zu finden.
Weil du nicht wirklich gesucht hast
Punkt 1 und 2 habe ich umgesetzt, hat mir leider aber nicht weiter geholfen. Punkt 3 ist mir bewuss
Toll, "Richtig debuggen" hört aber nicht bei Punkt 3 auf!! :(

Wenn du dir mal das Post-Array ausgeben lassen würdest, dann hättest du feststellen können, dass es leer ist, da deine Formulardaten per Get gesendet werden!
 
Hallo bdt600,

ich habe wirklich probiert mein Problem selber zu lösen. Nur habe ich wohl den Wald vor Bäumen nicht gesehen, aber schließlich bin ich auch noch in den Anfängen, da brauche ich halt noch ein wenig Übung (das soll keine Entschuldigung sein, ich hätte wirklich selber auf das Problem kommen können!). Ich meinte vorhin im übrigen nicht den Punkt 3 deiner Debugginghilfe, sondern den Punkt 3 der Hilfestellung von CPCoder. Vielleicht zitier ich besser nächstes mal. Außerdem habe ich irgendwie das Gefühl ich muss dir sauer aufgestoßen haben, dass tut mir leid! Danke ansonsten für die Hilfestellung!!!

Hallojs
 
Außerdem habe ich irgendwie das Gefühl ich muss dir sauer aufgestoßen haben, dass tut mir leid!
Wenn man "Richtig debuggen" postet und sich dann doch nicht daran gehalten wird, das stößt mir sauer auf. Mit dieser Anleitung findet man den größten Teil von Fehlern, man muss sich halt nur mal selber bemühen.
Und "funktioniert nicht" ist kein Proglembeschreibung. Wenn man sich nicht die Mühe macht, sein Problem klar und deutlich zu beschreiben, dann darf man sich nicht wundern, wenn potentielle Helfer nicht so wirklich Lust auf Helfen haben.
 
Werbung:
Zurück
Oben