Witam
Ostatnio zacząłem uczyć się języka php. Napisałem sobie system rejestracji z aktywacją konta poprzez adres e-mail.Zrobiłem to w ten sposób:
<?php
session_start();
if(isset($_POST['email']))
{
$udana_walidacja = true;
//Walidacja loginu
$login = $_POST['login'];
//Sprawdzanie długości loginu
if( (strlen($login) < 3) || (strlen($login) > 20) )
{
$udana_walidacja = false;
$_SESSION['e_login'] = "Login musi posiadać od 3 do 20 znaków";
}
//Sprawdzanie czy login składa się z znaków alfanumerycznych bez polskich znaków
if(ctype_alnum($login) == FALSE)
{
$udana_walidacja = FALSE;
$_SESSION['e_login'] = "Login musi składać się ze znaków alfanumerycznych (bez polskich znaków)! ";
}
//Walidacja emaila
$email = $_POST['email'];
$emailB = filter_var($email, FILTER_SANITIZE_EMAIL);
if ((filter_var($emailB, FILTER_VALIDATE_EMAIL)==false) || ($emailB!=$email))
{
$udana_walidacja = FALSE;
$_SESSION['e_email']="Podaj poprawny adres e-mail!";
}
//Walidacja hasła
$haslo1 = $_POST['haslo1'];
$haslo2 = $_POST['haslo2'];
//Sprawdzanie czy hasła są takie same
//Sprawdzanie długości hasła
if((strlen($haslo1) < 8 ) || (strlen($haslo1) > 20 ))
{
$udana_walidacja = FALSE;
$_SESSION['e_haslo'] = "Hasło musi posiadać od 8 do 20 znaków!";
}
// Sprawdzanie czy podane hasła są identyczne
if($haslo1 != $haslo2)
{
$udana_walidacja = FALSE;
$_SESSION['e_haslo'] = "Podane hasła różnią się";
}
// Sprawdzanie czy hasło posiada przynajmniej jedną wielką literę i przynajmniej 1 znak specjalny
if(!preg_match('@[A-Z]@', $haslo1))
{
$udana_walidacja = FALSE;
$_SESSION['e_haslo'] = "Hasło musi posiadać przynajmniej 1 dużą literę i znaki specjalne";
}
// haszowanie hasła
$haslo_hasz = $haslo_hash = password_hash($haslo1, PASSWORD_DEFAULT);
//Sprawdzenie czy zaakceptowano regulamin
if(!isset($_POST['regulamin']))
{
{
$udana_walidacja = FALSE;
$_SESSION['e_regulamin'] = "Zaakceptuj regulamin! ";
}
}
Sprawdzenie czy recaptcha jest zaznaczona
$sekret = "6LdZitAZAAAAAK2dIek6DMo78L8Rc-5hCq-1TBLg";
$sprawdz = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$sekret.'&response='.$_POST['g-recaptcha-response']);
$odpowiedz = json_decode($sprawdz);
if ($odpowiedz->success==false)
{
$udana_walidacja=false;
$_SESSION['e_bot']="Potwierdź, że nie jesteś botem!";
}
$kod = md5(mt_rand());
//łączenie z bazą
require_once "connect.php";
mysqli_report(MYSQLI_REPORT_STRICT);
try
{
$polaczenie = new mysqli($host,$db_user,$db_password,$db_name);
if($polaczenie->connect_errno !=0)
{
throw new EXCEPTION(mysqli_connect_errno());
}
else
{
$rezultat = $polaczenie->query("SELECT id FROM uzytkownicy WHERE email='$email'");
if (!$rezultat) throw new Exception($polaczenie->error);
$ile_takich_maili = $rezultat->num_rows;
if($ile_takich_maili>0)
{
$udana_walidacja = FALSE;
$_SESSION['e_email']="Istnieje już konto przypisane do tego adresu e-mail!";
}
$rezultat = $polaczenie->query("SELECT id FROM uzytkownicy WHERE login='$login'");
if (!$rezultat) throw new Exception($polaczenie->error);
$ile_takich_loginow = $rezultat->num_rows;
if($ile_takich_loginow>0)
{
$udana_walidacja = FALSE;
$_SESSION['e_login']="Istnieje już użytkownik o takim loginie , Wybież inny login !";
}
if($udana_walidacja == TRUE)
{
if($polaczenie -> query("INSERT INTO uzytkownicy VALUES (NULL , '$login','$haslo_hash','$email','$kod')"))
{
$email_temple = "email_aktywacja_szablon.html";
$wiadomosc = file_get_contents($email_temple);
$wiadomosc = str_replace("[login]", $login, $wiadomosc);
$wiadomosc = str_replace("[key]", $kod, $wiadomosc);
$wiadomosc = str_replace("[url]","http://" . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'], $wiadomosc);
require_once("wyslij_wiadomosc.php");
send_mail("admin@gmail.com","admin","aktywacja", $wiadomosc);
if(isset($_GET['activate']))
{
$kod= $_GET['activate'];
$rezultat = $polaczenie->query("SELECT kod FROM uzytkownicy WHERE kod='$kod'");
if(empty($rezultat))
{
echo "Błąd";
exit();
}
{
$rezultat = $polaczenie->query("UPDATE uzytkownicy SET kod='active' WHERE kod = '$kod'");
}
}
$_SESSION['udanarejestracja']=true;
header('Location: witamy.php');
}else {
throw new Exception ($polaczenie -> error);
}
}
$polaczenie -> close();
}
}
catch(Exception $e)
{
echo '<span style="color:red;">Błąd serwera! Przepraszamy za niedogodności i prosimy o rejestrację w innym terminie!</span>';
echo '<br />Informacja developerska: '.$e;
}
}
?>
Wszystko działa prawie dobrze kod się generuje , dane są wprowadzane do bazy danych , wiadomość dochodzi na podany adres e-mail.Problem jest w tym , że gdy wiadomość mi już przyjdzie i kliknę w przycisk aktywuj konto to pole kod (bo tak je nazwałem w bazie ) nie zmienia swojej wartości z zaszyfrowanego kodu na active i dalej jest ten wygenerowany kod. Jako pocztę używam serwisu mailtrap.io . Czy ktoś może mi pomóc w znalezieniu błędu w tym kodzie?, Czy ma to może znaczenie że pracuje na localhoscie a nie na prawdziwym serwerze ?. Z góry dziękuję za pomoc.