Webdesign in Siegen

Passwort ändern

Fragen zum Thema PHP können hier gestellt werden

Moderator: Basti

Passwort ändern

Beitragvon =Max= am 12.01.2008, 20:44

Hallo,

für mein - hier schon bekanntes xD - Community Script habe ich, damit User ihr Passwort ändern können, versucht, ein Passwort ändern-Script zu machen. Habe das ganze erst alleine versucht, aber nun brauche ich doch die Hilfe von tollen Scriptern von DW XD. Also mein Code:
Code: Alles auswählen
<?php
error_reporting(E_ALL);
if(angemeldet() == true) {

   if(empty($_POST['altpassword']) AND empty($_POST['newpassword']) AND empty($_POST['newpassword2'])) {

      if(empty($_POST['altpassword']) OR empty($_POST['newpassword]') OR empty('$_POST[newpassword2]') {

echo '<form action="index.php?panel=16" method="post">
Altes Passwort:<br>
<input type="password" name="altpassword" size="20"><br>
Neues Passwort:<br>
<input type="password" name="newpassword" size="20"><br>
Neues Passwort wiederholen:<br>
<input type="password" name="newspassword2" size="20">';
echo "<input type='hidden' name='username' value='$_SESSION[benutzername]'>";
echo '<br>
<input type="submit" name="submit" value="Passwort ändern" class="submitreg2">
</form>';

         } else {
      echo "Du hast nicht alle Felder ausgefüllt!";
      echo "<br>";
      echo '<a href="index.php?panel=16">Zurück</a>';
   
      
}
      } else {
$altpassword = md5($_POST[altpassword]);
$newpassword = md5($_POST[newpassword]);
$newpassword2 = md5($_POST[newpassword2]);
$username = $_POST['username'];

    $sql = "SELECT * FROM tbl_benutzer WHERE benutzername='";
      $result = mysql_query($sql3);
     
if (!$result) {
    echo "Anfrage ($sql) konnte nicht ausgeführt werden : " . mysql_error();
    exit;
}

while ($row = mysql_fetch_assoc($result)) {
if($altpassword == $row[kennwort]) {
   if($newpassword == $newpassword2) {
      $sql2 = "UPDATE tbl_benutzer SET kennwort='$newpassword' WHERE benutzername = '$username'";

      $result2 = mysql_query($sql2);
     
      if (!$result2) {
      echo "Anfrage ($sql2) konnte nicht ausgeführt werden : " . mysql_error();
      exit;
      }
while ($row2 = mysql_fetch_assoc($result2)) {
Dein Passwort wurde erfolgreich geändert!
}
mysql_free_result($result2);
   } else {

      echo "Dein neues Passwort, und die Wiederholung des Passworts stimmen nicht überein!";
      echo "<br>";
      echo '<a href="index.php?panel=16">Zurück</a>';
} else {
      echo "Dein altes Passwort stimmt nicht mit deiner Angabe ein!";
      echo "<br>";
      echo '<a href="index.php?panel=16">Zurück</a>';
}
mysql_free_result($result);


   } else {

      echo "Du musst angemeldet sein, um diese Seite betreten zu dürfen";
}


?>


Was könnte da falsch sein, ich habe den Code schon paar mal durchgeschaut aber nichts gefunden. Vielleicht habe ich allgemein das mit Passwort ändern falsch verstanden ;) Es wird auf jedenfall nichts angezeigt - nicht einmal ein Fehler

Lg,
Max
=Max=
Mitglied
 
Beiträge: 428
Registriert: 14.01.2007

Re: Passwort ändern

Beitragvon Basti am 12.01.2008, 21:19

Hi,

was genau funktioniert denn nicht? Du solltest mal beim Erstellen deiner Beiträge darauf achten zu sagen, was nicht funktioniert und eventuelle Fehlermeldungen und Zeilenangaben machen, denn einfach ein Script ohne Anhaltspunkt auf einen Fehler zu durchsuchen ist für uns wirklich mehr Arbeit als es dir machen würde.

Davon abgesehen ist dein Quelltext total unübersichtlich, es fehlen Kommentare und eine richtige Struktur mit Einrückungen etc.
Das macht es für uns unheimlich schwierig, überhaupt zu erkennen, was genau du mit den einzelnen Codeteilen machen möchtest.

Auf solche Sachen solltest du in Zukunft achten.

So, jetzt aber zu deinem Code. Ich habe ihn gerade versucht für dich einmal ordentlich aufzuschreiben und zu ordnen, aber leider ergibt der Code überhaupt keinen Sinn.

Als erstes fragst du ab, ob alle drei Werte leer sind, innerhalb dieser Klammer fragst du dann nochmal ab, ob nur einer der drei Werte leer ist. Wenn aber alle drei Werte leer sind ("UND" Verknüpfung), so ist auch mindestens einer der Werte leer und somit die "OR"-Verknüpfung auf jeden Fall wahr.

Im else-Teil machst du dann eine Abfrage, in der eine Variable vorkommt, die nirgends im Quelltext zu finden ist. Bei der Setzung deiner Anführungszeichen bei Variablen gibt es dann auch einige Fehler. Einige Klammern sind auch zu viel.

Ich habe jetzt dennoch mal versucht, das ganze richtig umzuschreiben so wie es vermutlich beabsichtigt war.
Du solltest dir aber wirklich mal alle PHP Grundlagen und einen richtigen Stil aneignen, da das hier wirklich keine komplizierten Sachen sind und mit allen nötigen Grundlagen schnell gelöst wären.

Code: Alles auswählen
<?php

error_reporting(E_ALL);

if(angemeldet() == true)
{
  // Formular anzeigen
  if(empty($_POST['altpassword']) OR empty($_POST['newpassword']) OR empty($_POST['newpassword2'])
  {
    echo <<<HEREDOC
           <form action="index.php?panel=16" method="post">
             Altes Passwort:<br />
             <input type="password" name="altpassword" size="20"><br />
             Neues Passwort:<br />
             <input type="password" name="newpassword" size="20"><br />
             Neues Passwort wiederholen:<br />
             <input type="password" name="newpassword2" size="20">';
             <input type="hidden" name="username" value="{$_SESSION[benutzername]}">
             <br />
             <input type="submit" name="submit" value="Passwort ändern" class="submitreg2">
           </form>
HEREDOC;
  }
  // Passwort ändern
  else {
    $altpassword = md5($_POST['altpassword']);
    $newpassword = md5($_POST['newpassword']);
    $newpassword2 = md5($_POST['newpassword2']);
    $username = $_POST['username'];

    // Benutzerdaten abrufen
    $sql = "SELECT * FROM tbl_benutzer WHERE benutzername='$username'";
    $result = mysql_query($sql);
     
    if (!$result)
    {
      echo "Anfrage ($sql) konnte nicht ausgeführt werden : " . mysql_error();
      exit;
    }

    $row = mysql_fetch_assoc($result);
   
    // altes Kennwort mit dem angegebenen vergleichen
    if($altpassword == $row['kennwort'])
    {
      // neue Passwörter auf Identität prüfen
      if($newpassword == $newpassword2)
      {
        // Passwort übernehmen
        $sql    = "UPDATE tbl_benutzer SET kennwort='$newpassword' WHERE benutzername='$username'";
        $result = mysql_query($sql);
     
        if (!$result) {
          echo "Anfrage ($sql) konnte nicht ausgeführt werden : " . mysql_error();
          exit;
        }
        else {
          echo 'Dein Passwort wurde erfolgreich geändert!';
        }
      }
      else {
        echo <<<HEREDOC
               Dein neues Passwort, und die Wiederholung des Passworts stimmen nicht überein!
               <br />
               <a href="index.php?panel=16">Zurück</a>
HEREDOC;
      }
    }
    else {
      echo <<<HEREDOC
             Dein altes Passwort stimmt nicht mit deiner Angabe ein!
             <br />
             <a href="index.php?panel=16">Zurück</a>
HEREDOC;
    }
     mysql_free_result($result);
  }
}
else {
  echo "Du musst angemeldet sein, um diese Seite betreten zu dürfen";
}

?>
Benutzeravatar
Basti
Moderator
 
Beiträge: 1902
Registriert: 15.06.2006
Wohnort: Rheinbreitbach

Re: Passwort ändern

Beitragvon Ingo am 12.01.2008, 22:07

Hoi.
Was die "Formalitäten' angeht, kann ich nur zustimmen - aus eigener Erfahrung:
Sauber einrücken, zusammengehörende Klammern untereinander, Kommentare setzen
und auf die 'Tüddelkes' (Anführungszeichen) achten. 8)
Zurück zur Sache: Wenn man noch einige Kleinigkeiten beiseite schafft, scheint
es erstmal zu laufen :) ; ausgehend von Bastis Version:

Code: Alles auswählen
  ...

  if(empty($_POST['altpassword']) OR empty($_POST['newpassword]') OR empty($_POST['newpassword2'])
  // das  ' hinter newpassword 1 nach links rücken

  ...

  Neues Passwort wiederholen:<br />
  <input type="password" name="newspassword2" size="20">';
  // ein s zuviel in new_s_password2

  ...

           </form>
HEREDOC;

    }      // <=== diese Klammer ist zuviel
  }
  // Passwort ändern

  ...

  $altpassword = md5($_POST['altpassword']);      // index besser in quotes
  $newpassword = md5($_POST['newpassword']);      // dito
  $newpassword2 = md5($_POST['newpassword2']);    // dito
   
Die beste Browserweiche ... sitzt zwischen den Ohren ;o]
Benutzeravatar
Ingo
Moderator
 
Beiträge: 625
Registriert: 01.04.2007
Wohnort: Neuss/NRW

Re: Passwort ändern

Beitragvon Basti am 13.01.2008, 00:24

Oh, gut dass noch jemand aufgepasst hat ;)

Das hatte ich wohl beim Ändern übersehen.

// edit: Habe die Fehler jetzt auch mal in meinem Beitrag berichtigt.
Benutzeravatar
Basti
Moderator
 
Beiträge: 1902
Registriert: 15.06.2006
Wohnort: Rheinbreitbach

Re: Passwort ändern

Beitragvon =Max= am 13.01.2008, 14:16

Es geht - leider - wieder nicht. Es wird auch keine Fehlermeldung ausgespuckt, sonst hätte ich sie ja schon angegebene. Es wird einfach alles was drunter kommt abgeschnitten. Ich denke wir sind uns einig, das da irgendwas nicht hinhaut. Vielleicht "versteht" de Server ja das mit dem alten Passwort überprüfen net so ganz, das ist das woran ich von anfang an gezweifelt habe...
=Max=
Mitglied
 
Beiträge: 428
Registriert: 14.01.2007

Re: Passwort ändern

Beitragvon Basti am 13.01.2008, 15:13

Dann debugge mal alle nötigen Variablen, also einfach alles auskommentieren und dann die Variablen einzeln per echo-Befehl ausgeben lassen.

So kannst du dann feststellen, ob alle Variablen richtig übergeben wurden und der Rest des Script funktionieren kann.
Benutzeravatar
Basti
Moderator
 
Beiträge: 1902
Registriert: 15.06.2006
Wohnort: Rheinbreitbach

Re: Passwort ändern

Beitragvon =Max= am 13.01.2008, 16:40

Da mein Code wirklich etwas kompliziert gestaltet ist, habe ich nun einen Code, der funktionieren müsste, aber es trotzdem nicht tut... Wenn er altes Passwort überprüfen soll, gibt er immer Passwort inkorrekt aus.

Code: Alles auswählen
<?php

// Überprüfen ob User angemeldet ist

if(angemeldet() == true)
{

  // Formular leer?
  if( !empty( $_POST['oldpass'] ) && !empty( $_POST['newpass'] ) && !empty( $_POST['newpasswh'] ) )

      // Passwort und passwort wiederholung gleich?
      if(  $_POST['newpass'] == $_POST[newpasswh]  )

      //Altes Passwort und neues Passwort gleich?
        if($_SESSION[kennwort] == md5($_POST[oldpass])) {
          $pwmd5 = md5( $_POST['newpass'] );

      // Datenbankeintragung
         $anfrage = "UPDATE tbl_benutzer SET kennwort = '$pwmd5' WHERE id = ".$_SESSION['benutzername']."";
         if( $ergebnis = mysql_query( $anfrage, $link ) )
           $msg = "Passwort wurde geändert.<br><br>";

         // Fehlermeldungen
           else $msg = "Fehler: ".mysql_error()."<br><br>";
       } else $msg = "Passwort inkorrekt!<br><br>";
      else $msg = "Passwort und Passwort Wiederholung stimmern nicht überein!<br><br>";
      // Formular
    echo '<h3 align="center">Passwort ändern</h3>';
    echo $msg;
    echo '<form name="chpw" action="index.php?panel=16" method="post">';
   
?><table align="center" class="smallfont">
  <tr>
    <td width="50%">Altes Passwort:</td>
   <td width="50%"><input type="password" name="oldpass" size="30"></td>
  </tr>
  <tr>
    <td width="50%">Neues Passwort:</td>
   <td width="50%"><input type="password" name="newpass" size="30"></td>
  </tr>
  <tr>
    <td width="50%">Passwort Wiederholung:</td>
   <td width="50%"><input type="password" name="newpasswh" size="30"></td>
  </tr>
</table><br><br>
<input type="submit" name="submit" value="Speichern">
</form>
<?
// Wenn nicht dann keine Ausgabe
} else {
   echo "Du bist nicht angemeldet und kannst somit diese Seite nicht betreten";
}
?>
=Max=
Mitglied
 
Beiträge: 428
Registriert: 14.01.2007

Re: Passwort ändern

Beitragvon Ingo am 13.01.2008, 19:02

Hi - das sieht doch schon deutlich lesbarer aus :thumbsup: .
Vllt. bringt es etwas, bei allen Array-Zugriffen den Index in Anführungszeichen zu setzen, also
statt $_SESSION[kennwort] eher $_SESSION['kennwort']. Mein Compiler meckert sonst immer
von wegen "use of undefined constant ...".
Ansonsten könntest du (nur zu Testzwecken) den Inhalt von $_SESSION und $_POST ausgeben
lassen, um zu sehen, ob vllt. unterwegs irgendetwas nicht angekommen ist oder anders aussieht
als erwartet. Die Ausgabe geht zum Beispiel mit var_dump(...):
Code: Alles auswählen
echo "<pre>";
var_dump($_SESSION);
var_dump($_POST);
echo "</pre>\n";
Die beste Browserweiche ... sitzt zwischen den Ohren ;o]
Benutzeravatar
Ingo
Moderator
 
Beiträge: 625
Registriert: 01.04.2007
Wohnort: Neuss/NRW


Zurück zu PHP

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast