• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

UPDATE Funktion

ceddy17

Mitglied
Hallo Leute,

ich möchte, dass der Eingeloggte sein Username ändern kann.

Datenbankkonstruktion:

login
-------------------------
id | user | ...
1 | Frank | ...
usw.
---------------------


Nun hab ich im Script
PHP:
                 $usernamealt = $_SESSION["username"];
                 $usernameneu = $_POST["username"];

$verbindung = mysql_connect("localhost", "rookie-cup", "*********")
or die ("Fehler im System");

mysql_select_db("rookie-cup")
or die ("Verbindung ist schief gelaufen..");

$abfrage = "SELECT user FROM login";
$ergebnis = mysql_query($abfrage);

while($row = mysql_fetch_object($ergebnis))
{

if($_POST['submit'] == "Ändern"){
$sql = "
    UPDATE
        login
    SET
       user = $usernameneu
    WHERE
        user = $usernamealt
    ";
echo "Username erfolgreich geändert!";

if (mysql_query($sql)) {
}
else {
    die(mysql_error());
}
}
}

Mein HTML

HTML:
<form method="post" action="aendern2.php">
            <tr><td>Aktueller Username:</td><td> <?php echo $_SESSION["username"]; ?></td></tr>
            <tr><td>Neuer Username: </td><td><input type="text" size="10" name="username"></td></tr>
            </table>
            <input type="submit" value="&Auml;ndern">
            </form>



Nun jetzt funktioniert es nicht.... Liegt es an den
PHP:
UPDATE
        login
    SET
       user = $usernameneu
    WHERE
        user = $usernamealt
???

Die beiden Variablen stimmen hab es schon ausprobiert


Danke für die Hilfe
 
