PHP Passwort Vergessen Button

Hey Zneaf,

ja klar kommt da ein Fehler, da die Konsole versucht PHP-Code (den du eingegeben hast) als SQl-Code zu interpretieren.

Deshalb solltest du das ja mit dem Ausgeben von $sql machen, du hattest ja:
Code:
UPDATE user SET pw_reset_id='1b9a76b56648f41df5f724078704a1e42a2bcc87' WHERE username='Zneaf'

Diesen Code sollst du in die Konsole einfügen!
 
Hey ComFreek =)

sry...hatte das halt noch nich so ganz verstanden. Bin leider noch kein Profi.

Als Resultat wurde 1 Datensatz angezeigt....also ganz wie erwünscht würde ich mal sagen.

LG Zneaf
 
Als Resultat wurde 1 Datensatz angezeigt....also ganz wie erwünscht würde ich mal sagen.
Eben nicht :D

Also das Problem war ja, dass immer zum letzten ELSE gesprungen wird. Und die Bedingung dafür ist, dass das Ergebnis 0 Datensätze sind.
Nun wird dir aber 1 angezeigt!

Versuche nochmal das $sql auszugeben (siehe letzten Beiträge) und das gleiche zu machen, aber direkt hintereinander.
 
Ich denke das Problem ist gerade, dass du ja eigentlich folgenden Code ausführen solltest:
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);
/* ---------------------------------------- */

//...
Dabei sollte ja eigentlich ein SELECT-Statement ausgegeben werden.

Du hast aber ein UPDATE-Statement ausgegeben bekommen und dann in phpMyAdmin ausgeführt:
Code:
UPDATE user SET pw_reset_id='1b9a76b56648f41df5f724078704a1e42a2bcc87' WHERE username='Zneaf'
Wahrscheinlich hast du das exit($sql); an der falschen Stelle im Code positioniert.

Problem ist ja, dass nach Klicken auf deinen Link kein Datensatz aus der Datenbank kommt und daher dein Code in den ELSE-Zweig springt. Folglich brauchen wir den exit($sql);-Output von dem SELECT-Statement (in der pwreset.php).

Im php-Code kannst du ja nur sehen, wie das Statement zusammengebaut wird, was aber am Ende dabei rauskommt, wenn alle Variablen ausgewertet wurden, weisst du nicht. Dadurch, dass das zusammengebaute Ergebnis durch exit($sql); ausgegeben wurde, kannst du dieses direkt in phpMyAdmin testen und sehen, ob der Fehler am SQL-Statement selbst liegt (phpMyAdmin meckert oder gibt keinen Datensatz) oder woanders (phpMyAdmin gibt dir einen Datensatz).
 
Hey Leute ;)

also....habe folgendes gemacht:

Habe das "exit($sql)" an der vorgegebenen Stelle eingefügt und auf der Website über die "pwforgotten.php" meine Daten eingegeben um eine neue Mail mit einem Link zu erhalten. Daraufhin habe ich dann erneut den Link in der Mail angeklickt, um zur Datei "pwreset.php" zu gelangen und zu testen.

Jetzt wurde mir folgendes im Explorer angezeigt:
PHP:
SELECT userid FROM user WHERE username='' AND pw_reset_id=''

Danach bin ich nochmal zu phpmyadmin gegangen und folgendes gemacht:

Ich habe i phpmyadmin bei SQL folgenden Code eingefügt:
PHP:
UPDATE user SET pw_reset_id='d4cb01021a46628ba6afe9f6a472c9317be9efaa' WHERE username='Zneaf'

Dann wurde mir folgendes angezeigt:
Betroffene Datensätze: 0 (die Abfrage dauerte 0.0007 sek)

Ich werd einfach noch nich so ganz schlau daraus, warum es keinen Datensatz findet.
Allerdings ist ja nun auch klar, warum er immer in den ELSE-Zweig springt....das Formular erscheint ja nur, wenn mehr als 0 Datensätze vorhanden sind.

Habt ihr vllt. ne Idee, woran das liegen könnte? =)

