Diskuze: PHP login systém
Tvůrce
Zobrazeno 9 zpráv z 9.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
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.
Jo to se mi líbí víc Děkuji za odpověď.
Zobrazeno 9 zpráv z 9.