Nun jetzt funktioniert es nicht....
Das ist keine Problembeschreibung! :( Fehlermeldung?

Und wozu brauchst du da die Schleife???

Richtig debuggen

1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
3. Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
4. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
5. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
6. Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
7. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.
 
Das ist keine Problembeschreibung! :( Fehlermeldung?
Keine Fehlermeldung er zeigt nichts an...

Und wozu brauchst du da die Schleife???
Ich hab schonmal so etwas ähnliches gehabt und hab dann einfach nur das kopiert und hier eingefügt. Die Schleife brauchte ich da halt...

2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
Hab ich gemacht. Jetzt sagt er folgendes:
Deprecated: mysql_select_db() [function.mysql-select-db]: The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /users/rookie-cup/www/Login/aendern2.php on line 100

Wenn ich das mysql_select_db("rookie-cup")
umändere auf mysqli_select_db("rookie-cup")
Sagt er mysqli_select_db() expects exactly 2 parameters, 1 given in /users/rookie-cup/www/Login/aendern2.php on line 100
 
Die Schleife brauchte ich da halt...
Quatsch!
Ungetestet:
PHP:
if (isset($_SESSION["username"]) && isset($_POST["username"]))
{
   $username = trim($_POST["username"]);
  
   if (strlen($username))
   {
      $link = mysqli_connect("host", "user", "passwort", "datenbankname")
          or die("MySQL-Error " . mysqli_error($link));
      
      $query = "Update
                   `login`
                 set
                   `user`='" . mysqli_real_escape_string($link, $username) . "'
                 where
                   `user`='" . mysqli_real_escape_string($link, $_SESSION["username"]) . "'";
  
      mysqli_query($link,, $query)
         or die ("MySQL-Error: " . mysqli_error($link));
     
      if (mysqli_affected_rows($link))
         echo "Username erfolgreich ge&auml;ndert!";
      else
         echo "Username nicht ge&auml;ndert!";
   }
   else
     echo "Keinen Usernamen eingegeben";
}
 
Das Lesen der Doku ist nicht gesundheitsgefährdend! Siehe http://de1.php.net/manual/de/mysqli.select-db.php
Danke!

Jetzt hab ich Schritt 5 auch erledigt --> $usernamealt und $usernameneu lassen sich richtig anzeigen.

Nun da er jetzt keine Fehler mehr anzeigt muss ich jetzt wohl Schritt 8 machen... Er ändert immer noch nicht die Tabelle :( Er zeigt einfach nichts an... (bzw. zeigt er an: Kein Datenbankeintrag)

PHP:
if($_POST['submit'] == "&Auml;ndern"){
$sql = "
    UPDATE
        login
    SET
       user = $usernameneu
    WHERE
        user = $usernamealt
    ";
echo "Username erfolgreich ge&auml;ndert!";

if (mysql_query($sql)) {
}
else {
    die(mysql_error());

}
} else {
echo "Kein Datenbankeintrag";
}

Bei deinem Script zeigt er sehr viel an: NICHTS :(
 
Ähm, ich hab' dir eine Lösung schon geschrieben.

Und vermutlich wird das falsch sein:

if($_POST['submit'] == "&Auml;ndern")
 
Du solltest aber trotzdem meine Lösung nehmen, weil bei dir noch Macken drin sind.
 
ceddy könntest du uns einen Link zu deiner Seite geben? Ich würde dir gerne deine Datenbank kaputt machen. :-D
Höre besser auf bdt600, wenn er sagt das du seinen code unbedingt nehmen musst. Auch wenn der mehr Sonderzeichen enthält die dich evtl verwirren. :)
 
ceddy könntest du uns einen Link zu deiner Seite geben? Ich würde dir gerne deine Datenbank kaputt machen. :-D
Höre besser auf bdt600, wenn er sagt das du seinen code unbedingt nehmen musst. Auch wenn der mehr Sonderzeichen enthält die dich evtl verwirren. :)
OK, mache ich
Mit dem Username ändern geht jetzt ;)

Jetzt probiere ich es mit dem Passwort und es geht nicht WIESO?

PHP:
 $username = trim($_SESSION["username"]);
  $passwort = trim($_POST["passwort"]);
   $wdh = trim($_POST["wdh"]);

   if ($passwort != $wdh) {
   echo "Die Passw&ouml;rter stimmen nicht &uuml;berein. <a href='aendern.php'>zur&uuml;ck</a>";
   } else {
              
if (isset($_POST["passwort"]))
{
   if (strlen($passwort))
   {
      $link = mysqli_connect("localhost", "rookie-cup", "***********", "rookie-cup")
          or die("MySQL-Error " . mysqli_error($link));
  
      $query = "Update
                  `login`
                set
                  `passwort`='" . mysqli_real_escape_string($link, $_POST["passwort"]) . "'
                where
                  `user`='" . mysqli_real_escape_string($link, $username) . "'";
      mysqli_query($link, $query)
         or die ("MySQL-Error: " . mysqli_error($link));
  
      if (mysqli_affected_rows($link))
         echo "Passwort erfolgreich ge&auml;ndert! Ab den n&auml;chsten Login gilt das neue Passwort!";
      else
         echo "Passwort nicht ge&auml;ndert!";
   }
   else
     echo "Keinen Passwort eingegeben";
}
}
Er gibt keine Fehler aus und sagt nur: Passwort nicht geändert... WARUM :(o_O
 
Zuletzt bearbeitet:
Ich gehe mal eben die Theorie durch, wie ich so ein System bauen würde.


In meiner Session sind User daten gespeichert die ich öfter brauche.
Z.b. die ID und der Name des Users.

Wenn ich jetzt den Benutzernamen ändern will, gebe ich dem Benutzer ein Formular welches er ausfüllt.
Das Feld für den neuen benutzernamen nenne ich einfach mal 'new_username'.
Wenn ein formular abgeschickt wurde kontrolliere ich zuerst ob ich gerade einen user in meiner session habe. (*)
Wenn ja, (vergessen wir mal kurz XSS sicherheitsmaßnahmen) frage ich erstmal die datenbank ob es den neuen benutzernamen schon gibt.
wenn nein, sage ich meiner datenbank das sie den benutzer eintrag mit der ID meines aktuellen benutzers updaten soll und den benutzernamen auf 'new_username' ändern soll.

Wenn ich jetzt das passwort ändern will, muss mein user sein aktuelles passwort einmal angeben in meinem formular und das neue passwort 2 mal.
So wissen wir, dass es wirklich der benutzer ist und können ein kleinen wenig was gegen session hijacking unternehmen, falls es schon dazu gekommen sein sollte.
Außerdem können wir dem benutzer nun sagen, falls er einen schreibfehler gemacht hat. Wäre ja blöd, wenn der benutzer sein passwort auf ein unbekanntes ändert.
nun speichern wir das neue passwort wieder anhand der ID des benutzers in die datenbank.

Natürlich sind all unsere passwörter ungefähr so verschlüsselt.

PHP:
$sPassword = sha1('aithexi7nahGhietaip7Aitoo0eiR8ee' . $_POST['password'] . 'ueba6quohh3aiCae9gaeveiz1agiex3k');

Damit niemand etwas mit unseren hashes anfangen kann, falls er sie einmal in die finger bekommt.

PS: Wenn ein UPDATE befehl einen eintrag auf das gleiche ändern soll, was schon drin steht, sagt die affected rows funktion, dass ncihts geändert wurde. ;)
 
Zurück
Oben