Vielen Dank für Eure super Hilfe ;)

LG Zneaf
 
Wieso hast du jetzt UPDATE bei phpMyAdmin eingegeben?
Naja kein Problem, jedenfalls wissen wir, dass das Skript kein username und pw_reset_id ausgibt im Query.

Ich schau mir mal den Code auf vorherigen Seiten an...

// Schon seltsam. Also de pwreset.php bekommt kein Username und ID per $_GET. Sprich es müsste am Link in der Email liegen. Überprüfe mal, welche Adresse dieser Link hat (also ob &username,...).
Was mir noch aufgefallen ist:
  • In der pwforgotten.php setzt du in das erste Query "rohe" POST-Daten ein.
    Falls du nicht weißt, was das anrichten kann, kannst du mein Tutorial "Sicherheit in PHP-Codes schaffen" aufrufen.
  • Dasselbe auch in der Email.
 
Zuletzt bearbeitet:
Hey ComFreek ;)

sry erstmal für den Fehler mit UPDATE...hatte in letzter Zeit viel Stress und war warscheinlich nicht ganz auf der Höhe.

Habe das ganze mit folgendem Code wiederholt:
PHP:
SELECT userid FROM user WHERE username='Zneaf' AND pw_reset_id='d4cb01021a46628ba6afe9f6a472c9317be9efaa'

Und ein neues Ergebnis erhalten:
Zeige Datensätze 0 - 0 (1 insgesamt, die Abfrage dauerte 0.0008 sek)
-> 1 Datensatz wurde gefunden....mit der richtigen ID (habe ich überprüft).

D.h. das die Abfrage richtig sein muss.
Kannst du dir darauf einen Reim machen, warum er es bei phpmyadmin findet und in der pwreset.php nicht?
Oder liegt es vielleicht an was anderem?

Vielen Dank für deinen langen Atem bei der Sache hier =)

LG Zneaf ;)
 
Hallo Zneaf,

das ist komisch ;)

Irgendwo wird irgendwas anders gemacht.

Kannst du vielleicht ein ZIP mit den aktuellen Dateien hochladen? Oder evtl. auch hier posten?
Sonst muss ich mir immer die Codes von den vorherigen Seiten zusammensuchen.
 
Jetzt wurde mir folgendes im Explorer angezeigt:
PHP:
SELECT userid FROM user WHERE username='' AND pw_reset_id=''

Das wurde dir durch exit($sql); im Explorer angezeigt. Und das zeigt doch eindeutig, dass deine Variablen $username und $id NICHT richtig ankommen.

Wenn du in phpMyAdmin ein ganz anderes Statement ausführst, nämlich:
Habe das ganze mit folgendem Code wiederholt:
PHP:
SELECT userid FROM user WHERE username='Zneaf' AND pw_reset_id='d4cb01021a46628ba6afe9f6a472c9317be9efaa'

Dann ist ja klar, dass du in phpMyAdmin ein Resultat bekommst, aber in deinem PHP-Code nicht.

Du solltest dir also Gedanken darum machen, warum $username und $id in deinem PHP-Code offensichtlich leer sind, denn sonst würde nicht solch ein Statement duch exit($sql); rauskommen.
 
Ich könnte mir vorstellen, dass evtl. an zwei Stellen scheitert:
1. pwforgotten.php:
PHP:
<td><font face=\"Arial\" color=\"#333333\">http://www.s351911540.online.de/pwreset.php?username=".$username."&id=".$id."</font></td>

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."'";
?>

  1. Schau mal, wie der Link nach dem Anklicken in der Adress-Leiste deines Browsers angezeigt wird. Sind dort das "?" und die "&" richtig angezeigt oder wurden sie durch HTML-Entitäten (z.B. "&amp;") oder durch URL-Encodierte Zeichen (z.B. "%26") ersetzt?
  2. Werden evtl. in der config.php die $username und $id mit leeren Werten überschrieben? Das könntest du prüfen, indem du vor dem require(...) einfach mal eine echo einfügst, dass die diese beiden ausgibt.
 
Zurück