Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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í.

Diskuze: Error

Aktivity
Avatar
ddankool
Člen
Avatar
ddankool:26.3.2015 19:59

Sory za spam Prihlasovaci script Vsetko mi 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?
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>
 
Odpovědět
26.3.2015 19:59
Avatar
misaj
Člen
Avatar
Odpovídá na ddankool
misaj:26.3.2015 21:28

Problém je nejspíš zde:

$heslo .= $userPasswordField[2];
$heslo = '$SHA$' . $userPasswordField[2] . '$' . hash('sha256', $heslo);

Nejspíš explode nazafunguje na tvá data podle očekávání.

 
Nahoru Odpovědět
26.3.2015 21:28
Avatar
Odpovídá na ddankool
Neaktivní uživatel:27.3.2015 7:16

Z databáze taháš data podle nicku. Pokud ho tedy nevyplníš, dotaz na databázi vrátí prázdný výsledek. Poté tento prázdný dotaz, respektive prázdný string rozdělíš do pole, pomocí explode. Výsledné pole samozřejmě nic neobsahuje, ale ty přesto po něm požaduješ index číslo 2.
Doporučuji ti to obalit do podmínky, která ověří, zda vůbec z databáze bylo něco získáno.

$result = $mysqli->query("SELECT password FROM ".$db_tabulka." WHERE username = '".$nick."'");
if ($result->num_rows >= 1) {
  // Databáze vrátila jeden nebo více řádků, uživatel existuje, normálně se pokračuje
  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;
  }
} else {
 // Uživatel neexistuje, zvolíš si, co se stane.
}
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
27.3.2015 7:16
Neaktivní uživatelský účet
Avatar
ddankool
Člen
Avatar
ddankool:27.3.2015 12:54

Mam to Dakujem velmi si mi pomohol :)

 
Nahoru Odpovědět
27.3.2015 12:54
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 4 zpráv z 4.