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

System rejestracji/logowania

VPS Starter Arubacloud
0 głosów
640 wizyt
pytanie zadane 18 maja 2017 w PHP przez bezmózg Nowicjusz (120 p.)

Hejka, męczę się cały dzień, kod przeczesany znak po znaku z plikami od pana Mirosława, ale nie mogę znaleźć błędów. Igła w stogu siana. Można wprawdzie podmienić i już, ale gnębi mnie to.

1.Po wejściu na index.php jest od razu "Nieprawidłowy login lub hasło!", Znika po zalogowaniu i wylogowaniu adamem, ale... to takie brzydkie:)

2.Po zarejestrowaniu do bazy, w bazie pojawia się nowe konto, ale z pustym nickiem i nie działa logowanie się.

3.W okienkach rejestracyjnych po próbach rejestracji w oknach zostaje jakby mnóstwo spacji albo kropek w oknach hasla, mimo ze wpisywane nie mialy takiej dlugosci

mój index.php

<?php

	session_start();
	
	if ((isset($_SESSION['zalogowany'])) && ($_SESSION['zalogowany']==true))
	{
		header('Location: gra.php');
		exit();
	}
?>
<!DOCTYPE HTML>
<html lang="pl">
<head>
	<meta charset="utf-8" />
	<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
	<title>Osadnicy - gra przeglądarkowa</title>
</head>

<body>
	
	Tylko martwi ujrzeli koniec wojny - Platon<br /><br />
    
    <a href="rejestracja.php">Załóż konto</a> <br /><br />
	
	<form action="zaloguj.php" method="post">
	
		Login: <br /> <input type="text" name="login" /> <br />
		Hasło: <br /> <input type="password" name="haslo" /> <br /><br />
		<input type="submit" value="Zaloguj się" />
	
	</form>
	
<?php
	if(isset($_SESSION['blad'])) echo $_SESSION['blad']; //bez ifa blad na stronie
?>
    <?php
    if (!isset($_SESSION['blad'])) 
    {
		unset($_SESSION['blad']); 
	}
    
    ?>
    
</body>
</html>

zaloguj.php

<?php

	session_start();
	
	if ((!isset($_POST['login'])) || (!isset($_POST['haslo'])))
	{
		header('Location: index.php');
		exit();
	}

	require_once "connect.php"; /*wymaganie skryptu i blokada jak nie ma go, w innym wypadku include. once jesli przypadkiem wiecej to zeby uzyl jednego */

/*połączenie z bazą */
$polaczenie = @new mysqli($host, $db_user, $db_password, $db_name);
/*@ to wyciszenie błedow, chcemy swoje nizej, 0 to false */

if ($polaczenie->connect_errno!=0)
	{
		echo "Error: ".$polaczenie->connect_errno;
	}
	else
	{
		$login = $_POST['login'];
		$haslo = $_POST['haslo'];
        
        //zmienianie na encje entem, zeby nie hakowac przy logowaniu
        $login = htmlentities($login, ENT_QUOTES, "UTF-8");
        
        //mysqlirealescape blokuje przed wpisywaniem znakow hakujacych
        if ($rezultat = @$polaczenie->query(sprintf("SELECT * FROM uzytkownicy WHERE user='%s'",
            mysqli_real_escape_string($polaczenie,$login))))
        {
            $ilu_userow = $rezultat->num_rows;
            if($ilu_userow>0)
            {
                $wiersz = $rezultat->fetch_assoc();
                
                if (password_verify($haslo, $wiersz['pass']))
                {
                    $_SESSION['zalogowany'] = true;

                    $_SESSION['id'] = $wiersz['id'];
                    $_SESSION['user'] = $wiersz['user'];
                    $_SESSION['drewno'] = $wiersz['drewno'];
                    $_SESSION['kamien'] = $wiersz['kamien'];
                    $_SESSION['zboze'] = $wiersz['zboze'];
                    $_SESSION['email'] = $wiersz['email'];
                    $_SESSION['dnipremium'] = $wiersz['dnipremium'];

                    unset($_SESSION['blad']); //wywalanie wywalania jesli udane zalogowanie

                    $rezultat->free_result();
                    header('Location: gra.php');
                }
                else 
            {
                $_SESSION['blad'] = '<span style="color:red">Nieprawidłowy login lub hasło!</span>';
				header('Location: index.php');
            }
                
            }
            else //co ma sie stac gdy ktos poda zle pasy
            {
                $_SESSION['blad'] = '<span style="color:red">Nieprawidłowy login lub hasło!</span>';
				header('Location: index.php');
            }
        }
    
        $polaczenie->close(); 
        /*zamkniete polaczenie skoro z new bylo otwarte, koniecznie tu przy hasleitp */
    }

