Sprawdzasz, czy wartości post są ustawione dla hasła (które zawsze będą, ponieważ ten element formularza będzie zawsze przesyłany). Zamiast po prostu sprawdzać, czy te wartości są ustawione, upewnij się, że nie są one puste. użyj empty() Również podczas porównywania nie używaj słowa "AND" użyj operatora i "&&".
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>";}
}
Patrzę na zły fragment kodu. Powyższa rada to dobra rada, ale Twój problem jest tutaj:
Jeśli pola hasła są puste, to nigdy nie będą takie same, więc if ($oldpassword==$oldpassworddb)
zawsze oceni fałsz.
Wypróbuj
if ($oldpassword==$oldpassworddb && !empty($_POST['oldpassword']))