Está verificando que los valores de publicación estén configurados para la contraseña (que siempre lo serán, porque ese elemento de formulario siempre se enviará). En lugar de simplemente verificar si esos valores están establecidos, asegúrese de que no estén vacíos. use vacío () Además, al hacer comparaciones no use la palabra "Y", use el operador "&&".
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>";}
}
Estoy mirando el trozo de código equivocado. El consejo anterior es un buen consejo, pero su problema está aquí:
Si los campos de la contraseña están vacíos, nunca serán los mismos, por lo que if ($oldpassword==$oldpassworddb)
siempre evaluará falso.
Prueba
if ($oldpassword==$oldpassworddb && !empty($_POST['oldpassword']))