PHP Passwort Vergessen Button

Hey Leute ;)

mein Code sieht momentan folgendermaßen aus:

1. pwforgotten.php:
PHP:
<?php
// Überprüfen, ob das Formular abgeschickt wurde und ob alle Angaben gemacht wurden.
if( isset($_POST['username'], $_POST['email'], $_POST['gfrage'], $_POST['gantwort'])
    AND
		strcmp(trim($_POST['username']),'') != 0
	AND
		strcmp(trim($_POST['email']),'') != 0
	AND
		strcmp(trim($_POST['gfrage']),'') != 0
    AND
		strcmp(trim($_POST['gantwort']),'') != 0 ) {

	// Einbinden der Konfigurationsdatei.
	require_once 'config.php';

	// SQL-Anweisung an die Datenbank senden, um erstens herauszufinden, ob 
	// diese Kombination von Daten überhaupt existiert.
	$sql = "SELECT 
				username,
				email,
				gantwort,
				gfrage
			FROM         
				user
			WHERE
				username = '" . trim($_POST['username']) . "'
			AND
				email = '" . trim($_POST['email']) . "'
			AND
				gfrage = '" . trim($_POST['gfrage']) . "'
			AND
				gantwort = '" . trim($_POST['gantwort']) . "'";

			$res = mysql_query($sql) or die( 'Error[SELECT|User]: <br /><pre>' . $sql . '</pre><br />MySQL-Error: ' . mysql_error() );

			// Nur wenn genau ein Datensatz selektiert wurde, wird eine E-Mail an den User versendet.
			// Ansonsten wird ihm eine Fehlermeldung angezeigt.
			if( mysql_num_rows($res) != 1 ) {
				echo "<font face=\"Arial\" color=\"#333333\">Die angegebenen Benutzerdaten sind nicht korrekt!</font>";
				exit();
			}else{
				// Mail - From festlegen
				$from = "From: \n";
				$from .= "Reply-To: \n";
				$from .= "X-Mailer: PHP/" . phpversion(). "\n";
				$from .= "X-Sender-IP: $REMOTE_ADDR\n";
				$from .= "Content-Type: text/html";

				// Benutzerdaten in Variablen speichern
				$username = $_POST['username'];
				$email = $_POST['email'];
				
				// ID erzeugen
				$id = sha1($username.time().rand(-3000,3000));

				// Einbinden der Konfigurationsdatei.
				require_once 'config.php';

				// ID einfügen
				$sql = 	"UPDATE
							user
						SET
							pw_reset_id='".$id."'
						WHERE
							username='".$username."'";

				$res = mysql_query($sql) or die( 'Error[SELECT|User]: <br /><pre>' . $sql . '</pre><br />MySQL-Error: ' . mysql_error() );
					
				// Mail - Daten zusammenfassen
				$nachricht = "<table border=\"0\" cellpadding=\"0\" cellspacing=\"2\">
								<table border=\"0\" cellpadding=\"0\" cellspacing=\"2\">
									<tr>
										<td><font face=\"Arial\" color=\"#333333\" size=\"+2\">Hallo <b>$username</b>,</font></td>
									</tr>
								</table>
							<br>
								<table border=\"0\" cellpadding=\"0\" cellspacing=\"2\">
									<tr>
										<td><font face=\"Arial\" color=\"#333333\">Verwende bitte den unten stehenden Link, um Dein Passwort ändern zu können.</font></td>
									</tr>
									<tr>
										<td><font face=\"Arial\" color=\"#333333\">http://www.s351911540.online.de/pwreset.php?username=".$username."&id=".$id."</font></td>
									</tr>
								</table>
							<br>
								<table border=\"0\" cellpadding=\"0\" cellspacing=\"2\">
									<tr>
										<td><font face=\"Arial\" color=\"#333333\">Viel Spaß wünscht Dir das Team von <a href=\"http://\"></a></font></td>
									</tr>
								</table>";

				//E - mail versenden
				mail("$email", "Passwort vergessen", "$nachricht", "$from");

				// Mail wurde versandt und der User bekommt eine Mitteilung angezeigt, in der er erfährt wie es weitergeht.
				echo "<font face=\"Arial\" color=\"#333333\">Du hast soeben eine Mail von uns erhalten, mit der Du Dein Passwort ändern kannst.</font>";
				exit();                                            
			}
}else{
?>

<!-- Eingabemaske -->
<center>
<form action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
<table border="0" width="500" cellpadding="0" cellspacing="2">
	<tr>
		<td><font face="Arial" color="#333333">Username:</font></td>
	</tr>
	<tr>
		<td><input type="text" name="username" size="30" maxlength="30"></td>
	</tr>
	<tr>
		<td><font face="Arial" color="#333333">E - Mail:</font></td>
	</tr>
	<tr>
		<td><input type="text" name="email" size="30" maxlength="30"></td>
	</tr>
	<tr>
		<td><font face="Arial" color="#333333">Geheim - Frage:</font></td>
	</tr>
	<tr>
		<td>
			<select name="gfrage">
				<option value="" <?php if ($_SESSION['gfrage'] == "0") { echo "selected"; } ?>> </option>
				<option value="Was ich schon immer loswerden wollte?" <?php if ($_SESSION['gfrage'] == "Was ich schon immer loswerden wollte?") { echo "selected"; } ?>>Was ich schon immer loswerden wollte?</option>
				<option value="Meine Lieblingsmusik?" <?php if ($_SESSION['gfrage'] == "Meine Lieblingsmusik?") { echo "selected"; } ?>>Meine Lieblingsmusik?</option>
				<option value="Ich bin...?" <?php if ($_SESSION['gfrage'] == "Ich bin...?") { echo "selected"; } ?>>Ich bin...?</option>
				<option value="Name meines Haustiers?" <?php if ($_SESSION['gfrage'] == "Name meines Haustiers?") { echo "selected"; } ?>>Name meines Haustiers?</option>
				<option value="Wies mir geht?" <?php if ($_SESSION['gfrage'] == "Wies mir geht?") { echo "selected"; } ?>>Wies mir geht?</option>
			</select>
		</td>
	</tr>
	<tr>
		<td><font face="Arial" color="#333333">Geheim - Antwort:</font></td>
	</tr>
	<tr>
		<td><input type="password" name="gantwort" size="30" maxlength="30"></td>
	</tr>
	<tr>
		<td>&nbsp;</td>
	</tr>
	<tr>
		<td><input type="submit" name="submit" value="Absenden">&nbsp;<input type="reset" value="Abbrechen" name="reset"></td>
	</tr>
</table>
</form>
</center>
<?php
}
?>