?>

rejestracja.php

<?php

    session_start();

    //kiedy przetworzymy formularz
    if ( isset($_POST['email']) ) //to tez do calego formularza sie wiąże, nawet jak np email pusty
    {
        //udana walidacja
        $wszystko_ok=true;

        //sprawdzenie nicka
        $nick = $_POST['nick'];

        //spr długości
        if ( (strlen($nick)<3) || (strlen($nick)>20) )
        {
            $wszystko_ok=false;
            $_SESSION['e_nick']="Nick ma mieć od 3 do 20 znaków";
        }
        if ( ctype_alnum($nick)==false )
        {
            $wszystko_ok=false;
            $_SESSION['e_nick']="Tylko litery i cyfry bez pl znaków";
        }

    //spr poprawnosci maila
    $email = $_POST['email'];
    $emailsafe = filter_var($email, FILTER_SANITIZE_EMAIL); //usuwa niebezpieczne znaki
    
    if ( (filter_var($emailsafe, FILTER_VALIDATE_EMAIL)==false) || ($emailsafe!=$email) )
    {
        $wszystko_ok=false;
        $_SESSION['e_email']="Podaj poprawny mail";
    }
    
    //spr popr hasla
    $haslo1 = $_POST['haslo1'];
    $haslo2 = $_POST['haslo2'];
    
    //dlugosc
    if ( (strlen($haslo1)<8) || (strlen($haslo1)>20))
    {
        $wszystko_ok=false;
        $_SESSION['e_haslo']="Hasło od 8 do 20 znaków";
    }
    
    if ($haslo1!=$haslo2)
    {
        $wszystko_ok=false;
        $_SESSION['e_haslo']="Hasła nieidentyczne";
    }
    
    $haslo_hash = password_hash($haslo1, PASSWORD_DEFAULT);

    //czy zaakceptowano regulamin
    if ( !isset($_POST['regulamin']) )
    {
        $wszystko_ok=false;
        $_SESSION['e_regulamin']="Zaakceptuj regulamin";
    }
    
    //czy zaznaczona capcha
    $sekret = "6LdZ4CEUAAAAACdc_JG7cZZbmXo3zNOm7n1-p4tF";
    //odp googla czy weryfikacja udana
    $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)
    {
        $wszystko_ok=false;
        $_SESSION['e_bot']="Zaznacz captche";
    }
        //Zapamiętaj wprowadzone dane
		$_SESSION['fr_nick'] = $nick;
		$_SESSION['fr_email'] = $email;
		$_SESSION['fr_haslo1'] = $haslo1;
		$_SESSION['fr_haslo2'] = $haslo2;
		if (isset($_POST['regulamin'])) $_SESSION['fr_regulamin'] = true;
        
    //zeby sie nie powtorzylo
    require_once "connect.php";
    mysqli_report(MYSQLI_REPORT_STRICT); //zeby nie podawalo wielu ostrzezen o np nazwie usera, same wyjatki z nizej ma podawacz
    
    try //zamiast malpy omg
    {
        $polaczenie = new mysqli($host, $db_user, $db_password, $db_name);
        if ($polaczenie->connect_errno!=0)
	   {
		throw new Exception(mysqli_connect_errno());
	   }
        else
        {
            //czy email juz istnieje
            $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)
            {
        $wszystko_ok=false;
        $_SESSION['e_mail']="Istnieje juz konto z takim mailem";
            }
            
            //czy nick juz istnieje
            $rezultat = $polaczenie->query("SELECT id FROM uzytkownicy WHERE user='$nick'");
            
            if (!$rezultat) throw new Exception($polaczenie->error);
            
            $ile_takich_nickow = $rezultat->num_rows;
            if ($ile_takich_nickow>0)
            {
            $wszystko_ok=false;
            $_SESSION['e_nick']="Istnieje juz taki gracz";
            }
            
            if ($wszystko_ok==true)
                {
                //Hura, all ok
                if ($polaczenie->query("INSERT INTO uzytkownicy VALUES (NULL, '$_nick', '$haslo_hash', '$email', 100, 100, 100, 14)"))
                {
                    $_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 serwa, sory za niedogodność, zarejestruj sie kiedy indziej</span>';
        echo '<br />Informacja developersja: '.$e; //podczas testów włączone, potem nie
    }

}

?>

<!DOCTYPE HTML>
<html lang="pl">
<head>
	<meta charset="utf-8" />
	<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
	
	<title>Osadnicy - załóż konto</title>
    <script src='https://www.google.com/recaptcha/api.js'></script>
	
    <style>
    .error
        {
            color: red;
            margin-top: 10px;
            margin-bottom: 10px;
        }
    </style>
</head>

<body>
<!--	bez action bo bez przekierowywania-->
    <form method="post">
    Nickname: <br /><input type="text" value="
        <?php
			if (isset($_SESSION['fr_nick']))
			{
				echo $_SESSION['fr_nick'];
				unset($_SESSION['fr_nick']);
			}
		?>
        " name="nick" /><br />
        
        <?php
        if ( isset($_SESSION['e_nick']) )
            {
                echo '<div class="error">'.$_SESSION['e_nick'].'</div>';
                unset($_SESSION['e_nick']);
            }
        ?>
        
    e-mail: <br /><input type="text" value="
        <?php
        if (isset($_SESSION['fr_email']))
			{
				echo $_SESSION['fr_email'];
				unset($_SESSION['fr_email']);
			}
		?>
        " name="email" /><br />
        
        <?php
        if ( isset($_SESSION['e_email']) )
        {
            echo '<div class="error">'.$_SESSION['e_email'].'</div>';
            unset($_SESSION['e_email']);
        }
        ?>
        
    haslo: <br /><input type="password" value="
        <?php
        if (isset($_SESSION['fr_haslo1']))
			{
				echo $_SESSION['fr_haslo1'];
				unset($_SESSION['fr_haslo1']);
			}
		?>
        " name="haslo1" /><br />
        
         <?php
        if ( isset($_SESSION['e_haslo']) )
        {
            echo '<div class="error">'.$_SESSION['e_haslo'].'</div>';
            unset($_SESSION['e_haslo']);
        }
        ?>
        
    Powtórz hasło: <br /><input type="password" value="
        <?php
        if (isset($_SESSION['fr_haslo2']))
			{
				echo $_SESSION['fr_haslo2'];
				unset($_SESSION['fr_haslo2']);
			}
		?>
        " name="haslo2" /><br />
        
<!--    bez niczego po akceptuje regulamin zaznacza sie tylko kwadracik, z labelem z napisem-->
        <label>    
        <input type="checkbox" name="regulamin" 
               <?php
                if (isset($_SESSION['fr_regulamin']))
                {
                    echo "checked";
                    unset($_SESSION['fr_regulamin']);
                }
                    ?> 
               />Akceptuję regulamin
        </label>
         <?php
        if ( isset($_SESSION['e_regulamin']) )
        {
            echo '<div class="error">'.$_SESSION['e_regulamin'].'</div>';
            unset($_SESSION['e_regulamin']);
        }
        ?>
        
    <div class="g-recaptcha" data-sitekey="6LdZ4CEUAAAAANrSxVMAWXaRjF0iuasEpisljcxX"></div>

          <?php
        if ( isset($_SESSION['e_bot']) )
        {
            echo '<div class="error">'.$_SESSION['e_bot'].'</div>';
            unset($_SESSION['e_bot']);
        }
        ?>
        
        <br />
        <input type="submit" value="Zarejestruj się" />
    </form>
	
</body>
</html>

Zabrakło  tu miejsca więc wklejam link do dalszego kodu http://wklej.org/id/3116647/

Umie ktoś wypatrzyć co tu źle?:)

