Martin Linden: md5 String wird nicht neu gesetzt

Hallo,
in meiner Adress Datenbank möchte ich zur erkennung der einzelnen Adressen Name, vorname, E-mail adresse und die ID per MD5 verschlüsseln lassen. Dies soll natürlich nur dort geschehen, wo nicht schon eine Verschlüsselung besteht.
Wenn ich nun das skript durchlafen lasse, dann steht allerdings in jeder Zeile nachher der selbe MD5 Code.
allerdings wird mir per Echo am ende der While schleife immer der zur jeweiligen Zeile gehörende Name herausgegeben.
Kann es sein, dass die den String noch irgendwie löschen muss, und wenn ja wie??

Hier der quellcode

mysql_select_db($dbname)
  or die("<br>Konnte nicht zur Datenbank verbinden!");
  $abfrage = "SELECT * FROM $tabelle WHERE bestimmungwer LIKE ''";
  $ergebnis = mysql_query($abfrage);

while($row = mysql_fetch_object($ergebnis))

{
$vorname = $row->vorname;
$nachname = $row->nachname;
$id = $row->id;
$email = $row->emailuser;

$string = '$vorname$nachname$id$email';
$erk = md5($string);

$aendern = "UPDATE $tabelle Set bestimmungwer = '$erk' WHERE id = '$id'";

$update = mysql_query($aendern);

echo ("$vorname $nachname $id $email $erk <br>");

}

mysql_close($sql);
?>

Herzlichen dank schon im Vorraus
Martin

  1. in meiner Adress Datenbank möchte ich zur erkennung der einzelnen Adressen Name, vorname, E-mail adresse und die ID per MD5 verschlüsseln lassen. Dies soll natürlich nur dort geschehen, wo nicht schon eine Verschlüsselung besteht.
    Wenn ich nun das skript durchlafen lasse, dann steht allerdings in jeder Zeile nachher der selbe MD5 Code.

    Die einfache Lösung wäre natürlich, das alles MySQL zu überlassen:

    update tabelle set bestimmungwer = md5(concat(vorname,nachname,blabla)) where bestimmungwer is null; (oder meinetwegen auch 'where bestimmungwer=""')

    Supereinfach wäre es, MySQL eindeutige IDs selber vergeben zu lassen, indem eine Spalte mit AUTO_INCREMENT versehen wird.

    Ein Blick in die Anleitung ist manchmal sehr interessant...

    1. Hallo,
      Also das hat bei mir das selbe Ergebnis gebracht.
      Die leeren Felder wurden zwar Ge UPDatet, aber alle mit der selben Verschlüsselung.

      Hier der veränderte Quelltext.

      while($row = mysql_fetch_object($ergebnis))

      {
      $vorname = $row->vorname;
      $nachname = $row->nachname;
      $id = $row->id;
      $email = $row->emailuser;

      $string = '$vorname$nachname$id$email';
      $erk = md5($string);

      //$aendern = "UPDATE $tabelle Set bestimmungwer = '$erk' WHERE id = '$id'";

      $aendern = "UPDATE $tabelle Set bestimmungwer = md5(concat(vorname,nachname,email,id)) WHERE bestimmungwer = '$id'";

      $update = mysql_query($aendern);

      echo ("$vorname $nachname $id $email $erk <br>");

      P.S.
      ist doch klar dass ich ein AUTO_INCREMENT  ID Feld habe

      Gruß
      Martin

      1. Also das hat bei mir das selbe Ergebnis gebracht.

        Hier der veränderte Quelltext.

        while($row = mysql_fetch_object($ergebnis))

        {
        $vorname = $row->vorname;
        $nachname = $row->nachname;
        $id = $row->id;
        $email = $row->emailuser;

        $string = '$vorname$nachname$id$email';
        $erk = md5($string);
        $aendern = "UPDATE $tabelle Set bestimmungwer = md5(concat(vorname,nachname,email,id)) WHERE bestimmungwer = '$id'";

        $update = mysql_query($aendern);

        Aua :> Dir ist nicht aufgefallen, dass das ganze Geraffel mit $vorname etc überflüssig ist, weil es nicht mehr im SQL-Befehl auftaucht? Und davon, dass bestimmungwer gleich $id sein soll, schrieb ich nichts.

        1. Dein Quelltext sollte jetzt *insgesamt* so aussehen:

        if (! mysql_query("UPDATE $tabelle Set bestimmungwer = md5(concat(vorname,nachname,email,id)) WHERE bestimmungwer = ''")) {
            echo "Update-Fehler: ".mysql_error();
        }

        Keine Zeile mehr.

        2. Für den ersten Durchlauf muss der where-Teil weg, damit einmalig alle Einträge die richtigen Daten bekommen.

        ist doch klar dass ich ein AUTO_INCREMENT  ID Feld habe

        Wozu brauchst Du dann noch obendrauf eine md5-Summe, wenn die Spalte id schon eindeutig ist? Eindeutiger als eindeutig geht es nicht, theoretisch wird es im Gegenteil eher schlimmer.

      2. Hello,

        Hallo,
        Also das hat bei mir das selbe Ergebnis gebracht.
        Die leeren Felder wurden zwar Ge UPDatet, aber alle mit der selben Verschlüsselung.

        Hier der veränderte Quelltext.

        while($row = mysql_fetch_object($ergebnis))

        {
        $vorname = $row->vorname;
        $nachname = $row->nachname;
        $id = $row->id;
        $email = $row->emailuser;

        $string = '$vorname$nachname$id$email';    ###### hier ist der Fehler ######
        $erk = md5($string);

        //$aendern = "UPDATE $tabelle Set bestimmungwer = '$erk' WHERE id = '$id'";

        Lies Dir nochmals das von MudGuard empfohlene Kapitel über Strings
        http://de.php.net/manual/de/language.types.string.php

        Harzliche Grüße aus http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
  2. Hi,

    Wenn ich nun das skript durchlafen lasse, dann steht allerdings in jeder Zeile nachher der selbe MD5 Code.

    Du verschlüsselst ja auch jedesmal denselben Text. Da muß derselbe Code bei rauskommen.

    $string = '$vorname$nachname$id$email';
    $erk = md5($string);

    Befasse Dich mit den Unterschieden von ' und " als Stringbegrenzern.

    cu,
    Andreas

    --
    MudGuard? Siehe http://www.Mud-Guard.de/
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.