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š:
 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.
 
				

 Dakujem vám za pomoc
Dakujem vám za pomoc 