Diskuze: PHP login systém
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 9 zpráv z 9.
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.
Je to nejen zdlouhavé, ale navíc je to i špatně. Pro přihlašování se používá session a SQL dotaz musí mít jinou podobu než ty dva zmetky, které tam máš. Zkus hledat dál.
A ohledně vypisování té stránky ... mělo by se to udělat ještě jinak, nebo by jsem to mohl nechat normálně v echo() ?
Tak, jak to máš, je to poněkud nevýhodné, protože do toho echa nemůžeš vkládat obsah proměnných. Proto bývá obvykle výhodnější místo stringu v apostrofech použít Heredoc, kterým můžeš do výstupní stránky vkládat nejen čísla a stringy, ale i celé objekty.
ohladnetej HTML kodu mas na vyber viacero moznosti:
Ahoj, viděl jsem že se tu řeší login systém a to je přesně to, co se snažím teďka naučit/vytvořit. Proto prosím zkušené programátory, jestli mi kouknete na moje řešení. Zda li je myšlenka a provedení správné/bezpečné, nebo eventuelně jak to přepsat. zatím jsem neřešil připojení do DB a ověření uživatele, takže stačí když budou obě pole (user i pass) vyplněné čímkoli.
1. Soubor index.php
<?php
if (isset($_POST['SendCheck'])) {
if (isset($_POST['UserName']) && !empty($_POST['UserName']) &&
isset($_POST['Password']) && !empty($_POST['Password'])) {
//tady by prislo overeni vuci DB jestli existuje user a heslo je OK
session_start();
$_SESSION['UserName'] = $_POST['UserName'];
} else {
$ErrMsg = 'UserName or Password must be filled!';
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
<?php
// vypsani chybove zpravy
if (isset($ErrMsg))
echo('<strong>' . $ErrMsg . '</strong><br />');
//pokud je vytvorena session / uzivatel je prihlasen zobrazi kdo je prihlasen a moznost odlogovani
//pokud ne, pak zobrazi prihlasovaci formular
if (isset($_SESSION['UserName'])) {
echo('You are loged in as: ' . $_SESSION['UserName'] . '<br />');
echo('<a href="logout.php">LogOut</a>');
} else
{
echo('
<form method="post">
<label for="UserName">UserName</label>
<input name="UserName" type="text" /><br />
<label for="Password">Password</label>
<input name="Password" type="password" /><br />
<input type="submit" value="Login" />
<input name="SendCheck" type="hidden" value="LoginForm" />
</form>
');
}
?>
</body>
</html>
2. Soubor logout.php
<?php
$_SESSION = array();
session_destroy();
header('Location: index.php');
exit;
?>
Teď když na to koukám, tak mě ještě napadlo, že do URL odkazu odhlásit bych mohl přímo dopsat parametr např index.php?logout=true a pak na začátku indexu.php ještě testovat tuto hodnotu v $_GET, tam vykonat dohlášení a přesměrování zpět na index. Tím bych si ušetřil ten logout.php
<?php
session_start();
$errors = array();
if ($_POST) {
if (empty($_POST["name"])) {
$errors[] = "Nebylo zadáno jméno.";
}
if (empty($_POST["password"])) {
$errors[] = "Nebylo zadáno heslo.";
}
if (empty($errors)) {
// kontrola správnosti jména a hesla v DB
$_SESSION["uzivatel_id"] = $data_z_db["id"];
header("location:index.php");
exit;
}
}
// výpis chyb
if (!empty($errors)) {
echo "<ul>";
foreach ($errors as $error) {
echo "<li>" . $error . "</li>";
}
echo "</ul>";
}
Místo foreache by to mělo fungovat i přes funkci implode() na jeden řádek.
Zobrazeno 9 zpráv z 9.
