Passwort change [php-mysql]

03/03/2013 14:22 Online-Tube#1
Hallo,

ich habe ein kleines Problem. Bei registrieren, wir das passwort in md5 in die mysql datenbank gespeichert, in einer ganz normalen Tabelle. Das Passwort kann man sich in den Moment nicht aussuchen und es wird automatisch generiert und an die e-mail geschickt.

Nun möchte ich eine Funktion schreiben damit man das Passwort wieder ändern kann ich ein beliebiges.

Mein Code bisher:

PHP Code:
<?php
        
        
if($_REQUEST["Submit"]=="pwchange")
        {
                
$pwget="GET passwort FROM main Where id='$_SESSION['id']' ";
                
$altespw mysql_query($pwget);
                if(!
md5($_POST['oldpw']) == $altespw)
                {
                    echo 
'false';
                }
                else
                {
                
                
$sql="UPDATE main SET passwort ='$_POST['newpw']' WHERE id='$_SESSION['id']' ";
                
//echo $sql;
                
mysql_query($sql);
                
                }        
        }
        
?>
        <form action="" method="post">
        <div class="datagrid"><table><thead><tr><th>Altes Passwort</th><th>Neues Passwort</th></tr></thead>
        <tbody><tr><td><input type"text" name="oldpw" id="oldpw" class="round" maxlength="32" /><br /></td>
        <td><input type"text" name="newpw" id="newpw" class="round" maxlength="32" /><br /></td></tr></tbody><br />
        <div class="datagrid"><table><thead><tr><th></th></tr></thead><tbody><tr><td></td></tr></tbody></table></div><br />
        <div align="center"><input type="submit" name="pwchange" style="width:400px; height:350" value="Passwort ändern" /></div><br />
        </form>
Funktioniert leider nicht, was hgabe ich falsch gemacht?

Lg
03/03/2013 15:04 Rmark#2
so sollte es gehen:

PHP Code:

<?php   
          
        
if($_POST["Submit"]=="pwchange")   
        {   
        
$session_id $_SESSION['id'];
                 
//SELECT nicht GET 
                
$query_altespw mysql_query("SELECT `passwort` FROM `main` WHERE id='$session_id'");  
                
$result_altespw mysql_fetch_array($query_altespw);  
                
$altespw $result_altespw["passwort"];  
                
//das ! vor dem == um auf gleichheit zu prüfen 
                //!md5 ist für die funktion also wenn md5() false liefern würde 
                
if(md5($_POST['oldpw']) !== $altespw)   
                {   
                    echo 
'false';   
                }   
                else   
                {   
                
//mysql_real_escape_string schützt vor sql injection 
                
$newpw mysql_real_escape_string($_POST["newpw"]);
                
$newpw md5($newpw);
                
$update mysql_query("UPDATE `main` SET `passwort`='$newpw' WHERE id='$session_id'");   
                 if(
$update){ 
                 echo 
"true"
                 }
                  
                   
                }
        }
        
?>
SQL-Injection
03/03/2013 15:44 Mikesch01#3
Es gibt bei deinem Code einige Komplikationen mit ' und ".

Ebenso muss das neue PW auch mit md5 gespeichert werden.

Folgend zu lösen:
PHP Code:
<?php  
         
        
if($_POST["Submit"]=="pwchange")  
        {  
                 
//SELECT nicht GET
                
$query_altespw mysql_query("SELECT `passwort` FROM `main` WHERE id='".$_SESSION['id']."'"); 
                
$result_altespw mysql_fetch_assoc($query_altespw); 
                
$altespw $result_altespw["passwort"]; 
                
//das ! vor dem == um auf gleichheit zu prüfen
                //!md5 ist für die funktion also wenn md5() false liefern würde
                
if(md5($_POST['oldpw']) != $altespw)  
                {  
                    echo 
'false';  
                }  
                else  
                {  
                
//mysql_real_escape_string schützt vor sql injection
                
$newpw mysql_real_escape_string($_POST["newpw"]); 
                
$newpw md5($newpw);
                
$update mysql_query("UPDATE `main` SET `passwort`= '".$newpw."' WHERE id= '".$_SESSION['id']."'");  
                 if(
$update){
                 echo 
"true";
                 }
                 
                  
                }          
        }  
        
?>
03/03/2013 16:19 Online-Tube#4
Danke euch beiden, leider scheint das ganze nicht zu funktionieren.
Wenn ich auf den Button drücke, kommt weder true noch false.
Der Text verschwindet einfach und in der Datenbank tut sich auch nichts.
03/03/2013 16:30 Rmark#5
Versuch mal das. Eventuell kommt ein fehler. Wenn ja poste den mal.

PHP Code:
<?php   
          
        
if(isset($_POST["pwchange"]))   
        {
        
$session_id $_SESSION['id'];
                 
//SELECT nicht GET 
                
$query_altespw mysql_query("SELECT `passwort` FROM `main` WHERE id='$session_id'") OR die(mysql_error());  
                
$result_altespw mysql_fetch_array($query_altespw);  
                
$altespw $result_altespw["passwort"];  
                
//das ! vor dem == um auf gleichheit zu prüfen 
                //!md5 ist für die funktion also wenn md5() false liefern würde 
                
if(md5($_POST['oldpw']) !== $altespw)   
                {   
                    echo 
'false';   
                }   
                else   
                {   
                
//mysql_real_escape_string schützt vor sql injection 
                
$newpw mysql_real_escape_string($_POST["newpw"]);
                
$newpw md5($newpw);
                
$update mysql_query("UPDATE `main` SET `passwort`='$newpw' WHERE id='$session_id'") OR die(mysql_error());  
                 if(
$update){ 
                 echo 
"Passwort geändert"
                 }
                  else{echo 
"FEHLER";}
                   
                }
        }
        else{
        
?>
        <form action="#" method="post"> 
        <div class="datagrid"><table><thead><tr><th>Altes Passwort</th><th>Neues Passwort</th></tr></thead> 
        <tbody><tr><td><input type="text" name="oldpw" id="oldpw" class="round" maxlength="32" /><br /></td> 
        <td><input type="text" name="newpw" id="newpw" class="round" maxlength="32" /><br /></td></tr></tbody><br /> 
        <div class="datagrid"><table><thead><tr><th></th></tr></thead><tbody><tr><td></td></tr></tbody></table></div><br /> 
        <div align="center"><input type="submit" name="pwchange" style="width:400px; height:350" value="Passwort ändern" /></div><br /> 
        </form>
        <?php
        
}
        
?>
EDIT: Habs gerade mal bei mir ausprobiert und es funktioniert.
03/04/2013 19:06 Online-Tube#6
danke!