PHP Passwort Vergessen Button

Die pw_reset_id ist ein SHA-1, also kein Integer. Die Spalte ist ja sicherlich auch als VARCHAR(40) definiert. Die Anführungszeichen würde ich also lassen :)

Darüber würde ich mir auch mal Gedanken machen:
PHP:
if ($password1 != $password2) {
            require_once("config.php");
        
            $sql = "UPDATE user
                    SET password=\"MD5('".$password."'),\""; 
//...
 
Zuletzt bearbeitet:
Hey Leute ;)

also...ich weiß garnicht wo ich anfangen soll xD

1. @ tombe: ich meinte genau den Link, den du gepostet hast. Die Domain habe ich bei meinem Post hier extra entfernt, da ich diese noch nicht veröffentlichen möchte =)
Den Link erhält der Benutzer genau dann, wenn er die Daten eingegeben hat und somit eine Mail erhalten hat.

2. @ DeeJTwoK: Das mit der Geheimabfrage ist momentan nur zu Versuchszwecken...das werde ich natürlich nch verfeinern, sobald das Gerüst funktioniert^^ Mit " mysql_real_escapte_string()" hast du natürlich recht....sollte eigentlich drin sein. War ein Fehler meinerseits, der soeben behoben wurde^^

3. @ ComFreek: Ich meinte den Link, der automatisch erstellt und per Mail verschickt wird, sodass der User sein PW ändern kann. Mit "generiertem Quelltext" meinst du dann bestimmt auch diesen Link oder?^^ Falls ja, habe ich hier ein Testbeispiel (wieder ohne Domain):
http://DOMAIN.de/pwreset.php?username='.Zneaf.'&id='.55c414bef5dab1b08f03a49ef81bab700e543a7e;
So steht der Link dann in der Mail drin...natürlich mit domain^^

4. @ DeeJTwoK: Die if-Abfrage mit den Passwörtern sollte eig. genau anders herum lauten xD Danke fürs Aufzeigen^^

@all: Sind die Anführungszeichen jetzt richtig über die hier geredet wurden oder nicht?^^

Puh...hoffe ich konnte alles beantworten und habe nichts vergessen :D

Aber nochmal zu meinem Problem: Der Link leitet mich auf die gewünschte Seite (pwreset.php) weiter. Allerdings kommt dann folgende Fehlermeldung:

Error[SELECT|User]:

SELECT id
FROM user
WHERE username=''
AND pw_reset_id=''

MySQL-Error: Unknown column 'id' in 'field list'

Wenn ich das richtig verstehe, gibts da wohl nen Fehler beim Übertragen oder Auslesen der id. Habt ihr vllt. ne Ahnung, woran das liegen könnte?

Danke für eure Hilfe ;)

LG Zneaf^^
 
Das bedeutet das du in der Tabelle "user" kein Feld mit dem Namen "id" hast.

Also einfach den Aufbau der Tabelle anschauen und den Namen im Skript oder der Tabelle ändern.
 
Und der Link ist noch falsch, das siehst du ja auch selbst: Der Link enhält einfache Anführungszeichen und Punkte, die da nicht reingehören:
Code:
http://domain.de/pwreset.php?username=%27.Zneaf.%27&id=%27.55c414bef5dab1b08f03a49ef81bab700e543a7e;
Generiere ihn nicht so:
PHP:
$nachricht = "...
<td><font face=\"Arial\" color=\"#333333\">pwreset.php?username='.$username.'&id='.$id;</td>
...";
Sondern so:
PHP:
$nachricht = "...
<td><font face=\"Arial\" color=\"#333333\">pwreset.php?username=$username&id=$id</td>
...";
Oder besser noch so:
PHP:
$nachricht = "...
<td><font face=\"Arial\" color=\"#333333\">pwreset.php?username=".$username."&id=".$id."</td>
...";

Ein schließendes </font> fehlt übrigens auch um den Link, genauso wie das schon erwähnte <a> Tag.
 
Die pw_reset_id ist ein SHA-1, also kein Integer. Die Spalte ist ja sicherlich auch als VARCHAR(40) definiert. Die Anführungszeichen würde ich also lassen :)

