Take the 2-minute tour ×
Code Review Stack Exchange is a question and answer site for peer programmer code reviews. It's 100% free, no registration required.

I've created this PHP script to print a batch of usernames with encrypted passwords locally on my computer because the user/pass format is always the same.

username = username

password = username + "admin"

example = homer / homeradmin

Then paste them into two different .htpasswd file and upload to an public Apache server to password-protect a directory and a directory within it.

Is there a better way to write the code below?

<?php
// Password to be encrypted for a .htpasswd file
$user1 = 'admin';
$user2 = 'g';
$user3 = 'homer';
$user4 = 'marge';
$user5 = 'bart';
$user6 = 'lisa';
$user7 = 'maggie';
$user8 = 'dog';


//Admin
$admin1 = 'admin';
$admin2 = '23!bseEsF@';
$admin3 = 'homeradmin';
$admin4 = 'margeadmin';
$admin5 = 'bartadmin';
$admin6 = 'lisaadmin';
$admin7 = 'maggieadmin';
$admin8 = 'dogadmin';

// Encrypt password
$pass1 = crypt($user1, base64_encode($user1));
$pass2 = crypt($user2, base64_encode($user2));
$pass3 = crypt($user3, base64_encode($user3));
$pass4 = crypt($user4, base64_encode($user4));
$pass5 = crypt($user5, base64_encode($user5));
$pass6 = crypt($user6, base64_encode($user6));
$pass7 = crypt($user7, base64_encode($user7));
$pass8 = crypt($user8, base64_encode($user8));


$adminpass1 = crypt($admin1, base64_encode($admin1));
$adminpass2 = crypt($admin2, base64_encode($admin2));
$adminpass3 = crypt($admin3, base64_encode($admin3));
$adminpass4 = crypt($admin4, base64_encode($admin4));
$adminpass5 = crypt($admin5, base64_encode($admin5));
$adminpass6 = crypt($admin6, base64_encode($admin6));
$adminpass7 = crypt($admin7, base64_encode($admin7));
$adminpass8 = crypt($admin8, base64_encode($admin8));
?>

<!doctype html>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  <title>Encrypt</title>
  <meta name="viewport" content="width=device-width">
  <head>
</head>
<body>

<p>
<?php
// Print encrypted password
echo $user1 . ":" . $pass1 . "<br/>";
echo $user2 . ":" . $pass2 . "<br/>";
echo $user3 . ":" . $pass3 . "<br/>";
echo $user4 . ":" . $pass4 . "<br/>";
echo $user5 . ":" . $pass5 . "<br/>";
echo $user6 . ":" . $pass6 . "<br/>";
echo $user7 . ":" . $pass7 . "<br/>";
echo $user8 . ":" . $pass8 . "<br/>";
?>
</p>

<p>
<?php
echo $admin1 . ":" . $adminpass1 . "<br/>";
echo $admin2 . ":" . $adminpass2 . "<br/>";
echo $admin3 . ":" . $adminpass3 . "<br/>";
echo $admin4 . ":" . $adminpass4 . "<br/>";
echo $admin5 . ":" . $adminpass5 . "<br/>";
echo $admin6 . ":" . $adminpass6 . "<br/>";
echo $admin7 . ":" . $adminpass7 . "<br/>";
echo $admin8 . ":" . $adminpass8 . "<br/>";
?>
</p>

</body>
</html>
share|improve this question
1  
this is off-topic for this site in that it is asking for code to be written, we don't do that here. –  Malachi Dec 26 '13 at 18:30
    
@Malachi This question seems to just be written differently. I believe the existing code here works and that it is desperately in need for a review. I interpret the question as "Is there a way I can make this better, with less code?" –  Simon André Forsberg Dec 26 '13 at 19:18
    
I don't see any traces of the .htaccess stuff though, and we won't help you write that, @Conor. I hope someone will help you write the existing code in a better way. –  Simon André Forsberg Dec 26 '13 at 19:19
1  
@SimonAndréForsberg: If so, it could be edited to reflect that. As it's worded, it sounds like a request for code. –  Jamal Dec 26 '13 at 19:22
1  
@SimonAndréForsberg I have the .htaccess files already pointed to these .htpasswd files on the server. Everything works fine, just need to be pointed in the right direction on how to write this code more efficiently. –  Conor Dec 26 '13 at 19:33

1 Answer 1

up vote 2 down vote accepted

the first thing that came to my mind to make this cleaner was an array or rather several arrays.

maybe something like this:

$user = array('admin','g','homer','marge','bart','lisa','maggie','dog');
$admin = array('admin','23!bseEsF@','homeradmin','margeadmin','bartadmin','maggieadmin','dogadmin');

$password = array(8); //my syntax may be wrong here
$adminPassword = array(8); //my syntax may be wrong here

for ($x=0; $x < count($user); x$++)
{
    $password[$x] = crypt($user[$x], base64_encode($user[$x]));
    $adminPass[$x] = crypt($admin[$x], base64_encode($admin[$x]));
}

And then your Echo's would look like this.

echo $user1 . ":" . $pass1 . "<br/>";
for ($y=0; $y < count($user); $y++)
{
    echo $user[$y] . ":" . $pass[$y] . "<br/>";
}
for ($z=0; $z < count($admin); $z++)
{
    echo $admin[$z] . ":" . $adminPass[$z] . "<br/>";
}

The only way that this works is if all the arrays are the same length and arrays in PHP are base 0. otherwise you have to change the for declarations a little bit.


Again I say that my Syntax may not be perfect or even well formed, but this is much cleaner than what you have.

Syntax not Guaranteed

share|improve this answer
1  
Thanks @Malachi! –  Conor Dec 27 '13 at 18:32
    
@Conor, your welcome. having them in an array really helps. but you have to make sure they are in the right order –  Malachi Dec 27 '13 at 18:59
    
@Conor, don't forget to upvote, and eventually accept an answer –  Malachi Dec 27 '13 at 19:17

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.