Zrobiłem coś takiego, rozwiązanie amatorskie, ale działa

rejestrujesz usera z domyślna $aktywacja=0 (niezarejestrowany) i wysyłasz do niego maila. Zmienna hash generowana jest za pomoca md5, natomiast nazwisko, to wiadomo oso chodzi

(możesz używać id, bylo by nawet lepsze):
zamow.php
<?php
// generujesz unikalny hash
// jezeli rejestracja przebiegła bez zakłóceń, to wysyłasz maila:
mail($email, $temat, \"Dziękujemy bla bla bla.nŻeby potwierdzić zamówienie kliknij w poniższy link
:nhttp://localhost/potwierdz.php?hash=$hash&nazwisko=$nazwisko\", $nadawca);
?>
a teraz plik, który aktywuje konto, zmienia $aktywacja=1 (zarejestrowany)
potwierdz.php
<?php
include('config.php');
// sprawdzasz, czy zgadza się hash i nazwisko i czy konto jeszcze nie zostało akty
owane
$sql = \"SELECT id FROM zamowienia WHERE hash = '$hash' AND nazwisko = '$nazwisko' AND (aktywacja != '1')\";
print '<center><h2>Zamówienie zostało już potwierdzone,<BR>albo hash lub nazwisko są błędne.</h2></center>'; }
// a teraz aktywujesz konto zmieniasz wartość zmienne aktywacja na 1
$sql2 = \"UPDATE zamowienia SET aktywacja='1' WHERE hash = '$hash' AND nazwisko = '$nazwisko'\";
print \"<center><h1>Dziękujemy za potwierdzenie zamówienia</h1><BR><h2>Teraz możesz skasować tę wiadomość</h2></center>\";
?>