Ja sorry. Danke DeeJTwoK. War schon etwas länger her, sodass ich meinen eigens vorgeschlagenen Datentyp vergessen hatte ;)

@Zneaf:

Zeig doch mal den generierten SQL-Code her. "Generiert" heißt, dass der PHP-Code bzw. die Variablen (z.B. $id) schon eingesetzt worden sind.
Hier mit:
PHP:
echo $sql;

Übrigens ist der Font-Tag veraltet, also lieber auf CSS umsteigen, z.B.:
CSS:
#myspan
{
  color: green;
}
HTML:
<span id="myspan">text</span>
 
Bezüglich Anführungszeichen:
Diese Query sollte so richtig sein:
PHP:
$sql = "SELECT id 
        FROM user 
        WHERE username='".$username."' 
        AND pw_reset_id='".$id."'";
In dieser Query steckt noch der Wurm:
PHP:
 $sql = "UPDATE user SET password=\"MD5('".$password."'),\"";
Entweder du machst es so:
PHP:
 $sql = "UPDATE user SET password=MD5('".$password."')";
Oder so:
PHP:
 $sql = "UPDATE user SET password='".md5($password)."'";
Das erste nutzt die SQL MD5-Funktion, das zweite nutzt die php md5-Funktion.
Abgesehen von den Anführungszeichen solltest du hier auch besser die sha1-Funktion und nicht die md5-Funktion nutzen, da sicherer. Aus einem sha1-Hash lässt sich nämlich schwerer/gar nicht das Passwort errechnen.
 
@Zneaf:

Du nutzt in deiner pwforgotten.php die Funktion [phpf]sha1[/phpf] und in der pwreset.php auf einmal die Funktion [phpf]md5[/phpf]!
 
@Zneaf:

Du nutzt in deiner pwforgotten.php die Funktion [phpf]sha1[/phpf] und in der pwreset.php auf einmal die Funktion [phpf]md5[/phpf]!

Das ist erstmal nicht weiter schlimm, denn die [phpf]sha1[/phpf] wird benutzt, um eine eindeutige ID zu generieren. Die [phpf]md5[/phpf] wird benutzt, um das Passwort zu hashen.

Trotzdem solltest du gerade beim Passwort hashen, die [phpf]sha1[/phpf] nutzen, weil sicherer.
 
Hey Leute =)

erstmal Vielen dank für die ganzen Hilfestellungen von euch =)

@tombe: Das ist aber komisch...denn das Feld "id" gibts da^^

@DeeJTwoK: Du hast Recht....den Link werde ich so abändern und den font- bzw a- tag werde ich noch abändern ;)

@ComFreek: Das mit dem "generieren" werde ich demnächst machen und dir Rückmeldung geben....muss zur Zeit viel Arbeiten und hab wenig Zeit^^ und das mit CSS kuck ich mir auch mal an ;)

Das mit dem Passwort abspeichern (MD5 / sh1) werd ich mir auch nochmal ansehen ;) Danke hierfür =)

Sobald ich etwas Zeit gefunden habe, werde ich Rückmeldung geben, ob alles funktioniert hat =) Vielen Dank an dieser Stelle nochmals :)

LG Zneaf
 
Hey Leute ;)

hatte grad n paar Minuten Zeit und hab den Link mal abgeändert.
Dieser dunktioniert nun auch richtig.

Allerdings passiert nun folgendes:
Sobald ich auf den Link klicke, kommt eine leere Seite.

Da ich mir das nicht erklären konnte, hab ich noch nen else-Zweig hinzugefügt, um herauszufinden, ob überhaupt was funktioniert.
In der Datei pwreset.php gibt es folgende Stelle:
PHP:
if (mysql_num_rows($res) > 0){
// FORMULAR...
}else{
     echo "Ein Fehler ist aufgetreten!";
}

Nun zeigt es mir immer "Ein Fehler ist aufgetreten!" an, statt das Formular zur Vergabe des neuen Passworts.

Habt ihr vllt. ne Ahnung, woran es diesesmal liegen könnte?

LG Zneaf ;)
 
Zurück