• 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

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
203 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 (256,320 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 1,174 wizyt
0 głosów
2 odpowiedzi 1,787 wizyt
pytanie zadane 19 lutego 2023 w Systemy operacyjne, programy przez Annatar Nowicjusz (150 p.)
+1 głos
1 odpowiedź 215 wizyt
pytanie zadane 22 grudnia 2022 w Bezpieczeństwo, hacking przez sochun Początkujący (350 p.)

93,157 zapytań

142,171 odpowiedzi

321,879 komentarzy

62,486 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 224p. - Marcin Putra
  2. 224p. - nidomika
  3. 223p. - dia-Chann
  4. 221p. - ssynowiec
  5. 217p. - Mikbac
  6. 216p. - CC PL
  7. 215p. - Łukasz Piwowar
  8. 212p. - zmmz89
  9. 210p. - Adrian Wieprzkowicz
  10. 208p. - rafalszastok
  11. 206p. - Michal Drewniak
  12. 204p. - Łukasz Eckert
  13. 202p. - rucin93
  14. 200p. - robwarsz
  15. 198p. - TheLukaszNs
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...