Autor Zpráva
Ajtak
Profil
Zdravím. Chtěl bych poradit, proč mě to pustí k uložení prázdného hesla? Kde mám chybu?

Díky mockrát
<?php

define('INCLUDE_CHECK',true);

require 'connect.php';
require 'functions.php';
// Those two files can be included only if INCLUDE_CHECK is defined


session_name('xxxx');
// Starting the session

session_set_cookie_params(2*7*24*60*60);
// Making the cookie live for 2 weeks

session_start();

if($_SESSION['id'] && !isset($_COOKIE['xxxx']) && !$_SESSION['rememberMe'])
{
    // If you are logged in, but you don't have the tzRemember cookie (browser restart)
    // and you have not checked the rememberMe checkbox:

    $_SESSION = array();
    session_destroy();
    
    // Destroy the session
}



?>

<meta http-equiv="content-type" content="text/html; charset=utf-8">
<!--                <xxxx>                -->
 <table border="0" cellspacing="3" cellpadding="3" align="center">
     <form method="post" action="".$self."">
     <tr>


     <td height=20px background="/colorbox/images/yellow.png" colspan="2" align="center"><font color="#ffffff">Změna hesla</font></td></tr>
             <tr><td colspan=2>     
<?php 
include 'connect.php';

   $username = protect($_POST['username']);
    $password = sha1($_POST['password']);
    $confirm =  sha1($_POST['passconf']);
    $email = protect($_POST['email']);
    $ip = $_SERVER["REMOTE_ADDR"];
    $datem = Date("j.m.Y - H:i:s", Time()); 
    $errors = array();

function protect($string){
    $string = mysql_real_escape_string($string);
    $string = strip_tags($string);
    $string = addslashes($string);
    return $string;
}
if(!$_POST['submit']){
echo "          </td></tr>                                              
                                                                    

     <tr><td>Heslo:</td><td><input type=\"password\" name=\"password\"></td></tr>
     <tr><td>Heslo znovu:</td><td><input type=\"password\" name=\"passconf\"></td></tr>

     <tr><td align=\"left\"><input type=\"submit\" name=\"submit\" value=\"Změnit\"></form></td>

  
  </table>  
            " ;
}else {
 
      
        if(!$password){
            $errors[] = "Heslo nebylo zadáno!";
        }
        if($password){
            if(!$confirm){
                $errors[] = "Ověřovací heslo nebylo zadáno!!";
            }
        }
      
      
   
        if($password && $confirm){
            if($password != $confirm){
                $errors[] = "Ále, chybička se vloudila :( - Neshoda hesel
                    </td></tr>                                              
                                                                    

     <tr><td>Heslo:</td><td><input type=\"password\" name=\"password\"></td></tr>
     <tr><td>Heslo znovu:</td><td><input type=\"password\" name=\"passconf\"></td></tr>

     <tr><td align=\"left\"><input type=\"submit\" name=\"submit\" value=\"Změnit\"></form></td>

  
  </table> 
                
                ";
            }
        }
        
      
  
        if(count($errors) > 0){
            foreach($errors AS $error){
                echo $error . "<br>\n";
            }
        }else {
        $ssn = $_SESSION['id'] ;
            $sql4 = "UPDATE `authme` SET `password` = '$password'  WHERE id = '$ssn' ";
            $res4 = mysql_query($sql4) or die(mysql_error());
            echo "<font align=\"center\">Změna hesla proběhla úspěšně.
            
            ";
        }
}      

?>
jenikkozak
Profil
Ověření existence hesla je nutné udělat před tím, než toto heslo (byď by šlo o prázdný řetězec) zahashuješ. Ten hash totiž vždy existuje, takže podmínka na řádku 77 nemůže být splněna.
Ajtak
Profil
Tak jsem ten hash odstranil, ale stejně bez úspěchu
<?php 
include 'connect.php';


function protect($string){
    $string = mysql_real_escape_string($string);
    $string = strip_tags($string);
    $string = addslashes($string);
    return $string;
}
if(!$_POST['submit']){
echo "          </td></tr>                                              
                                                                    

     <tr><td>Heslo:</td><td><input type=\"password\" name=\"password\"></td></tr>
     <tr><td>Heslo znovu:</td><td><input type=\"password\" name=\"passconf\"></td></tr>

     <tr><td align=\"left\"><input type=\"submit\" name=\"submit\" value=\"Změnit\"></form></td>

  
  </table>  
            " ;
}else {
 
      
        if(!$password){
            $errors[] = "Heslo nebylo zadáno!";
        }
        if($password){
            if(!$confirm){
                $errors[] = "Ověřovací heslo nebylo zadáno!!";
            }
        }
      

    $errors = array();
   
   
        if($password && $confirm){
            if($password != $confirm){
                $errors[] = "Ále, chybička se vloudila :( - Neshoda hesel
                    </td></tr>                                              
                                                                    

     <tr><td>Heslo:</td><td><input type=\"password\" name=\"password\"></td></tr>
     <tr><td>Heslo znovu:</td><td><input type=\"password\" name=\"passconf\"></td></tr>

     <tr><td align=\"left\"><input type=\"submit\" name=\"submit\" value=\"Změnit\"></form></td>

  
  </table> 
                
                ";
            }
        }
        
      
  
        if(count($errors) > 0){
            foreach($errors AS $error){
                echo $error . "<br>\n";
            }
        }else {
        $ssn = $_SESSION['id'] ;
            $sql4 = "UPDATE `authme` SET `password` = '$password'  WHERE id = '$ssn' ";
            $res4 = mysql_query($sql4) or die(mysql_error());
            echo "<font align=\"center\">Změna hesla proběhla úspěšně.
            
            ";
        }
}      

?>
jenikkozak
Profil
Ajtak:
V pozměněném skriptu spoléháš na zapnuté register globals, což není dobrá volba.
Ajtak
Profil
Tak, prosím o upravení kódu, jak toto vyřešit. Posílat heslo bez sha1 na způsob $_POST['password'] nechci. Díky za pomoc
jenikkozak
Profil
1) Ověřit, zda heslo není špatně, můžeš pomocí zápisu if(isset($_POST["password"]) AND trim($_POST["password"])!=""){/*heslo je vyplněno*/}.
2) Přepsat názvy proměnných přejatých z formuláře tak, aby odkazovaly na položku pole, tedy změnit např. $password za $_POST["password"] zvládneš jistě sám.
3) V HTML se ti kříží tagy. Nemůžeš uzavírat <form> uvnitř buňky, když uvnitř této buňky formulář nezačíná.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: