Diskuze: Presmerovanie po prihlaseni
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.


Neaktivní uživatel:26.3.2015 6:04
Přesměrovávání se provádí pomocí "hlaviček":
<?php
<html>
/* This will give an error. Note the output
* above, which is before the header() call */
header('Location: http://www.example.com/');
exit;
?>
Před hlavičkou nesmí být žádný výstup, jinak se to ale používá
takto. Ve tvém případě
bych celý ten PHP kód hodil na začátek a až budeš chtít přesměrovat,
napíšeš:
header('Location: administrace.php');
exit();
Taky si na to můžeš třeba napsat funkci redirect, což by ti později ulehčilo práci.
+20 Zkušeností
+2,50 Kč

Dal som to takto ale stale som na login.php
<?php
$db_host = "localhost";
$db_uzivatel = "Skull";
$db_heslo = "12345";
$db_databaze = "authme";
$db_tabulka = "authme";
$hash = "SHA256";
if(isset($_SESSION['uzivatel'])) {
echo "<a href='?odhlasit=true'><button>Odhlásit</button>";
if(isset($_GET['odhlasit']) && $_GET['odhlasit']==true) session_destroy();
} else {
$mysqli = new mysqli($db_host, $db_uzivatel, $db_heslo, $db_databaze);
if ($mysqli->connect_errno)
{
echo "Failed to connect to MySQL: " . $mysqli->connect_error;
exit();
}
if (isset($_POST['nick']) && isset($_POST['heslo']))
{
if (!empty($_POST['nick']) && !empty($_POST['heslo']))
{
//Ochrana a tvorba variablů
$nick = preg_replace('/\s+/', '', $_POST['nick']);
$heslo = preg_replace('/\s+/', '', $_POST['heslo']);
$result = $mysqli->query("SELECT password FROM ".$db_tabulka." WHERE username = '".$nick."'");
$row = $result->fetch_assoc();
switch ($hash) {
case 'MD5':
$heslicko = hash('md5', $heslo) === $row['password']; break;
case 'SHA1':
$heslicko = hash('sha1', $heslo) === $row['password']; break;
case 'SHA256':
$userPasswordField = explode('$', $row['password']);
$heslo = hash('sha256', $heslo);
$heslo .= $userPasswordField[2];
$heslo = '$SHA$' . $userPasswordField[2] . '$' . hash('sha256', $heslo);
$heslicko = $heslo === $row['password'];
break;
}
$ip = $_SERVER['REMOTE_ADDR'];
$query_nick = mysqli_query($mysqli, "SELECT username FROM ".$db_tabulka." WHERE username = '".$nick."'");
if ($data_nick = mysqli_fetch_array($query_nick))
{
if ($heslicko)
{
$_SESSION['uzivatel'] = $nick;
header ("Location: administrace.php");
}
else
{
echo "<div style='color: red;'><strong>Toto heslo není správné.</strong></div>";
}
}
else
{
echo "<div style='color: red;'><strong>Tato přezdívka nebyla nalezena.</strong></div>";
}
}
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Přihlášení</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="author" content="zdenda204">
</head>
<body>
<form method='post'>
<input type="text" name='nick' placeholder="Nick">
<input type="password" name='heslo' placeholder="Heslo">
<button type="submit">Přihlásit!</button>
</form>
</body>
</html>
Ori I:26.3.2015 11:50
skús za ten header dať aj exit;
header ("Location: administrace.php");
exit;
Inak nechýba ti tam čisto náhodou niekde session_start(); ?
Vsetko ide ako ma len ak napisem zle meno aj heslo tak mi to vyhodi toto:
Notice: Undefined offset: 2 in localhost\Web\login.php on line 33
Notice: Undefined offset: 2 in localhost\Web\login.php on line 34
Tato přezdívka nebyla nalezena.
Ale ked dam spravne meno a zle heslo tak mi to vypise iba:
Toto heslo není správné.
Ako odstranim tento error?
Tu je code:
<?php
$db_host = "localhost";
$db_uzivatel = "Skull";
$db_heslo = "12345";
$db_databaze = "authme";
$db_tabulka = "authme";
$hash = "SHA256";
session_start();
if(isset($_SESSION['uzivatel'])) {
header ("Location: administrace.php");
exit;
} else {
$mysqli = new mysqli($db_host, $db_uzivatel, $db_heslo, $db_databaze);
if ($mysqli->connect_errno)
{
echo "Failed to connect to MySQL: " . $mysqli->connect_error;
exit();
}
if (isset($_POST['nick']) && isset($_POST['heslo']))
{
if (!empty($_POST['nick']) && !empty($_POST['heslo']))
{
$nick = preg_replace('/\s+/', '', $_POST['nick']);
$heslo = preg_replace('/\s+/', '', $_POST['heslo']);
$result = $mysqli->query("SELECT password FROM ".$db_tabulka." WHERE username = '".$nick."'");
$row = $result->fetch_assoc();
switch ($hash) {
case 'SHA256':
$userPasswordField = explode('$', $row['password']);
$heslo = hash('sha256', $heslo);
$heslo .= $userPasswordField[2];
$heslo = '$SHA$' . $userPasswordField[2] . '$' . hash('sha256', $heslo);
$heslicko = $heslo === $row['password'];
break;
}
$ip = $_SERVER['REMOTE_ADDR'];
$query_nick = mysqli_query($mysqli, "SELECT username FROM ".$db_tabulka." WHERE username = '".$nick."'");
if ($data_nick = mysqli_fetch_array($query_nick))
{
if ($heslicko)
{
$_SESSION['uzivatel'] = $nick;
header ("Location: administrace.php");
exit;
}
else
{
echo "<div style='color: red;'><strong>Toto heslo není správné.</strong></div>";
}
}
else
{
echo "<div style='color: red;'><strong>Tato přezdívka nebyla nalezena.</strong></div>";
}
}
}
}
?>
<!DOCTYPE html
<html>
<head>
<meta charset="utf-8" />
<title>Prihlasenie</title>
<link rel="stylesheet" href="CSS/Login.css" type="text/css" />
</head>
<body><center>
<article>
<div id="centrovac">
<section>
<br>
<div class="cistic"></div>
<center>
<div style="margin:80px auto 40px;">
<div id="logo">Prihlasenie</div>
</div>
<div style="margin:80px auto 40px;">
<center>
<form method='post'>
<input type="text" class="text-input" name='nick' placeholder="Nick na serveri">
<div style="margin:10px auto 10px;">
<input type="password" class="text-input" name='heslo' placeholder="Heslo">
<div style="margin:10px auto 10px;">
<button type="submit" class="button">Přihlásit!</button>
</form>
<div style="margin:100px auto 50px;">
<p>Ak niesi zaregistrovany na serveri<br> pokracuj v Offline rezime</p>
<a href="Domov.php" class="button">Offline rezim</a>
</center>
</div>
</center><br>
</section>
<div class="cistic"></div>
</div>
</article>
</center></body>
</html>
Ori I:27.3.2015 10:19
Skontroluješ či je premenná row niečim naplnená, ak nieje znamená to, že username neexistuje a ty vypíšeš chybu
Zobrazeno 8 zpráv z 8.