• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

aktywacja konta php - nie zwmienia się wartość klucza

Object Storage Arubacloud
0 głosów
165 wizyt
pytanie zadane 27 września 2020 w PHP przez mn130496 Gaduła (3,530 p.)

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.

1 odpowiedź

0 głosów
odpowiedź 27 września 2020 przez dayvu Obywatel (1,470 p.)

Czy ma to może znaczenie że pracuje na localhoscie a nie na prawdziwym serwerze ?

Aby udostępnić publicznie serwer postawiony tylko na swoim komputerze skorzystaj z NGROK. Spróbuj, czy to rozwiązanie zadziała.

$wiadomosc = str_replace("[url]","http://" . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'], $wiadomosc);

Jesteś pewien, że do dobry adres aktywacyjny?

komentarz 27 września 2020 przez Scheduler Mądrala (6,950 p.)

Tu raczej problemem jest istnienie 

if(isset($_POST['email']))

który pewnie blokuje dostęp do reszty skryptu.

komentarz 27 września 2020 przez dayvu Obywatel (1,470 p.)

W takim razie, jeśli w mailu leci zwykł link, to kliknięcie w link powoduje wysłanie requestu metodą GET, więc też i tablica $_POST nie będzie zawierała danych które sprawdzasz w skrypcie wyżej.

// http://SOME_URL?SOME_PARAM=true

if (isset($_GET['SOME_PARAM'])) {
    ...
}

 

komentarz 29 września 2020 przez VBService Ekspert (253,300 p.)

Można użyć $_REQUEST

An associative array that by default contains the contents of $_GET$_POST and $_COOKIE.

<?php

$_GET['one'] = 'pasja';
$_POST['two'] = 'informatyki';

var_dump($_GET);
var_dump($_POST);
var_dump($_REQUEST);

?>

 

Podobne pytania

0 głosów
0 odpowiedzi 754 wizyt
0 głosów
2 odpowiedzi 1,148 wizyt
pytanie zadane 19 lutego 2023 w Systemy operacyjne, programy przez Annatar Nowicjusz (150 p.)
+1 głos
1 odpowiedź 188 wizyt
pytanie zadane 22 grudnia 2022 w Bezpieczeństwo, hacking przez sochun Początkujący (350 p.)

92,568 zapytań

141,422 odpowiedzi

319,629 komentarzy

61,956 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...