IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
ddankool
Člen
Avatar
ddankool:25.3.2015 23:37

Dobry vecer mam skript login authme a vsetko ide len ked sa prihlasim tak som na tej istej strane potreboval by som ze po prihlaseni ma hodi na administrace.php a tam budem mat info o uzivatelovi a pod. Prosim poradte co a kde to mam dopisat. Za odpovede vopred Dakujem.

<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>

<?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;
            echo "<div style='color: green;'><strong>Úspěšně přihlášen.</strong></div>";
           }
         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>";
      }
   }
}
}
?>
</body>
</html>
 
Odpovědět
25.3.2015 23:37
Avatar
Odpovídá na ddankool
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.

Editováno 26.3.2015 6:06
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
26.3.2015 6:04
Neaktivní uživatelský účet
Avatar
ddankool
Člen
Avatar
ddankool:26.3.2015 11:40

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>
Editováno 26.3.2015 11:42
 
Nahoru Odpovědět
26.3.2015 11:40
Avatar
Ori I
Člen
Avatar
Odpovídá na ddankool
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(); ?

 
Nahoru Odpovědět
26.3.2015 11:50
Avatar
ddankool
Člen
Avatar
ddankool:26.3.2015 11:57

Aha nevšimol som si to :D Dakujem vám za pomoc :)

 
Nahoru Odpovědět
26.3.2015 11:57
Avatar
ddankool
Člen
Avatar
ddankool:26.3.2015 19:09

Vsetko ide ako ma len ak napisem zle meno aj heslo tak mi to vyhodi toto:
Notice: Undefined offset: 2 in localhost\Web\lo­gin.php on line 33
Notice: Undefined offset: 2 in localhost\Web\lo­gin.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?

 
Nahoru Odpovědět
26.3.2015 19:09
Avatar
ddankool
Člen
Avatar
ddankool:26.3.2015 19:20

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>
 
Nahoru Odpovědět
26.3.2015 19:20
Avatar
Ori I
Člen
Avatar
Odpovídá na ddankool
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

 
Nahoru Odpovědět
27.3.2015 10:19
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.