1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

MySQL| Rückgabewert bei UPDATE

Dieses Thema im Forum "PHP & Co." wurde erstellt von .holger, 07.03.08.

  1. .holger

    .holger Geflammter Kardinal

    Dabei seit:
    13.09.04
    Beiträge:
    9.117
    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
     
  2. Slashwalker

    Slashwalker Winterbanana

    Dabei seit:
    15.05.06
    Beiträge:
    2.190
    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.
     
  3. AgentSmith

    AgentSmith Hochzeitsapfel

    Dabei seit:
    15.07.07
    Beiträge:
    9.361
    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?
     
  4. raz!el

    raz!el Jamba

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

    mysql_query() gibt true bzw. false zurück
     
  5. .holger

    .holger Geflammter Kardinal

    Dabei seit:
    13.09.04
    Beiträge:
    9.117
    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.
     
  6. raz!el

    raz!el Jamba

    Dabei seit:
    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?
     
  7. drok

    drok Klarapfel

    Dabei seit:
    02.06.07
    Beiträge:
    278
    Sollte mit mysql_affected_rows wunderprima funktionieren ;)

    _____

    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.
     

Diese Seite empfehlen