1 odpowiedź

+1 głos
odpowiedź 18 maja 2017 przez tirith Mądrala (5,940 p.)
W tej linijce..

 

if ($polaczenie->query("INSERT INTO uzytkownicy VALUES (NULL, '$_nick', '$haslo_hash', '$email', 100, 100, 100, 14)"))

 

zamiast $_nick powinno być $nick
komentarz 18 maja 2017 przez bezmózg Nowicjusz (120 p.)

O Boże, nie wierzę w siebie, jaki przypałblush

 

dziękuję bardzo!

komentarz 18 maja 2017 przez tirith Mądrala (5,940 p.)
Żaden przypał. Nie takie błędy są nawet w profesjonalnych aplikacjach :) I ciężko czasem wyłapać jak się jakiś znak niepotrzebny wkradnie.

Podobne pytania

0 głosów
2 odpowiedzi 652 wizyt
pytanie zadane 25 listopada 2018 w PHP przez niezalogowany
–4 głosów
1 odpowiedź 714 wizyt
pytanie zadane 21 października 2016 w PHP przez Warzywo Gaming Początkujący (320 p.)
–2 głosów
4 odpowiedzi 642 wizyt
pytanie zadane 18 września 2015 w PHP przez Nlvg Użytkownik (550 p.)

92,452 zapytań

141,261 odpowiedzi

319,074 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...