Öncelikle kullanıcıyı veritabanına kayıt ederken, bir gizli soru seçmesini isteyeceksin tabi ki cevabıda olacak.

Veritabanında normal üye bilgilerinin yanında kişinin seçtiği soru ve cevabı da yer alacak.

Şimdi gelelim sifre-degistir.php
Öncelikle bu sayfada şu şekilde olacak ;
Ben direk php kısmını yapıyorum ve html kısmının yapıldığını varsayıyorum. Bunun yanında salt olarak yazıyorum güvenlik önlemlerini vs. aldığını varsayıyorum. Bunun yanında kullanıcının da giriş yapıldığı sırada bir session oluşturulduğunu düşünüyorum.
$uye_id = $_SESSION["uyeid"]
$gizlisoru = $_POST["gizlisoru"];
$gizlicevap = $_POST["gizlicevap"];
$yenisifre = $_POST["yenisifre"];

$sor = mysql_query("select * from tabloadi where gizlisoru='$gizlisoru' and gizlicevap='$gizlicevap' and id='$uye_id'");
if(mysql_affected_rows()) {
// Sorgu doğru dönerse burada ki işlemler yapılacak.
$guncelle = mysql_query("update tablo_adi set sifre='$yenisifre' where id='$uye_id'");
if($guncelle) {
echo "Şifre Başarıyla Değiştirildi.";
}else {
echo "Şifre Değiştirme Başarısız oldu.";
}
}else {
echo "Gizli soru veya cevap yanlış.";
}
Basitçe genel mantığı anlatmaya çalıştım. Yazım hataları vs. olabilir onları dikkate almayınız