Witam
Na początek chciałbym zaznaczyć, że jest mój pierwszy wpis na forum wiec nie wiem czy wszystko zadziała prawidłowo
Mój problem polega na tym, że w formularzu rejestracji, który stworzyłem na podstawie kursu Pana Mirosława Zelenta pojawił się mały bug otóż mimo użycia funkcji ctype_alnum na zmiennej $nick w 18 linijce kodu Jakimś cudem mogę dodać do bazy gracza o nazwie król, królewicz, itd mimo ,że użycie tej funkcji miało eliminować polskie znaki z nicka dodam iż wszystkie inne polskie ogonki ą ,ś,ć ż ź są wyłapywane prawidłowo jako błędy
co ciekawe mimo iż udało się dodać do bazy danych gracza król na żaden sposób nie da się na konto tego gracza zalogować
Proszę o wskazanie miejsca gdzie popełniłem błąd i o wyrozumiałość jeżeli opis błędu jest dla kogoś mało zrozumiały
<?php
session_start();
if(isset($_POST['email']))
{
// udana walidacja załóżmy że tak
$wszystko_ok=true;
// sprawdzanie poprawnosci nicka
$nick=$_POST['nick'];
if ((strlen($nick)<3) || (strlen($nick)>20))
{
$wszystko_ok=false;
$_SESSION['e_nick']="Nick musi posiadać od 3 do 20 znaków ";
}
if(ctype_alnum($nick)==false)
{
$wszystko_ok=false;
$_SESSION['e_nick']="Nick może składać się tylko z liter i cyfr (bez polskich znaków)";
}
// sprawdzanie poprawnosci email
$email=$_POST['email'];
$emailB=filter_var($email, FILTER_SANITIZE_EMAIL);
if((filter_var($emailB, FILTER_VALIDATE_EMAIL)==false) ||($emailB!=$email))
{
$wszystko_ok=false;
$_SESSION['e_email']="Podaj poprawny adres E-mail";
}
//sprawdzanie poprawnosci hasla
$haslo1=$_POST['haslo1'];
$haslo2=$_POST['haslo2'];
if((strlen($haslo1)<8) || (strlen($haslo1)>20))
{
$wszystko_ok=false;
$_SESSION['e_haslo']="Hasło musi posiadać od 8 do 20 znaków";
}
if($haslo1!=$haslo2)
{
$wszystko_ok=false;
$_SESSION['e_haslo']="Podane hasła nie są identyczne";
}
$haslo_hash=password_hash($haslo1, PASSWORD_DEFAULT);
//czy zaakceptowano regulamin
if(!isset($_POST['regulamin']))
{
$wszystko_ok=false;
$_SESSION['e_regulamin']="Potwierdź akceptację regulaminu";
}
//Bot or not oto jest pytanie
$sekret="6Lex04EUAAAAAHp8_vgdXJh6yPE1fbq6YV4NMwNV";
$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']="Potwierdź że nie jesteś Botem";
}
//Zapamietaj wprowadzone danego
$_SESSION['fr_nick']=$nick;
$_SESSION['fr_email']=$email;
$_SESSION['fr_haslo1']=$haslo1;
$_SESSION['fr_haslo2']=$haslo2;
if(isset($_POST['$regulamin'])) $_SESSION['fr_regulamin']=true;
//połączenie z baza danych
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
{
//sprawdzamy 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_email']="Istnieje już konto przypisane do danego adresu E-mail";
}
// sprawdzamy 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 gracz o takim nicku! wybierz inny.";
}
//hura wszystkie testy zaliczone dodajemy gracza do bazy
if($wszystko_ok==true)
{
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);
}
}
//zamyknięcie połączenia
$polaczenie->close();
}
}
catch(Exception $e)
{
echo '<span style="color:red">',"Błąd serwera Przepraszamy za niedogodnosci i prosimy o rejestrację w innym terminie",'</span>';
// na docleowym serwerze wyswietlanie komunikatu o błędach dajemy w komentarz
echo '<br />Informacja deweloperska:', $e;
}
}
?>
<!DOCTYPE HTML>
<html lang="pl">
<head>
<meta charset="utf-8"/>
<meta http-equiv="X-UA-Compatibile" content="IE=edge,chrome=1" />
<title>Rejestracja załóż nowe 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>
<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']);
}
?>
Twoje 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 haslo: <br /><input type="password" value="<?php
if(isset($_SESSION['fr_haslo2']))
{
echo $_SESSION['fr_haslo2'];
unset($_SESSION['fr_haslo2']);
}
?>" name="haslo2"/><br />
<label>
<input type="checkbox" value="<?php
if(isset($_SESSION['fr_regulamin']))
{
echo "checked";
unset($_SESSION['fr_regulamin']);
}
?>" name="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="6Lex04EUAAAAALsDzo3bn4_GrZkLjJuNStXS0gi5"></div><br />
<?php
if(isset($_SESSION['e_bot']))
{
echo '<div class="error">'.$_SESSION['e_bot'].'</div>';
unset($_SESSION['e_bot']);
}
?>
<input type="submit" value="Zarejestruj się! "/>
</form>
</body>
</html>