Diskuze: Systém registrace a přihlášení na webu
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 11 zpráv z 11.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
registrace.php
<fieldset>
<legend>Registrace</legend>
<form method="POST">
<table>
<tr>
<td><label for="jmeno">Jméno: </label></td><td><input class="t" maxlength="25" type="text" name="jmeno" /></td>
</tr>
<tr>
<td><label for="heslo">Heslo: </label></td><td><input class="t" maxlength="25" type="password" name="heslo" /></td>
</tr>
<tr>
<td><label for="heslo">Heslo znovu: </label></td><td><input class="t" maxlength="25" type="password" name="hesloz" /></td>
</tr>
<tr>
<td><label for="email">E-mail: </label></td><td><input class="t" maxlength="25" type="text" name="email" value="@" /></td>
</tr>
<tr>
<td><input class="s" type="submit" value="Registrovat" /></td>
</tr>
</table>
</form>
</fieldset>
<?php
if ($_POST["jmeno"] != "" &&
$_POST["heslo"] == $_POST["hesloz"] &&
$_POST["heslo"] != "" &&
$_POST["email"] != "") {
$pripojeni = mysql_connect("localhost", "root", "");
mysql_select_db("druha", $pripojeni);
$sql = "INSERT INTO registrace (jmeno, heslo, email)
VALUES
('$_POST[jmeno]','$_POST[heslo]','$_POST[email]')";
if (mysql_query($sql, $pripojeni)){
echo "
<script type='text/javascript'>
alert('Úspěšně zaregistrováno! Nyní je možné se přihlásit.');
</script>
";
}
mysql_close($pripojeni);
}
else if($_POST["heslo"] != $_POST["hesloz"]) {
echo "<script type='text/javascript'>alert('Hesla poňekud nesouhlasí!');</script>";
}
else if($_POST["jmeno"] != "" || $_POST["heslo"] != "" || $_POST["hesloz"] != "" || $_POST["email"] != "") {
echo "<script type='text/javascript'>alert('Vyplňte všechna pole!');</script>";
}
?>
prihlasit.php
<fieldset>
<legend>Přihlásit</legend>
<form method="POST">
<table>
<tr>
<td><label for="jmeno">Jméno: </label></td><td><input class="t" maxlength="25" type="text" name="jmeno" /></td>
</tr>
<tr>
<td><label for="heslo">Heslo: </label></td><td><input class="t" maxlength="25" type="password" name="heslo" /></td>
</tr>
<tr>
<td><input class="s" type="submit" value="Přihlásit" /></td>
</tr>
</table>
</form>
</fieldset>
<?php
$pripojeni = mysql_connect("localhost","root","");
mysql_select_db("druha", $pripojeni);
$vysledek = mysql_query("SELECT * FROM registrace
WHERE jmeno='$_POST[jmeno]' AND heslo='$_POST[heslo]'");
if($tt = mysql_fetch_array($vysledek)) {
$prihlaseno = $tt['jmeno'];
session_start();
$_SESSION["prihlaseno"] = $prihlaseno;
session_write_close();
echo "<script type='text/javascript'>alert('Úspěšně přihlášeno!');</script>";
}
else if($_POST['jmeno'] != "" || $_POST['heslo'] != "") echo "<script type='text/javascript'>alert('Jméno nebo heslo bylo napsáno špatně přihlášeno!');</script>";
mysql_close($pripojeni);
?>
odhlasit.php
<?php
session_start();
session_unset();
session_write_close();
header("Location: index.php?stranka=domov");
?>
index.php lišta s přihlášením
<?php
session_start();
if ($_SESSION["prihlaseno"] != "") {
echo "Přihlášeno jako: ".$_SESSION["prihlaseno"]." | <a href='?stranka=odhlasit'>odhlásit</a>";
}
else echo "<a href='?stranka=registrace'>Registrace</a> |
<a href='?stranka=prihlasit'>Přihlásit</a>";
session_write_close();
?>
Ukládat heslo do databáze je velmi, velmi špatný nápad. Hesla se ukládají jen jako tzv. otisk, ze kterého původní heslo získat nelze. Když uživatel zadá heslo, udělá se jeho otisk a ten se porovná s otiskem v databázi. Pokud souhlasí, je heslo správné. Otisku se říká hash, v PHP existuje stejnojmenná funkce, je popsaná ve zdejším manuálu: http://www.itnetwork.cz/…y-php-manual
Kdyby ti nebylo něco jasné, tak se ptej 
Teď jsem si všiml, že vůbec neescapuješ hodnoty co vkládáš do databáze. Přeci nemůžeš dělat tohle:
$sql = "INSERT INTO registrace (jmeno, heslo, email)
VALUES
('$_POST[jmeno]','$_POST[heslo]','$_POST[email]')";
Podívej se do sekce PHP na článek o SQL injekci, je to dost nebezpečné.
Jo, nějak takto
To musí
být všude, kde jde do querystringu nějaká proměnná, pokud to někde jinde
na webu nemáš, tak si to rychle oprav.
V této podobě ti to sice fungovat nebude, ale je to na dobré cestě.
Aha, jsem to nějak přehlédl. Vidím, že tutoriály sis asi nepřečetl...
Zdejší PHP tutoriály jsem nečetl, kromě tohoto: http://www.itnetwork.cz/…y-php-manual
Zobrazeno 11 zpráv z 11.