2. pwreset.php:
PHP:
<?php
$id = mysql_real_escape_string($_GET['id']);
$username = mysql_real_escape_string($_GET['username']);

require_once("config.php");

$sql = "SELECT
			userid
		FROM
			user
		WHERE
			username='".$username."'
		AND
			pw_reset_id='".$id."'";
		
$res = mysql_query($sql) or die( 'Error[SELECT|User]: <br /><pre>' . $sql . '</pre><br />MySQL-Error: ' . mysql_error() );

if (mysql_num_rows($res) > 0){

?>

<center>
<form action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
	<table border="0" width="500" cellpadding="0" cellspacing="2">
		<tr>
			<td><font face="Arial" color="#333333">Neues Passwort:</font></td>
		</tr>
		<tr>
			<td><input type="password" name="password1" size="30" maxlength="30"></td>
		</tr>
	</table>
<hr>
	<table border="0" width="500" cellpadding="0" cellspacing="2">
		<tr>
			<td><font face="Arial" color="#333333">Passwort wiederholen:</font></td>
		</tr>
		<tr>
			<td><input type="password" name="password2" size="30" maxlength="30"></td>
		</tr>
		<tr>
			<td>&nbsp;</td>
		</tr>
		<tr>
			<td><input type="submit" name="submit" value="Absenden">&nbsp;<input type="reset" value="Abbrechen" name="reset"></td>
		</tr>
	</table>
</form>
</center>

<?php
// Daten auslesen
$password1 = $_POST['password1'];
$password2 = $_POST['password2'];
$password = $password1;

// SQL-Anweisung basteln, um Daten in die DB-Tabelle einzufügen.
if ($password1 == "" or $password2 == "") {
	echo "<hr><center><font face=\"Arial\" color=\"#333333\"><b>Bitte trage Dein neues Passwort ein.</b></font></center><hr>";
}else{
	if ($password1 != $password2) {
		echo "<font face=\"Arial\" color=\"#333333\">Die angegebenen Passwörter sind nicht identisch!</font>";
	}else{
		require_once("config.php");
		$sql = "UPDATE
					user
				SET
					password=\"MD5('".$password."'),\"";

		// SQL-Anweisung an die DB schicken und im Fehlerfall eine Meldung ausgeben.
		$res = mysql_query($sql) or exit( __LINE__.', '.__FILE__.'<br />' .mysql_error());

		// Wenn kein Fehler aufgetreten ist auf die Startseite weiterleiten.
		echo "<meta http-equiv='refresh' content='0; url=index.php?site=home'>" ;
	}
}
}else{
	echo "<font face=\"Arial\" color=\"#333333\">Ein Fehler ist aufgetreten!</font>";
}
?>

