Avatar
ddankool
Člen
Avatar
ddankool:

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
Inoue Yūki
Redaktor
Avatar
Odpovídá na ddankool
Inoue Yūki:

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í
+1 bodů
Řešení problému
Nahoru Odpovědět  +1 26.3.2015 6:04
Avatar
ddankool
Člen
Avatar
ddankool:

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
Člen
Avatar
Odpovídá na ddankool
Ori:

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  +2 26.3.2015 11:50
Avatar
ddankool
Člen
Avatar
ddankool:

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:

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:

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
Člen
Avatar
Odpovídá na ddankool
Ori:

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.