• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

MySQL| Rückgabewert bei UPDATE

.holger

Borowitzky
Registriert
13.09.04
Beiträge
8.970
Moin moin,

ich habe ein kleines Problem bei einem Projekt (ja, AgentSmith, es geht um das Projekt):

Benutzer sollen sich anmelden können (das klappt auch wunderbar) nun sollen die Benutzer auch die Möglichkeit haben ein neues Passwort anzufordern, wenn das alte vergessen wird.

Dazu Update ich die MySQL Datenbank an dem Eintrag mit der angegebenen E-Mailadresse:

Code:
$neuespwd = neuespasswort(); // wird automatisch generiert
$mailto = $_POST['mail'];

$sql = "UPDATE ". 
"$benutzerdaten ".  // ist in einer anderen *.php Datei definiert
"SET ".
"Kennwort = '".md5($neuespwd)."' ".
"WHERE ". 
"(Email like '".$mailto."') LIMIT 1"; 

$result = mysql_query($sql);

Nun möchte ich gerne (was natürlich zweckmäßig ist) das neue Passwort an die Adresse schicken, was ja auch kein Problem wäre, wenn ich denn wüsste ob der UPDATE Vorgang geklappt hat. Dazu müsste der MySQL Befehl einen ordentlichen Rückgabewert (true oder eben false) liefern, ist aber nicht so. Das Ding liefert immer nur true zurück.

Ja, ich könnte hinterher (oder vorher) noch eine zweite Abfrage machen ob die E-Mailadresse überhaupt in der Datenbank existiert, das will ich aber nicht. Ich möchte das ganze gerne über eine (in Zahlen: 1) MySQL Abfrage lösen.

Ist das überhaupt möglich, oder komm ich um eine zweite Abfrage nicht herum?

Gruß Holger
 

Slashwalker

Winterbanana
Registriert
15.05.06
Beiträge
2.213
Ich würde auf jeden Fall eine zweite Abfrage machen. Damit kannst du dann den User auch informieren, wenn die Email falsch ist. Geht mir auch oft so, wenn ich ein PW vergessen habe, muss ich auch per trial & error versuchen, welche Email ich bei der Registrierung angegeben hatte. Außerdem würde ich nicht LIKE nehmen, denn die Emailadresse soll ja exakt die sein, die auch in der DB steht.
 

AgentSmith

Hochzeitsapfel
Registriert
15.07.07
Beiträge
9.304
omg.. DAS Projekt :oops: wtf!11!!1elf!11!!

Mhm.. blöde Frage - kannst du nicht mysql_affected_rows() aufrufen und dessen Rückgabewert nutzen, um nach dem UPDATE zu sehen, ob null (false) oder ein (true) Datensatz geändert wurden?
 

raz!el

Jamba
Registriert
06.05.06
Beiträge
57
einfacher ist
if (!mysql_query($sql)) {echo "query failed";}

mysql_query() gibt true bzw. false zurück
 

.holger

Borowitzky
Registriert
13.09.04
Beiträge
8.970
einfacher ist
if (!mysql_query($sql)) {echo "query failed";}

mysql_query() gibt true bzw. false zurück

dachte ich auch, ist aber nicht so. Jedenfalls liefert das in diesem Fall (bei Update) immer ein true zurück. Ist ja auch logisch, im query ist kein Fehler und der wird ausgeführt, es wird nur nichts geändert, weil kein Datensatz betroffen ist.

ich glaub ich mach das jetzt erstmal über die Doppelabfrage (1. ist die Emailadresse eigentlich vorhanden und 2. wenn vorhanden dann das Passwort ändern). Optimieren kann ich später immer noch.

@Slashwalker hab das like geändert.

Ich könnte noch ein zweites Feld machen, dass über den Benutzernamen das Passwort geändert wird. Ich könnte das Passwort auch erst ändern lassen, wenn der Vorgang per mail bestätigt wurde, wäre noch ne bessere Lösung, oder? Damit nicht irgendwer einfach ne Adresse/einen Benutzernamen eingibt und dadurch versucht das Passwort zu ändern - wäre zwar nicht schlimm, weil das Passwort ja nur an den Mailaccount geschickt wird, aber evtl. nervig, wenn da jemand meint sich einen Scherz erlauben zu müssen, oder?

Oh, ich hab so viele Ideen - dank meiner Klausuren aber soooo wenig Zeit.... verdammt.

Wenn das Projekt fertig, oder in einem vorzeigbaren Status ist, dann stell ich das hier natürlich vor.
 

raz!el

Jamba
Registriert
06.05.06
Beiträge
57
hast du keine unique id in der tabelle dass du einfach die id mitschickst und sie so genau ansprechen kannst?
 

drok

Klarapfel
Registriert
02.06.07
Beiträge
278
Sollte mit mysql_affected_rows wunderprima funktionieren ;)

Mhm.. blöde Frage - kannst du nicht mysql_affected_rows() aufrufen und dessen Rückgabewert nutzen, um nach dem UPDATE zu sehen, ob null (false) oder ein (true) Datensatz geändert wurden?

_____

hast du keine unique id in der tabelle dass du einfach die id mitschickst und sie so genau ansprechen kannst?

Wäre wahrscheinlich zu unsicher.
Dann lieber eine Zufallszahl generieren lassen, dieser Zahl die ID zuweisen und nach einer bestimmten Zeit (oder nach erfolgreicher Änderung) wieder löschen bzw als ungültig markieren.