@Yaslaw: Du meinst bestimmt diesen sql hier:
PHP:
require_once("config.php");

$sql = "SELECT
	userid
            FROM
	user
            WHERE
	username='".$username."'
            AND
	pw_reset_id='".$id."'";
		
$res = mysql_query($sql) or die( 'Error[SELECT|User]: <br /><pre>' . $sql . '</pre><br />MySQL-Error: ' . mysql_error() );

Wie bereits gesagt...wenn man auf den Link in der Mail klickt, wird im Explorer immer die Fehlermeldung (Ein Fehler ist aufgetreten!) angezeigt, die ich zu Versuchszwecken rein programmiert habe.

Ich habe auch noch ein anderes Problem:
Sobald ich die Daten bei pwforgotten eingegeben habe, erscheint wie gewünscht eine Erfolgsmeldung, die dem User sagt, dass er eine Mail erhalten hat. Dabei fehlen dann komischerweise 2 Elemente der restlichen Seite....nähmlich die rechte Menu-Leiste in der "Passwort vergessen?" angezeigt wird und 1 Teil des Designs.
Hat vllt. jemand ne Ahnung, wie das passieren kann?^^

Vielen Dank für Eure Hilfe ;)

LG Zneaf
 
Ich habe auch noch ein anderes Problem:
Sobald ich die Daten bei pwforgotten eingegeben habe, erscheint wie gewünscht eine Erfolgsmeldung, die dem User sagt, dass er eine Mail erhalten hat. Dabei fehlen dann komischerweise 2 Elemente der restlichen Seite....nähmlich die rechte Menu-Leiste in der "Passwort vergessen?" angezeigt wird und 1 Teil des Designs.
Hat vllt. jemand ne Ahnung, wie das passieren kann?^^

Es kann daran liegen, dass du [phpf]exit[/phpf] nutzt, dann werden nachfolgende [phpf]echo[/phpf]'s nicht mehr ausgegeben.

Wie bereits gesagt...wenn man auf den Link in der Mail klickt, wird im Explorer immer die Fehlermeldung (Ein Fehler ist aufgetreten!) angezeigt, die ich zu Versuchszwecken rein programmiert habe.
Dieser Teil des IF-Blocks wird angezeigt, wenn das erste SQL-Query null Zeilen zurückgibt:
PHP:
$sql = "SELECT 
            userid 
        FROM 
            user 
        WHERE 
            username='".$username."' 
        AND 
            pw_reset_id='".$id."'";
Gib doch mal bitte diesen Teil per exit($sql); aus, also testweise einfach hier diese Variablenzuweisung schreibne.
 
Hey ComFreek ;)

das mit "exit()" versuche ich gleich mal und geb beim nächsten Beitrag Rückmeldung =)
Allerdings habe ich das mit exit($sql) nicht ganz verstanden...muss ich das genau so irgendwo reinschreiben? wenn ja, wo? wenn nein, erklärs mir bitte :D

Vielen Dank

LG Zneaf =)
 
Also wir möchten ja nur den SQL-Code ausgeben (inklusive den Variablen $username und $id).
Normal ausgeben kannst du Sachen mit [phpf]echo[/phpf].
Bei mir tue ich immer schnell ein [phpf]exit[/phpf] rein, damit ich nicht den ganzen anderen Code von anderen [phpf]echo[/phpf]'s bekomme, sondern nur diesen.

Einfach direkt unter die Variablenzuweisung von $sql bzw. so:

PHP:
<?php 
$id = mysql_real_escape_string($_GET['id']); 
$username = mysql_real_escape_string($_GET['username']); 

require_once("config.php"); 

$sql = "SELECT 
            userid 
        FROM 
            user 
        WHERE 
            username='".$username."' 
        AND 
            pw_reset_id='".$id."'"; 
/* ---------------------------------------- */
exit($sql);
/* ---------------------------------------- */
         
$res = mysql_query($sql) or die( 'Error[SELECT|User]: <br /><pre>' . $sql . '</pre><br />MySQL-Error: ' . mysql_error() ); 

