2017-02-28 43 views
-2

我有一个for循环与示例用户数组,我想md5的密码,但事情是,它哈希密码两次。我想只有一次密码md5($_POST[2]);for循环中的Md5 PHP

user([userid, username, password]); 

    $num_fields =3; 
    for ($y = 1; $y < $num_fields; $y++) { 
      $password = md5($_POST[2]); 
      $_POST[2] = $password; 
      } 

例输入user和输出

ee11cbb19052e40b07aac0ca060c23ee0d8d5cd06832b29560745fe4e1b941cf 

而不是

ee11cbb19052e40b07aac0ca060c23ee 

我的解决办法是

for ($y = 1; $y < $num_fields; $y++) { 
      $password = md5($_POST[2]); 
      $_POST[2] = $password; 
      return $_POST[2]; 
      } 

但我不想要return $_POST[2];并打破循环中的循环内插入mysql的目的。所以我的问题是,如何在没有返回的情况下在循环中执行md5并获得唯一的md5值?

+0

为什么在这里循环,并尝试使用散列而不是md5。 –

+3

'md5()'不再是**安全了,请使用'password_hash()'和'pasword_verify()'代替。 'md5()'这些天很容易解密。 – Nytrix

+0

@Nytrix这仅仅是为了学习的目的登录 –

回答

2

你不需要循环。你不使用$y变量。条件变量$num_fields使循环运行两次(对于$y等于1和2)。如果你需要一个循环出于某种原因,只是创建循环之前的MD5

user([userid, username, password]); 
$password = md5($_POST[2]); 
$_POST[2] = $password; 

UPDATE

这应该做你的期望。我将$y的初始化更改为0,因为当$num_fields设置为3时,它会使循环更加循环三次。但您可以从样本中看不到原因。

user([userid, username, password]); 

$password = md5($_POST[2]); 
$_POST[2] = $password; 
$num_fields = 3; 

for ($y = 0; $y < $num_fields; $y++) { 
    // Anything you wanted to loop 
} 

正如@nitrix所说,md5不再保存。但如果它只是为了学习如何创建登录项目或高安全性项目不需要,那么没关系。

+0

感谢工作很好 –

+0

@MarkValenzuela如果这个工程,请问,接受答案提供?这个网站是基于这个,你知道的。 –