Hashwert/Aktivierungslink - UPDATE Statement funktioniert nicht

Hashwert/Aktivierungslink - UPDATE Statement funktioniert nicht

am 30.12.2005 21:49:38 von Erik Hastens

Hallo,

ich habe ein Problem beim Erstellen einer Mitgliederverwaltung mit
erforderlicher Aktivierung neu angelegter Accounts.
Weiß zwar nicht, wie das üblicherweise gemacht wird, aber ich denke mir das
folgendermaßen:

Neues Mitglied registriert sich, wird mit Status 0 (inaktiv/vorläufig) in
die entsprechende MySQL-Tabelle (hier: rt_users) geschrieben. Gleichzeitig
wird zB vom Passwort o.ä. ein md5-Hash erzeugt und ebenfalls in den
Datensatz geschrieben (Spalte activationkey).

Der User bekommt nun eine Mail mit Aktivierungslink, der zB auf
http://.../acticate.php?a=598d4c200461b81522a332856
zeigt (a ist eben dieser Activationkey).

Im activate.php Script soll nun seinfach der Datensatz gesucht werden,
dessen Spalte activationkey mit der übergebenen Variable übereinstimmt und
in diesem Datensatz der Status auf 2 (aktiv) gesetzt werden.

Hierzu wird

$query = "UPDATE rt_users SET status=2 WHERE activationkey='$a'";
$result = mysql_db_query($dbname,$query) or die ("Fehler");
$num_rows = mysql_affected_rows();

ausgeführt.

Während das in meiner lokalen XAMPP Testumgebung funktioniert, funzt es bei
meinem Provider nicht. Es wird kein Fehler ausgegeben, sondern $num_rows ist
immer 0; d.h., so wie ich das sehe, schlägt die WHERE Bedingung fehl.
Offenbar hat $a für MySQL den Wert '598d4c200461b81522a332856', also mit den
beiden Hochkommata, aber wenn ich die weglasse, gibts einen Fehler und bei
doppelten Anführungszeichen auch.

Hat es mit den Variablentypen zu tun? Die übergebene Variable $a ist ja
sicher ein String; die Spalte activationkey in der MySQL-Tabelle ist
tinyint(5), ich habe es auch mit int und varchar versucht, alles mit
demselben Ergebnis.

Daß es lokal funktioniert, verwundert mich noch mehr. Kann es mit
unterschiedlichen Versionen zu tun haben? Lokal nutze ich PHP 5.0.4 und
MySQL 4.1.12-nt, bei meinem Provider gibts noch MySQL 3.23.49a/PHP 4.3.10.

Vielen Dank für das Lesen dieses langen Textes, habs kürzer nicht
hinbekommen ;o)

Erik

Re: Hashwert/Aktivierungslink - UPDATE Statement funktioniert nicht

am 30.12.2005 23:36:06 von Niels Braczek

Erik Hastens schrieb:

> $query = "UPDATE rt_users SET status=2 WHERE activationkey='$a'";

Zeigt var_dump($a) das, was du erwartest?

> $result = mysql_db_query($dbname,$query) or die ("Fehler");

mysql_db_query() ist seit 4.0.6 veraltet. Das ist schon *sehr* lange
her. Siehe http://de2.php.net/manual/en/function.mysql-db-query.php.

> $num_rows = mysql_affected_rows();

Hast du die UCN von relsqui at chiliahedron dot com auf der
entsprechenden Manualseite gelesen?

MfG
Niels

--
| http://www.kolleg.de · Das Portal der Kollegs in Deutschland |
| http://www.bsds.de · BSDS Braczek Software- und DatenSysteme |
| Webdesign · Webhosting · E-Commerce · Mambo Content Management |
`----------------------------------------------------------- -----´

Re: Hashwert/Aktivierungslink - UPDATE Statement funktioniert nicht

am 31.12.2005 08:36:01 von Helmut Chang

Erik Hastens schrieb:

> http://.../acticate.php?a=598d4c200461b81522a332856
> ...
> $query = "UPDATE rt_users SET status=2 WHERE activationkey='$a'";

mod_glaskoogle sagt:

11.20. Warum funktionieren meine Formulare nicht?


gruss, heli

Re: Hashwert/Aktivierungslink - UPDATE Statement funktioniert nicht

am 31.12.2005 11:15:41 von Erik Hastens

"Niels Braczek" wrote in message
news:dp4cla$78q$03$1@news.t-online.com...
> Erik Hastens schrieb:
>
>> $query = "UPDATE rt_users SET status=2 WHERE activationkey='$a'";
>
> Zeigt var_dump($a) das, was du erwartest?

Also vorweg, aus mir schleierhaften Gründen hat es heute beim nochmaligen
Test einwandfrei funktioniert wie erwartet - nachdem ich gestern zwei
Stunden vergeblich getestet habe. Also sei es irgendein Caching, irgendeine
Blockade bei mir oder die segensvolle Wirkung des Einmal-darüber-Schlafens,
anyway.

Dementsprechend gibt mir var_dump($a) heute genau das aus, was ich erwartet
habe ;o)

> mysql_db_query() ist seit 4.0.6 veraltet. Das ist schon *sehr* lange

Danke für den Hinweis, ich habe das schon umgestellt, allerdings warten da
doch noch einige Scripte auf Änderung ;o)

> Hast du die UCN von relsqui at chiliahedron dot com auf der
> entsprechenden Manualseite gelesen?

Nein, das werde ich nachher suchen (jetzt erstmal Silvestereinkauf).

Danke für die Hinweise.
Erik

Re: Hashwert/Aktivierungslink - UPDATE Statement funktioniert nicht

am 31.12.2005 11:21:11 von Erik Hastens

"Helmut Chang" wrote in message
news:41mqmuF1faltoU1@individual.net...
>
> 11.20. Warum funktionieren meine Formulare nicht?
>

Hm, also abgesehen davon, damein eigentliches Problem sich üner Nacht gelöst
hat (s.o.) ...

Register_Globals steht bei meinem Provider auf "On". Und in diesem Fall wird
muß ich die Variable doch über die URL übertragen, denn es wird ja kein
Formular verwendet und es besteht auch keine Session, sondern der User
klickt den Link aus einer E-Mail heraus.

Weiß ja nicht, ob es klügere Wege gibt, so eine Accountaktivierung
durchzuführen; es geht ja nur darum, sicherzustellen, daß sich niemand unter
fremder Mailadresse angemeldet hat.

Danke für die Antwort - guten Rutsch allen hier ;o)

Erik

Re: Hashwert/Aktivierungslink - UPDATE Statement funktioniert nicht

am 01.01.2006 12:51:24 von Matthias Esken

On Sat, 31 Dec 2005 11:21:11 +0100, Erik Hastens wrote:

> Register_Globals steht bei meinem Provider auf "On". Und in diesem Fall wird
> muß ich die Variable doch über die URL übertragen, denn es wird ja kein
> Formular verwendet und es besteht auch keine Session, sondern der User
> klickt den Link aus einer E-Mail heraus.

Das ist kein Grund, eine missbilligte Vorgehensweise fortzuführen.

Stell auf $_GET['a'] um und es kann dir egal sein ob PHP sauber
konfiguriert ist oder register_globals aktiviert wurde.

Gruß,
Matthias