Проверявате дали стойностите на публикацията са зададени за паролата (която винаги ще бъде, защото този елемент от формуляр винаги ще бъде изпратен). Вместо просто да проверявате дали тези стойности са зададени, уверете се, че не са празни. използвайте empty() Също така, когато правите сравнения, не използвайте думата "И", използвайте и оператора "&&".
if (!empty($_POST['repeatnewpassword']) && !empty($_POST['newpassword'])) {
if ($newpassword==$repeatnewpassword)
{
$querychange = mysql_query("UPDATE login SET password='$newpassword' WHERE username='$username'");
echo "<div class='successmate'><br><br><br><br><hr>Password has been changed!</hr></div><div class='successmate'><br><hr><br><h2><p><a href='index2.php'><br><br></a></p></h2></div>";
}
else {echo "<div class='results'>new password(s) dont match</div><div class='successmate'><br><br><h2><p><a href='changepassword.php'>try again?</a></p></h2></div>";}
}
Гледам грешната част от кода. Горният съвет е добър съвет, но вашият проблем е тук:
Ако полетата за парола са празни, те никога няма да бъдат същите, така че if ($oldpassword==$oldpassworddb)
винаги ще оценява false.
Опитайте
if ($oldpassword==$oldpassworddb && !empty($_POST['oldpassword']))