Hallo,
Die Ausgabe der Query kann nicht aus dem von Dir geposteten Script stammen, denn
- fehlen dort die Quotes komplett
- nutzt MySQL SingleQuotes für VARCHAR- und TEXT-Datentypen
Desweiteren:
Mit $result kannst Du nur prüfen, ob die Abfrage erfolgreich war, hast aber kein Ergebnis.
Du vergleichst also in dem Moment typsicher einen Boolean ( $result ) mit einem Array ( $check ), da kann nur false bei rauskommen!
Warum die Fehler nicht ausgegeben werden lassen wir mal für den Moment dahingestellt.
Wichtig ist erstmal, was für eine Logik Du verfolgst, bzw. verfolgt werden muss!
- Wurde die Query korrekt verarbeitet ( $result )?
- Gibt es einen resultierenden Datensatz aus der Query ( fehlt bei Dir! )
- Ist die resultierende HashId aus der Query gleich der aus $check?
Diese drei Fälle musst Du mindestens verarbeiten, um dem Ziel näher zu kommen.
Weiterhin nutzt Du $check anders, wie ich.
Wenn Du den Link so versendest, wie ich, steht in $_SERVER['QUERY_STRING'] etwas in der Form:
test@example.com$a1d22d92f96a0bb64032aaf25ebb9b68b6b98122e755fa7406e03a5f0a73fd1d
Wenn Du dann per explode beim $ trennst, sollte Dein Array $check so aussehen:
Array (
[0] => test@example.com
[1] => a1d22d92f96a0bb64032aaf25ebb9b68b6b98122e755fa7406e03a5f0a73fd1d
)
Bei Dir hat das Array allerdings nur ein Element, was mich vermuten lässt, dass Du die Mail mit dem $-Zeichen nicht vorangestellt hast.
Die Abfrage innerhalb der Datenbank würde ich allerdings auf die E-Mail beziehen und nicht auf den Benutzernamen.
EDIT ( Code grob überarbeitet ):
Hier mal eine Variante, die zumindest von der Logik passen sollte, allerdings ungetestet offline im Editor angepasst!
<?php
session_start();
if( !isset($_SESSION['benutzeremail']) ) {
header ( 'location: ' . __DIR__ . '/registrieren.php' );
exit;
}
$userEmail = $_SESSION['benutzeremail'];
$check = ( !empty($_SERVER['QUERY_STRING']) )? explode( '$', $_SERVER['QUERY_STRING'] ): null;
try {
$pdo = new PDO('mysql:host=localhost;
dbname=apple231', //der Host und dbname
'****', // User-Name
'***', //Password
array(
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ,
// gibt an, dass man die Rückgabe eines Datensatzes von Methoden als Objekt erhaltet
PDO::ATTR_EMULATE_PREPARES => false,
// sagt, dass man nicht nur emulieren wollen, sondern PreparedStatements nutzen wollen
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
// PDO veranlassen , Exceptions zu werfen, die man abfangt und darauf reagiert
)
);
} catch( PDOException $e ) {
exit( 'Fehler beim verbinden:' . $e->getMessage() );
}
$statement = $pdo->prepare("SELECT hashid FROM Registrierdaten WHERE benutzeremail = ?" );
$statement->bindParam( 0, $userEmail, PDO::PARAM_STR );
$result = $statement->execute();
$fehler = array();
if ( !$result ) {
$fehler[] = 'Fehler in der Datenbankabfrage!';
} else {
if ( !$dsRow = $statement->fetch() ) {
$fehler[] = 'E-Mail Adresse in Datenbank nicht gefunden!';
} else {
if ( $dsRow->hashid != $check[1] ) {
$fehler[] = 'Keine Übereinstimmung!';
}
}
}
if ( count($fehler) > 0 ) {
echo $fehler;
}
Alles anzeigen
Die IF-Olympiade bekommt man sicher auch noch besser hin, aber hier soll erstmal nur die Logik aufzeigen, die Du verfolgen musst.
Gruß Arne