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?:)