if (mysql_num_rows($res) > 0){ 

?> 

<center> 
<form action="<?php $_SERVER['PHP_SELF']; ?>" method="post"> 
    <table border="0" width="500" cellpadding="0" cellspacing="2"> 
        <tr> 
            <td><font face="Arial" color="#333333">Neues Passwort:</font></td> 
        </tr> 
        <tr> 
            <td><input type="password" name="password1" size="30" maxlength="30"></td> 
        </tr> 
    </table> 
<hr> 
    <table border="0" width="500" cellpadding="0" cellspacing="2"> 
        <tr> 
            <td><font face="Arial" color="#333333">Passwort wiederholen:</font></td> 
        </tr> 
        <tr> 
            <td><input type="password" name="password2" size="30" maxlength="30"></td> 
        </tr> 
        <tr> 
            <td>&nbsp;</td> 
        </tr> 
        <tr> 
            <td><input type="submit" name="submit" value="Absenden">&nbsp;<input type="reset" value="Abbrechen" name="reset"></td> 
        </tr> 
    </table> 
</form> 
</center> 

<?php 
// Daten auslesen 
$password1 = $_POST['password1']; 
$password2 = $_POST['password2']; 
$password = $password1; 

// SQL-Anweisung basteln, um Daten in die DB-Tabelle einzufügen. 
if ($password1 == "" or $password2 == "") { 
    echo "<hr><center><font face=\"Arial\" color=\"#333333\"><b>Bitte trage Dein neues Passwort ein.</b></font></center><hr>"; 
}else{ 
    if ($password1 != $password2) { 
        echo "<font face=\"Arial\" color=\"#333333\">Die angegebenen Passwörter sind nicht identisch!</font>"; 
    }else{ 
        require_once("config.php"); 
        $sql = "UPDATE 
                    user 
                SET 
                    password=\"MD5('".$password."'),\""; 

        // SQL-Anweisung an die DB schicken und im Fehlerfall eine Meldung ausgeben. 
        $res = mysql_query($sql) or exit( __LINE__.', '.__FILE__.'<br />' .mysql_error()); 

        // Wenn kein Fehler aufgetreten ist auf die Startseite weiterleiten. 
        echo "<meta http-equiv='refresh' content='0; url=index.php?site=home'>" ; 
    } 
} 
}else{ 
    echo "<font face=\"Arial\" color=\"#333333\">Ein Fehler ist aufgetreten!</font>"; 
} 
?>
 
Hi ComFreek ;)

hab das mal eben so eingefügt und daraufhin NURNOCH das folgende angezeigt bekommen:

UPDATE user SET pw_reset_id='1b9a76b56648f41df5f724078704a1e42a2bcc87' WHERE username='Zneaf'

Hoffe das dir das hilft^^

LG Zneaf =)
 
Hey Leute =)

habt ihr vllt. noch Ideen, warum die ganze Sache noch nicht funktioniert? =)

@ ComFreek: Hat dir mein letzter Post bei der Problemsuche geholfen?

Vielen Dank für die Hilfe ;)

LG Zneaf =)
 
@ ComFreek: Hat dir mein letzter Post bei der Problemsuche geholfen?
Es ist ja schon Fakt, dass es am Query liegt (siehe deine IF-Konstrukte), denn es liefert 0 Zeilen.
Jetzt solltest du eigentlich das Query, was du oben gepostet hast (oder ein aktuelleres), in phpMyAdmin oder in der Konsole eingeben.
Und dann poste doch bitte, ob es ein leeres Resultat gibt oder nicht.
 
Hey ComFreek ;)

ich habe soeben folgenden Code bei phpmyadmin eingefügt:
PHP:
$sql = "SELECT
	userid
            FROM
	user
            WHERE
	username='".$username."'
            AND
	pw_reset_id='".$id."'";

Dabei kam folgendes heraus:

MySQL meldet: Dokumentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '$sql = "SELECT
userid
FROM
user
WHERE
username='".$username."'' at line 1

Danach habe ich das gleiche mit folgendem Code gemacht:
PHP:
$id = mysql_real_escape_string($_GET['id']);
$username = mysql_real_escape_string($_GET['username']);

require_once("config.php");

$sql = "SELECT
	userid
            FROM
	user
            WHERE
	username='".$username."'
            AND
	pw_reset_id='".$id."'";

Dabei habe ich dann folgendes erhalten:

SQL-Befehl:

$id = mysql_real_escape_string(
$_GET[ 'id']
)

MySQL meldet: Dokumentation


Hoffe du kannst was damit anfangen.....ich habs krampfhaft versucht, zu verstehen...vergebens :D

Vielen Dank =)

LG Zneaf ;)
 
Zuletzt bearbeitet:
Zurück