Не понимаю, в чем собственно проблема. Что так не устраивает в коде?
1) mysql_* (За такое уже надо руки отрывать) .
2) Данные на прямую подставляются прямо в запрос без какой либо проверки.
3) Используется rand() , а не mt_rand() .
4) Логика и разметка свалена в кучу.
5) Для обновления одной записи аж 2 запроса. Автор скрипта видимо не знал, что одним запросом можно было обновить сразу оба поля.
6) Статический текст в двойных кавычках. Есть и нормально сформированная строка с одинарними кавычками и соединенная оператором конкатенации, но автор видимо писал от балды. Даже если уж и используете двойные кавычки, то подставляйте переменные через так называемые атомарные включения {$var}
7) Никаких проверок, спамь письмами хоть до посинения, или пока хостер не запретит отправку почты через mail()
8) В закомментированой строке
//$newmdPassword = base64_encode(md5($password, true)); ошибка, там должно быть
$newmdPassword = base64_encode(md5($login.$password, true));
9) Об оформлении кода я вообще молчу...