Variable per Mail übergeben.

Anacondi

Erfahrenes Mitglied
Hallo, ich böchte eine emai-bestätigung in meine Seite mit einbauen.

meine emai-seite 1 sieht so aus:
HTML:
<?php
include ("checkuser.php");
include ("dbconnect.php");
$id = $_SESSION["user_id"];
$sql = "SELECT * from login WHERE id = $id";  
$result = mysql_query ($sql);  

if (mysql_num_rows ($result) > 0)  
{  
  // Benutzerdaten in ein Array auslesen.  
  $data = mysql_fetch_array ($result);  
}
$email = $data["email"];

$empfaenger = $email;
$betreff = "Die Mail-Bestaetigen";
$from = "From: Admin Power3d <gw@dpowered.de>";
$text1 = "Hallo, Du hast dich für die Bestätigung deiner Email-Adresse eingetragen. Bitte klicke auf den folgenden Link"; 
$text3 = "http://www.blablabla.de/bestaetigen.php?email=$email";
$text = "$text1\n$text3";
mail($empfaenger, $betreff, $text, $from);
?>
in der dann ankommenden Mail steht folgender Link
http://www.blablabla.de/bestaetigen.php?MeineMail@gmx.de

Wenn ich diesen link aber dann anklicke, öffnet er nicht die seite http://www.blablabla.de/bestaetigen.php
sondern
http://www.blablabla.de/bestaetigen.php?MeineMail@gmx.de
diese existiert natürlich nicht.
ich wollte, das er die seite bestaetigen.php aufruft, und dann die variable email übergibt.

meine bestätigen.php sieht so aus:
HTML:
<?php
include ("dbconnect.php");
echo "Deine Email: ", $HTTP_GET_VARS["email"];
$sql = "SELECT * from login WHERE email = email";  
$result = mysql_query ($sql);  

if (mysql_num_rows ($result) > 0)  
{  
  // Benutzerdaten in ein Array auslesen.  
  $data = mysql_fetch_array ($result);  
}

?>
 
$text3 = "http://www.blablabla.de/bestaetigen.php?email=$email";
so stehts doch oben.
ist denn email=$email
nich die Variable
in der datenbank hab ich die mails unter der tabelle email abgelegt
 
http://www.blablabla.de/bestaetigen.php?MeineMail@gmx.de
diese existiert natürlich nicht.
ich wollte, das er die seite bestaetigen.php aufruft, und dann die variable email übergibt.

Wieso gibst Du die Variable "email" dann in der URL nicht an? Richtig wäre:

Code:
http://www.blablabla.de/bestaetigen.php?email=MeineMail@gmx.de

Und das

HTML:
<?php
include ("dbconnect.php");
echo "Deine Email: ", $HTTP_GET_VARS["email"];
$sql = "SELECT * from login WHERE email = email";  
...

macht dann erst recht keinen Sinn.

Fehler 1: $HTTP_GET_VARS["email"] -> diese Schreibweise nutzt man heutzutage nicht mehr. Wenn Du auf GET-Variablen zugreifen willst, verwende $_GET. Also: $_GET["email"]

Fehler 2: Der Vergleich in deinem SQL-Statement ist sinnfrei. Das ergibt eine Liste aller Datensätze in der Tabelle login und nicht beschränkt auf den einen Datensatz den Du willst. Richtig wäre:

PHP:
$sql = "SELECT * from login WHERE email = '".$email."'";

Hinweise:
Bedenke, dass so ein Link auch manipuliert werden kann. Man könnte beliebige E-Mails austesten und schauen was deine Seite dann beim Aufruf für ein Ergebnis ausgibt. Es wäre gut, wenn Du statt der E-Mail eine ID und zusätzlich einen Sicherheitscode verwendest um die Bestätigung durchzuführen. Bspw. könnte ein solcher Link so aussehen:
Code:
http://www.blablabla.de/bestaetigen.php?entry=42&sc=9374639482940

Dann prüfst Du in deinem Statement, ob "entry" und "sc" in der DB vorkommen und schaltest sie frei.

PHP:
$sql = "SELECT * from login WHERE entry = ".$entry." AND sc = '".$sc."';

(die Bezeichnungen der Spalten kannst Du natürlich für deine Tabelle anpassen)

Noch ein Hinweis: aktuell sicherst Du die im Statement eingetragenen Variablen überhaupt nicht ab. Aus Sicherheitsgründen solltest Du mysql_escape_string() dafür verwenden. Also:

PHP:
$sql = "SELECT * from login WHERE email = '".mysql_escape_string($email)."'";
 
Zurück