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

System rejestracji/logowania

Mały hosting, OGROMNE możliwości
0 głosów
1,051 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 1,208 wizyt
pytanie zadane 25 listopada 2018 w PHP przez niezalogowany
–4 głosów
1 odpowiedź 1,237 wizyt
pytanie zadane 21 października 2016 w PHP przez Warzywo Gaming Początkujący (320 p.)
–2 głosów
4 odpowiedzi 1,066 wizyt
pytanie zadane 18 września 2015 w PHP przez Nlvg Użytkownik (550 p.)

93,718 zapytań

142,631 odpowiedzi

323,263 komentarzy

63,266 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...